2017-10-19 7 views
1

私はプログラミングが初めてで、私は学校から得た課題を解決しようとしています。私は、文字列型の引数(例えば、 'fdltfd' - 前進、左および前進)で何かを描くためにカメを使用する関数を構築する必要があります。これらのコマンドは辞書にありますので、文字列の要素を辞書のキーと比較する必要があります。それらが一致すれば、カメに移動を命じる。私が書いたコード:辞書はカメの動きを制御します

def execute(turtle, length, args, *cmd): 

map = {'fd': turtle.fd(length), 'lt': turtle.lt(args), 'bk': turtle.bk(length), 'rt': turtle.rt(args), 'nop':None} 

for command in cmd: 
    if command in map.keys(): 
     map[command]() 

execute(bob, 50, 45, 'fdltfd') 

問題は亀だけで辞書に何があるか、後方左右、前方に移動し、それも私のforループを見て気にしないんです。

私はこの作品をどのように作れるのか、私にいくつか考えてもらえますか?それとも私はそれについて正しい考えをしていますか?もちろん、ないそのためのコード:コード付き)...ありがとう非常に多くの

答えて

2

具体的な問題: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() 
+0

、非常にありがとうございます。あなたは命の恩人です。あなたの助けを借りて、私は実行関数の変更を管理しました。それで、LENGTHとANGLEも引数になりました。私はラムダについても忘れていた。ですから、私のカメはその機能に完全に基づいています。再度、ありがとうございます。 –

関連する問題