如何修复Python中的无限循环 - 龟图形

时间:2017-03-06 18:59:38

标签: python turtle-graphics

我正在尝试编写一个程序,允许用户从一个场景的几个选项中进行选择。我遇到了吸引太阳的问题。当我运行程序时,太阳不会停止绘制并填充颜色。其他一切都有效。

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()

1 个答案:

答案 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()

enter image description here