使用下面的函数,并输入在空间上分割(即向前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)
答案 0 :(得分:0)
列表中的元素永远不会是int
;如果你希望它们是int
,那么你需要将它们传递给int()
构造函数,捕获发生的任何异常。
>>> '3'
'3'
>>> int('3')
3
答案 1 :(得分:0)
这里有两个问题:
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
与其他真值区分开来,否则不应在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)