我正在尝试编写一个程序,允许用户从一个场景的几个选项中进行选择。我遇到了吸引太阳的问题。当我运行程序时,太阳不会停止绘制并填充颜色。其他一切都有效。
import turtle
import random
t = turtle.Turtle()
turtle.setup(800,600)
def draw_sunshine():
t.penup()
t.goto(350,250)
t.pendown()
t.color('black', 'yellow')
t.speed(9)
t.begin_fill()
while True:
t.forward(100)
t.left(170)
t.right(100)
if abs(t.pos()) < 1:
break
t.end_fill()
t.done()
weather = False
while weather == False:
weather = input("Would you like to draw rain or sunshine? ")
if weather == "rain":
draw_rain()
else:
draw_sunshine()
答案 0 :(得分:0)
问题很可能是终止测试:
if abs(t.pos()) < 1:
break
pos()
方法返回一对数字,例如(0.0,0.0),作为turtle.Vec2D
类型,abs()
仅对第一个 x 进行操作。在这种情况下, x 永远不会小于1,因为它靠近屏幕中心,而且我们远离右边。< / p>
下面是一种不同的方法,我们根据完成太阳绘制所需的迭代次数来控制循环。为了完成这项工作,我已经调整了太阳绘图,以合理的(整数)迭代次数完成,并且仍能很好地填充颜色:
from turtle import Turtle, Screen
def draw_sunshine(turtle):
turtle.penup()
turtle.goto(350, 250)
turtle.pendown()
turtle.color('black', 'yellow')
turtle.speed("fast")
turtle.begin_fill()
for _ in range(24):
turtle.forward(100)
turtle.left(75)
turtle.end_fill()
screen = Screen()
screen.setup(800, 600)
yertle = Turtle()
weather = ''
while not weather:
weather = input("Would you like to draw 'rain' or 'sunshine'? ")
if weather == "rain":
draw_rain(yertle)
else:
draw_sunshine(yertle)
yertle.hideturtle()
screen.exitonclick()