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

2024-10-01 02:25:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python做一个“选择你的冒险”游戏。正如您将在下面的代码中看到的,我有一个临时名为unnamedMethod的方法,它有三个参数:a method,m;一根绳子,ans1;另一根弦,ans2

这个方法应该处理来自m的用户输入,并检查它是否等于两个单词中的一个。如果两个词都不相等,那么它应该打印一条简单的错误消息(“请提交一个有效的响应”),然后再次调用方法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()

如果我的代码运行正常,它将通过intro()循环,直到用户输入“property”或“forest”,然后它将打印相应的单词。如果有人能帮我找到代码的问题,我将不胜感激


Tags: the方法代码nameselfreturndefproperty
2条回答

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

ans = m

如果希望m被视为可调用的,那么可以考虑传递g.intro

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

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

相关问题 更多 >