如何创建一个函数,允许用户输入根据在 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
我正在 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