我正在为一个学校项目编写Python代码。该程序是根据用户的输入绘制多个圆,(2-6个圆)。我已经这样做了,但现在需要根据用户输入绘制多行圆圈。例如,如果用户选择了3个圆,我需要绘制3个圆乘以3个圆。
#import tkinter and turtle
import tkinter as tk
from turtle import *
#ask for user input using tkinter
from tkinter import simpledialog
application_window = tk.Tk()
answer = simpledialog.askinteger('Request', 'number of circles(2-6)?',
parent=application_window, minvalue=2, maxvalue=6)
#set position of turtle and define turtle
t = Turtle()
t.penup()
t.setpos(-200,-200)
t.pendown()
#draw appropriate number of circles using loop
i = 2
for i in range (answer):
circle(30)
penup()
forward(60)
pendown()
i = +1发布于 2019-04-30 05:27:27
别让我们做你的功课。告诉我们问题,告诉我们你尝试过什么,然后问一个问题。例如,“我如何让乌龟画出三排圆圈?”
用另一个for循环包围已有的for循环。每次运行外部循环时,内部循环都会运行以创建一行,然后在下一次迭代之前将海龟向下移动。
#import tkinter and turtle
import tkinter as tk
from turtle import *
#ask for user input using tkinter
from tkinter import simpledialog
application_window = tk.Tk()
answer = simpledialog.askinteger('Request', 'number of circles(2-6)?',
parent=application_window, minvalue=2, maxvalue=6)
#set position of turtle and define turtle
t = Turtle()
t.penup()
t.setpos(-200,-200)
t.pendown()
#draw appropriate number of circles using loop
for row in range(answer):
for col in range(answer):
circle(30)
penup()
forward(60) # must be undone after loop
pendown()
penup()
backward(60) # undo the backward on line 20
backward(60 * col) # go backwards the length of the diameter times the number of circles
right(90) # turn right 90 degrees
forward(60) # forward the length of one diameter
left(90) # turn back left 90 degrees
pendown()发布于 2019-04-30 06:17:08
我提供了@JacksonH的替代解决方案,原因有两个:第一,如果你正在使用Python3(你应该这样做),那么你不需要从tkinter中抓取simpledialog,而是使用Python3海龟的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()https://stackoverflow.com/questions/55910819
复制相似问题