Я предлагаю альтернативное решение по сравнению с @JacksonH по двум причинам: во-первых, если вы используете Python 3 (а вы должны быть), тогда вам не нужно захватывать simpledialog
из tkinter, вместо этого используйте черепаху Python 3 numinput()
(и textinput()
);во-вторых, эстетическая цель должна состоять в том, чтобы черепаха двигалась как можно меньше для достижения вашего результата, даже если для этого требуется больше, более умный код.Обратите внимание на разницу в том, как это решение рисует картину в отличие от других:
from turtle import Screen, Turtle
# Ask for user input
DEFAULT_COUNT = 3
screen = Screen()
answer = screen.numinput('Request', 'number of circles(2-6)?', default=DEFAULT_COUNT, minval=2, maxval=6)
if answer is None:
answer = DEFAULT_COUNT
else:
answer = int(answer) # int for range()
# define turtle and set position of turtle
turtle = Turtle()
turtle.speed('fast') # because I have little patience
turtle.penup()
turtle.setpos(-200, -200)
direction = 1
# draw appropriate number of circles using nested loops
for row in range(answer - 1, -1, -1): # loop backward to use last iteration as a flag
for column in range(answer - 1, -1, -1):
turtle.pendown()
turtle.circle(30 * direction)
turtle.penup()
if column:
turtle.forward(60) # not done final time
if row: # every time but the last
turtle.left(90 * direction) # turn +/-90 degrees
turtle.forward(60) # forward the length of one diameter
turtle.left(90 * direction) # turn +/-90 degrees
direction *= -1 # reverse our sense of direction
turtle.hideturtle()
screen.exitonclick()