Python——方法作为参数的问题?

Python——方法作为参数的问题?,python,methods,syntax,parameters,Python,Methods,Syntax,Parameters,我正在用Python制作一个选择你的冒险游戏。正如您将在下面的代码中看到的,我有一个临时名为unnamedMethod的方法,它有三个参数:一个方法,m;一个字符串,ans1;还有另一个字符串,ans2 这个方法应该处理来自m的用户输入,并检查它是否等于两个单词中的一个。如果它不等于任何一个单词,那么它应该打印一条简单的错误消息,请提交一个有效的响应。然后再次调用方法m。但是,我得到错误消息str不能用我当前的代码调用 以下是我目前的项目: class player: def __in

我正在用Python制作一个选择你的冒险游戏。正如您将在下面的代码中看到的,我有一个临时名为unnamedMethod的方法,它有三个参数:一个方法,m;一个字符串,ans1;还有另一个字符串,ans2

这个方法应该处理来自m的用户输入,并检查它是否等于两个单词中的一个。如果它不等于任何一个单词,那么它应该打印一条简单的错误消息,请提交一个有效的响应。然后再次调用方法m。但是,我得到错误消息str不能用我当前的代码调用

以下是我目前的项目:

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()
如果我的代码运行正常,它将在介绍中循环,直到用户输入属性或林,然后打印相应的单词。如果有人能帮我找到代码中的问题,我将不胜感激。

g.intro返回一个字符串,因此您所需要做的就是将方法的返回值作为m传递给ans:

如果你想把M当作可调用的,那么考虑通过G.Intoo代替:


您正在使用ans=m,试图将字符串m作为函数调用,而我认为您的意思是将ans的值设置为m的值,这可以通过代码ans=m来完成。

只需g.intro,而不是g.intro-您应该将该方法作为参数传递,不调用它并将返回值作为参数传递。不将方法作为参数传递,而是传递字符串。
ans = m
g.unnamedMethod(g.intro, "property", "forest")
...
ans = m()