2017-03-06 205 views
0

我想編寫一個程序,允許用戶從場景的幾個選項中選擇繪製。我抽出太陽來解決問題。當我運行該程序時,太陽不會停止繪圖並填充顏色。其他一切正常。如何修復Python中的無限循環 - 烏龜圖形

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

的問題是很可能這個終止測試:

if abs(t.pos()) < 1: 
    break 

pos()方法返回一對數字,例如(0.0,0.0),作爲turtle.Vec2D類型,其中abs()僅在第一個上運行,x。在這種情況下,x將永遠不會小於1,因爲它接近屏幕的中心位置,而且我們遠離右側。

下面是一個不同的方法,我們根據完成繪製太陽所需要的迭代次數來控制循環。爲了使這項工作,我已經調整了太陽畫在迭代合理(積分)號完成與色彩仍然很好地填補:

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