2016-09-29 6 views
1

これは簡単な修正ですが、私はこのIndexErrorの修正方法を理解できません。ユーザーの入力がない場合のPythonインデックスの範囲外

def show_status(): 
    print("\nThis is the " + rooms[current_room]["name"]) 



rooms = { 

     1 : { "name" : "Highway" , 
       "west" : 2 , 
       "east" : 2 , 
       "north": 2 , 
       "south": 2} , 
     2 : { "name" : "Forest" , 
       "west" : 1 , 
       "east" : 1 , 
       "north": 1 , 
       "south": 1} , 
     } 

current_room = 1 

while True: 

    show_status() 

    move = input(">> ").lower().split() 


    if move[0] == "go": 
     if move[1] in rooms[current_room]: 
      current_room = rooms[current_room][move[1]] 
     else: 
      print("you can't go that way!") 
    else: 
     print("You didn't type anything!") 

ユーザーが移動のために値を入れずに「復帰」を押すと、ゲームは「範囲外のリスト指数」でクラッシュ。私はwhileループで "else"がそれをキャッチしていない理由を理解していません。

+1

クラッシュが 'else'前に起こる:あなたは、例えば、' 'チェックすると移動し、[0] == "行く" 移動する必要があります。問題は、要素がゼロのときに 'move [0]'にアクセスしようとしていることです。 –

答えて

1

move[0]は、リストの最初のメンバーをチェックし、moveが空白の場合はIndexErrorをスローします。 moveが真であることを最初に確認できます。そうでない場合、andオペレータは次のチェックを回避します。

ユーザー入力にスペースが1つあり、2人のメンバーがいると思われます。これを確認するには、len(move) == 2を確認する必要があります。

次のように改正:

# ... 
move = input(">> ").lower().split() 

if len(move) == 2 and move[0] == "go": 
    # the rest 
+0

皆さんは素晴らしいです。ありがとうございました!素晴らしいテキストの冒険を作ることに戻る。 – Windtalker87

関連する問題