Получить окно 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
Другие вопросы по тегам