[英]Turtle graphics not drawing from function
使用下面的功能,以及在空間上分割的輸入(即正向20),烏龜將執行顏色和寫入功能,但是使用正向,向后,向右或向左不執行任何操作,只顯示一個空白的烏龜窗口
這是我的函數和用於前進和后退命令的代碼的精簡版本:
import sys
import turtle
def parse_line(line):
global items_in_line
items_in_line = line.split(" ",1)
if items_in_line[0] == "forward":
if isinstance(items_in_line[1], int):
return items_in_line
elif items_in_line[0] == ("back" or "backward"):
if isinstance(items_in_line[1], int):
return items_in_line
return items_in_line
def comm(items_in_line):
m = items_in_line[1]
if items_in_line[0] == "forward":
if isinstance(m,int) == True:
turtle.forward(m)
if items_in_line[0] == ("backward" or"back"):
if isinstance(m,int) == True:
turtle.back(m)
line=input("Enter a turtle command or enter 'file' to load commands from a file")
x = parse_line(line)
y=comm(items_in_line)
您列表中的元素永遠不會是int
; 如果希望它們為int
則需要將它們傳遞給int()
構造函數,以捕獲發生的任何異常。
>>> '3'
'3'
>>> int('3')
3
這里有兩個問題:
elif items_in_line[0] == ("back" or "backward"):
這意味着"backward"
永遠不會起作用。 嘗試在交互式窗口中輸入以下內容:
>>> ("back" or "backward")
'back'
因此,檢查某項是否等於("back" or "backward")
與檢查其是否等於"back"
。
你要這個:
elif items_in_line[0] in ("back", "backward"):
或者,如果您堅持要這樣做:
elif items_in_line[0] == "back" or items_in_line[0] == "backward":
然后,還有另一個問題:
if isinstance(m,int) == True:
turtle.forward(m)
由於items_in_line
是split
調用的結果,因此每個元素都必須是字符串,因此不可能是int
。 (此外,除非您特別想將True
與其他true值區分開,否則您不應該在Python中使用== True
。)
您可能想要的是這樣的東西:
try:
amount_to_move = int(m)
except ValueError as e:
print(<some message about the error>)
else:
turtle.forward(amount_to_move)
代碼的結構方式,即在函數的兩個分支中進行相同的檢查,最好將其向上移動,因此:
def comm(items_in_line):
try:
m = int(items_in_line[1])
except ValueError:
print(<some message>)
return
if items_in_line[0] == "forward":
turtle.forward(m)
if items_in_line[0] in ("backward", "back"):
turtle.back(m)
或者,也許你甚至都不需要try
/ except
這里,因為你可以在一個較高的水平,后處理這一切,如果items_in_line
只有1元,這將引發一個IndexError
你沒有趕上,所以為什么不把"forward foo"
你對待同樣的方式"forward"
,讓它滴入到調用者?
def comm(items_in_line):
m = int(items_in_line[1])
if items_in_line[0] == "forward":
turtle.forward(m)
if items_in_line[0] in("backward", "back"):
turtle.back(m)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.