2015-05-27 47 views
-1

我正在用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 

這一段時間後變得無聊,我不知道如何使一個功能,特別是因爲您可以執行的操作量取決於情況。

+2

怎麼樣一個字典索引的單詞,幷包含使用次數? – dlask

+0

@dlask這是個好主意。我將如何根據可能的操作數量來改變功能? – conyare

回答

1

如果您想保持功能和使用次數密切相關,那麼使用class值得使用。一個類可以擁有持久性數據,因此您可以通過每次只增加數字來跟蹤用戶調用它的次數。

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

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

你也可以用它來跟蹤其他更動態的數據,就像從箱子裏收到的物品清單一樣。

1

你或許可以創建一個類,該類包含有效輸入的列表以及布爾值是否已被觸發。

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 
+0

這會更有效率,例如'self.user_inputs = set(user_inputs)' – jonrsharpe

+0

任何允許用戶輸入一個完整的句子不是嗎? – conyare

+0

@conyare是的,但是你怎麼處理''再見,再見''? – jonrsharpe

相關問題