2016-12-10 6 views
0

私はLPTHWから学んでいますが、基本的には部屋のテキストベースのゲームです。条件が真であってもPythonはスキップします

class Riddle_Room(Room): 
    def activate(self): 
     global current_room 
     print "Riddle room query" 
     current_room = "riddle_room" 
     self.ip = raw_input("> ") 
     self.count = 3 
     print self.ip 
     if "back" in self.ip: 
      rm.back() 
     elif "yes" in self.ip: 
      while self.count > 0: 
       print "Riddle" 
       self.answer = raw_input("> ") 
       if self.answer == "answer": 
        print "You got that right!" 
        rm.enter() 
       else: 
        print "Try again!" 
        self.count -= 1 
      print "No choices left." 
      quit() 
     else: 
      print "Invalid command." 

私が最初にこの部屋に入ると、「はい」と答えると謎の質問が表示されます。答えは "答え"で、それは次の部屋に私を連れて行く。私はこの部屋に戻ってくると、それは私に部屋の質問を再度尋ねてきますが、今度は「戻る」と入力すると、無効なコマンドと言われます。これはelseです。それは最初のifをスキップします。 self.ip"back"に変更されていることを確認するためにprint self.ipを追加しました。

+0

使用しているPythonのバージョンはどれですか? –

+0

self.ipの値を表示するだけでなく、self.ipの値( "back")も表示します。 – jarmod

+0

私はWindowsで2.7を使用しています。 @ebe – Nachiket

答えて

0

これはループ内でbackコマンドを定義していないために発生します。コードを変更する方法は次のとおりです。

class Riddle_Room(Room): 
    def activate(self): 
     global current_room 
     print "Riddle room query" 
     current_room = "riddle_room" 
     self.ip = raw_input("> ") 
     self.count = 3 
     print self.ip 
     while self.count > 0: 
      if "back" in self.ip: 
       rm.back() 
      elif "yes" in self.ip: 
       print "Riddle" 
       self.answer = raw_input("> ") 
       if self.answer == "answer": 
        print "You got that right!" 
        rm.enter() 
       else: 
        print "Try again!" 
        self.count -= 1 
      print "No choices left." 
      quit() 
      else: 
       print "Invalid command." 
+0

'print(); quit() 'はループの外側にある必要がありますか?それが立っているので、構文エラーではありません。 – AChampion

0

あなたのコードで作業してください。

最初に「はい」と入力すると、elif "yes" in self.ipにコードセクションが入力されます。このコードセクションでは、3回答えを求められます。しかし、このコードセクションには、 "back"という単語のチェックは含まれていません。したがって、あなたは3回答えに尋ねられ、受け入れられる唯一の応答は「答え」です。

つまり、「戻る」はプロンプト「リドルルームのクエリ」に対してのみ認識され、プロンプト「リドル」では認識されません。

+0

"謎の部屋の質問"は、ちょうど2回目に部屋に入ったときに問題が発生したときに「戻る」と入力する場所です。 – Nachiket

+0

ここには何が起こっているのかの流れがあります。部屋>質問> "はい">謎> "答え">次の部屋に入る。今度はこの部屋に戻った後、room> query> "back">無効なコマンド(???) – Nachiket

+0

を入力してください。書かれているように、あなたは 'activate'を呼び出すごとにRiddleルームのクエリを遭遇します。 'activate'をどこで呼びますか? 'rm.enter()'の中から再帰的に呼び出していますか? Riddleルームのクエリを複数回実行すると、なぜあなたは信じていますか? –

関連する問題