具體問題與您的代碼:在cmd
參數前面的星號是不正確:
def execute(turtle, length, args, *cmd):
給你的方式」重新調用它:
execute(bob, 50, 45, 'fdltfd')
所以擺脫星號。參數turtle
也是一個包的名稱,因此可以對其進行更改,例如my_turtle
。同樣,map
是內置Python的名稱,因此請對其進行更改。
你的字典應該包含調用的函數,而不是調用函數的結果。即而不是:
map = {'fd': turtle.fd(length), 'lt': turtle.lt(args), 'bk': turtle.bk(length), 'rt': turtle.rt(args), 'nop':None}
我期望更多的東西一樣:
commands = {'fd': turtle.fd, 'lt': turtle.lt, 'bk': turtle.bk, 'rt': turtle.rt, 'nop': None}
或:
LENGTH = 50
ANGLE = 45
commands = { \
'fd': lambda t: t.fd(LENGTH), \
'lt': lambda t: t.lt(ANGLE), \
'bk': lambda t: t.bk(LENGTH), \
'rt': lambda t: t.rt(ANGLE), \
}
鑑於cmd
,'fdltfd'
的價值,我不看你怎麼指望這工作:
for command in cmd:
因爲它會在字典中查找'f','d','l','t'等,而不是'fd','lt'等。您可能想要更類似的東西:
# 'fdltfd' -> ['fd', 'lt', 'fd']
for command in [a + b for a, b in zip(cmd[0::2], cmd[1::2])]:
把上述所有一起,我們得到了一個粗略的實現,主要作品:
import turtle
LENGTH = 50
ANGLE = 45
commands = { \
'fd': lambda t: t.fd(LENGTH), \
'lt': lambda t: t.lt(ANGLE), \
'bk': lambda t: t.bk(LENGTH), \
'rt': lambda t: t.rt(ANGLE), \
}
def execute(my_turtle, cmd):
for command in [a + b for a, b in zip(cmd[0::2], cmd[1::2])]:
if command in commands:
commands[command](my_turtle)
execute(turtle.Turtle(), 'fdltfdltfdltfdltfdltfdltfdltfd')
turtle.mainloop()
非常感謝你,先生。你是救生員。在你的幫助下,我管理着改變執行功能,所以現在它也需要LENGTH和ANGLE作爲參數。我也忘記了拉姆達。所以,我的烏龜完全基於這個功能。再次,非常感謝。 –