如何创建一个函数,允许用户输入根据在 Python 中输入相同输入的次数而产生不同的结果?

How do I create a function that allows for user input to have a different outcomes based on how many times the same input was entered in Python?

我正在 Python 中创建基于文本的冒险游戏。在某些时候,可能会有一些房间可以执行许多不同的动作,比如打开一个箱子。我想创建一个允许这样做的函数,因为现在我必须写下所有这些: (只是一个例子)

hello_said_once = True  

hello = ["hello", "hi"]
goodbye = ["goodbye", "bye", "cya"]

while True:

    user_input = raw_input("Hello... ")

    if any(i in user_input for i in hello) and hello_said_once:
        print "You said hello!"
    elif any(i in user_input for i in hello) and not hello_said_once:
        print "You already said Hello!"
    elif any(i in user_input for i in goodbye) and good_bye_said_once:
        print "You said Goodbye!"
        break

一段时间后这会变得很烦人,我不知道如何为它创建一个函数,特别是因为您可以执行的操作数量取决于具体情况。

如果您想保持功能和使用计数紧密相关,使用 class 可能是值得的。 class 可以拥有持久数据,因此您可以通过每次增加次数来跟踪用户调用它的次数。

class chest():
    openCount = 0
    openFunctions = [
                        function1,
                        function2,
                        function3,
                        ...
                    ]

    def use(self):
        self.openFunctions[openCount]
        self.openCount += 1

您也可以使用它来跟踪其他更动态的数据,例如从箱子中收到的物品列表。

您可能会创建一个 class 来保存有效输入列表和一个布尔值,用于判断它是否已被触发。

class Action:
    def __init__(self, user_inputs):
        self.user_inputs = user_inputs
        self.been_triggered = False

hello = Action(["hello", "hi"])
goodbye = Action(["goodbye", "bye", "cya"])

此外,您对 "any" 的使用是多余的。你可以直接说 if user_input in hello and ...

class Action:
    def __init__(self, user_inputs):
        self.user_inputs = user_inputs
        self.been_triggered = False

hello = Action(["hello", "hi"])
goodbye = Action(["goodbye", "bye", "cya"])

while True:

    user_input = raw_input("Hello... ")

    if user_input in hello.user_inputs:
        if not hello.been_triggered:
            print "You said hello!"
        else:
            print "You already said Hello!"

    elif user_input in goodbye.user_inputs:
        print "You said Goodbye!"
        break