2016-07-17 7 views
2

Ich mache ein "Wähle dein Abenteuer" -Spiel in Python. Wie Sie im folgenden Code sehen werden, habe ich eine Methode namens unnamedMethod, die drei Parameter hat: a method, m; eine Zeichenkette, ans1; und eine andere Zeichenfolge, ans2.Python - Probleme mit Methode als Parameter?

Diese Methode soll die von m abgeleitete Benutzereingabe verarbeiten und prüfen, ob sie einem von zwei Wörtern entspricht. Wenn es keinem der beiden Wörter entspricht, sollte es eine einfache Fehlermeldung ausgeben ("Bitte eine gültige Antwort senden") und die Methode m erneut aufrufen. Allerdings bekomme ich die Fehlermeldung "str ist nicht aufrufbar" mit meinem aktuellen Code.

Hier ist mein Projekt so weit:

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() 

Wenn mein Code ordnungsgemäß ausgeführt wird, wird es durch Introschleife(), bis die Benutzereingaben „Eigentum“ oder „Wald“, und dann wird es druckt die entsprechendes Wort. Ich würde es sehr schätzen, wenn jemand mir helfen könnte, das Problem mit meinem Code zu finden.

+0

nur 'g.intro', nicht' g.intro() '- Sie sollten die Methode als Parameter übergeben, nicht aufrufen und den Rückgabewert (eine Zeichenkette) als Parameter übergeben. – thebjorn

+0

Sie übergeben keine Methode als Parameter, Sie übergeben eine Zeichenfolge. –

Antwort

4

g.intro() gibt eine Zeichenfolge, so alles, was Sie tun müssen, ist der Rückgabewert der Methode zuweisen, die als m-ans geben wird:

ans = m 

Wenn Sie m wollen als aufrufbare behandelt werden, dann erwägen, vorbei statt g.intro:

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

Sie sind ans = m() verwendet wird, versucht, die Zeichenfolge m als Funktion aufzurufen, wenn ich denke, Sie meinen den Wert von ans zu der m einstellen, die don sein kann e mit dem Code ans = m.

Verwandte Themen