2016-07-17 4 views
2

私はPythonで "Choose Your Adventure"ゲームを作っています。以下のコードで見ているように、私は一時的にunnamedMethodと呼ばれるメソッドを持っています。このメソッドには、メソッド、m、文字列、ans1;もう1つの文字列ans2。Python - パラメータとしてメソッドの問題?

このメソッドは、mから派生したユーザーの入力を処理し、2つの単語のいずれかに等しいかどうかを確認するために使用されます。どちらかの単語と等しくなければ、単純なエラーメッセージ( "有効な応答を提出してください")を出力し、メソッドmをもう一度呼び出す必要があります。しかし、私は現在のコードで "str is not callable"というエラーメッセージを受け取ります。私のコードが正常に動作している場合

class player: 

    def __init__(self, n): 
     self.name = n 
     self.inventory = [] 
     self.health = 10.0 

    def getName(self): 
     return self.name 

    def printName(self): 
     print("Your name is: " + self.name) 

    def printInventory(self): 
     print(self.inventory) 


class game: 

    def __init__(self): 
     print("Welcome to Choose Your Adventure.") 
     name = input("Please enter your name to begin: ") 
     p = player(name) 

    def intro(self): 
     print("\n.....\n") 
     ans = input("You awaken in a field skirted by a dense pine forest.\n" + 
       "A rickety barn and its adjoining house lie a few hundred\n" + 
       "feet ahead of you. Do you enter the forest or explore the\n" + 
       "property? Type 'property' or 'forest': ") 
     return ans 

    def property(self): 
     print("\n.....\n") 
     print("You walked towards the property") 

    def forest(self): 
     print("\n.....\n") 
     print("You walked into the forest") 

    ### 

    def unnamedMethod(self, m, ans1, ans2): 
     ans = m() #where the error message occurs 
     while ans.lower() != ans1 and ans.lower() != ans2: 
      print("Please submit a valid response.") 
      print("\n.....\n\n") 
      ans = m() 
     if ans.lower() == ans1: 
      return ans1 
     else: 
      return ans2 


class run: 

    def __init__(self): 
     g = game() 
     print(g.unnamedMethod(g.intro(), "property", "forest")) 


r = run() 

、それはそれは、ユーザ入力「プロパティ」またはまでイントロ()ループスルー「森」と印刷されます。ここでは

は、これまでの私のプロジェクトであります対応する単語。誰かが私のコードで問題を見つけるのを助けることができたら、私は大いに感謝します。あなたは mが呼び出し可能として扱われることをしたい場合は、合格を検討

ans = m 

+0

'g.intro()'ではなく 'g.intro'だけです。メソッドをパラメータとして渡し、呼び出しておらず、戻り値(文字列)をパラメータとして渡す必要があります。 – thebjorn

+0

メソッドをパラメータとして渡すのではなく、文字列を渡しています。 –

答えて

4

g.intro()はそうあなたが必要とするすべてはansからmとして渡されるメソッドの戻り値を代入され、文字列を返します代わりにg.intro

g.unnamedMethod(g.intro, "property", "forest") 
... 
ans = m() 
0

あなたは私はあなたがドンどれをすることができ、MのそれにANSの値を設定することを意味だと思う機能、などの文字列mを呼び出そうと、)(ANSの= mを使用していますeをコードans = mで置き換えます。

関連する問題