Получить окно Python Turtle для отображения графики и оставаться открытым
В этом коде я не вижу, почему он не печатает шестиугольник 24 раза. Я говорю ему сделать 6-стороннюю форму с 60 градусами между линиями (шестиугольник) и скажу, чтобы она каждый раз поворачивалась на 15 градусов. В итоге получается даже 24 для картины, которую я пытаюсь нарисовать.
import turtle
Hex_Count = 0
x = turtle.Turtle()
x.speed(.25)
def Hexagon():
for i in range(24):
for i in range(6):
x.forward(100)
x.left(60)
Hex_Count = Hex_Count + 1
x.left(15)
print(Hex_Count)
Hexagon
Но по какой-то причине, когда я запускаю этот код, экран черепахи появляется примерно на полсекунды, а затем закрывается. Как заставить его работать так, как я хочу?
4 ответа
У вас есть несколько ошибок, которые я исправил для вас; Я добавил объяснение в комментариях:
import turtle
hexagons_count = 0
my_turtle = turtle.Turtle() # x is not a good name for a Turtle object
# my_turtle.speed(.25) # see @cdlane comment reported in a note under.
def draw_hexagon(): # use explicit names respecting python conventions (no camel case)
global hexagons_count # need global to modify the variable in the function scope
for idx in range(24): # use different dummy variable names in your loops
for jdx in range(6): # use different dummy variable names in your loops
my_turtle.forward(100)
my_turtle.left(60)
hexagons_count += 1
my_turtle.left(15)
print(hexagons_count)
draw_hexagon() # need parenthesis to call the function
turtle.exitonclick() # this to exit cleanly
Примечание: я знаю, что вы просто скопировали его из OP, но my_turtle.speed(.25) не имеет смысла, поскольку аргумент должен быть целым числом от 0 до 10 или строкой типа 'slow', 'fasttest' и т. Д. I особенно не понимаю, почему новички с неработающим кодом turtle вызывают turtle.speed() - мне кажется, что функция должна быть настроена после того, как все заработает. @cdlane
У вас есть проблема с ссылками, вам просто нужно поместить переменную hex_count там, где она должна быть, чтобы у вас не было ошибок при доступе к ней.
import turtle
x = turtle.Turtle()
x.speed(.25)
def Hexagon():
Hex_Count = 0
for i in range(24):
for i in range(6):
x.forward(100)
x.left(60)
Hex_Count += 1
x.left(15)
print(Hex_Count)
Hexagon()
печать 24
У вас есть несколько проблем с вашей программой. Одна из них заключается в том, что после запуска программы она закроет созданное окно. Можете добавить turtle.exitonclick()
до конца вашего скрипта, который говорит Python ждать щелчка в графическом окне, после чего он выйдет.
Вторая проблема заключается в том, что вы не называете Hexagon
функция, потому что вы пропустите скобки. Даже если функция не принимает аргументов, вы все равно должны вызывать ее следующим образом:
Hexagon()
Последняя проблема заключается в том, что вам нужно определить Hex_Count
прежде чем пытаться увеличить его. Hex_Count + 1
выдаст ошибку, если Hex_Count
не был уже назначен. Вы можете исправить это, поставив
Hex_Count = 0
прежде чем вы за цикл в Hexagon
,
Подход отличается во многих деталях, но в первую очередь в его использовании circle()
чтобы быстрее нарисовать шестиугольники:
from turtle import Turtle, Screen # force object-oriented turtle
hex_count = 0 # global to count all hexagons drawn by all routines
def hexagons(turtle):
global hex_count # needed as this function *changes* hex_count
for _ in range(24): # don't need explicit iteration variable
turtle.circle(100, steps=6) # use circle() to draw hexagons
turtle.left(15) # 24 hexagons offset by 15 degrees = 360
hex_count += 1 # increment global hexagon count
print(hex_count)
screen = Screen()
yertle = Turtle(visible=False) # keep turtle out of the drawing
yertle.speed('fastest') # ask turtle to draw as fast as it can
hexagons(yertle)
screen.exitonclick() # allow dismiss of window by clicking on it