[英]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.