具体的な問題:cmd
引数の前にアスタリスクが正しくありません。
def execute(turtle, length, args, *cmd):
は、あなたが」道を与えられました再呼び出し:
execute(bob, 50, 45, 'fdltfd')
アスタリスクを削除します。パラメータturtle
もパッケージの名前ですので、変更してください。 my_turtle
。同様にmap
はPython組み込みの名前なので、変更してください。
辞書には、関数を呼び出す結果ではなく、呼び出す関数が含まれている必要があります。私。代わりに:
commands = {'fd': turtle.fd, 'lt': turtle.lt, 'bk': turtle.bk, 'rt': turtle.rt, 'nop': None}
か::
map = {'fd': turtle.fd(length), 'lt': turtle.lt(args), 'bk': turtle.bk(length), 'rt': turtle.rt(args), 'nop':None}
私はより多くのような何かを期待したいcmd
、'fdltfd'
の価値を考えると
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), \
}
を、私はあなたが期待してどのように表示されませんこれはうまくいく:
for command in cmd:
'f'、 'lt'などの代わりに 'f'、 'd'、 'l'、 't'などを辞書で検索すると、
となります。
# '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も引数になりました。私はラムダについても忘れていた。ですから、私のカメはその機能に完全に基づいています。再度、ありがとうございます。 –