1

main.py

import engine
engine.objects['key'] = "It's a key"
engine.main()

エンジン.py

# inventory = []

objects = {

}

def main():
    while True:
        choice = raw_input(">>: ")
        command, obj = choice.split()
        if command == 'examine':
            if obj in objects:
                print objects[obj]
            else:
                print 'joking right?'
        else:
            print 'joking right?'

2 番目の単語 (パラメーター) を指定せずに「examine」と入力すると、エラーが発生します。

>>: asdf
Traceback (most recent call last):
  File "main.py", line 3, in <module>
    engine.main()
  File "C:\Users\Patrick\Documents\Programming\Game engine test\engine.py", line
 11, in main
    command, obj = choice.split()
ValueError: need more than 1 value to unpack
Press any key to continue . . .

理由はわかりましたが、どうすれば直りますか?

4

2 に答える 2

3

したがって、問題から を取り除き、raw_input()これを次の行にまとめることができます。

choice = 'examine'
result = choice.split()      # result == ['examine']
command, obj = result        # Boom.

からの戻り値split()はリストです。"examine" のように (スペースで区切られた) 1 つの単語しかない場合、リストには 1 つの要素しか含まれません。

command次に、そのリストをandに解凍しようとするとobj、python は「それはできません。2 つのエントリが必要ですが、1 つしかありません。」と言います。

あなたがする必要があるのは、いくつかの中間チェックを実行することです:

args = choice.split()
if len(args) < 2:
    print 'Invalid command.'
    continue
command, obj = args
# ...
于 2012-08-03T02:15:20.010 に答える
0
args = choice.split()
command = args[0]
#Branch according to command here
#Most likely you will want to separate them into functions
if command == 'examine':
    if len(args) < 2:
       print 'Missing argument'
    else:
       obj = args[1]
       if obj in objects:
           print objects[obj]
       else:
           print 'joking right?'
else:
    print 'joking right?'

またcmd、python 標準ライブラリのモジュールを参照することもできます。基本的に、関数を使用してオブジェクトを作成できます。オブジェクトdo_<MYCOMMANDNAME>はコマンド プロンプトを発行し、最初の単語を a として見て、残りの引数で実行するcommand対応する関数を探します。do_command

于 2012-08-03T02:35:50.980 に答える