2013-04-15 105 views
0

我想這個函數去測試3個語句並返回適當的響應。這三個聲明是和他們預期的反應是python需要幫助if函數

「」 - 有反應「空白空間,
‘你好’ - 有迴應‘一個字’,
‘世界’ - 有反應」另一個字「

問題是'世界'也給予反應」單個單詞「,而不是」單個單詞再次「。有沒有什麼辦法讓python檢測到以前的反應是」單個單詞「,所以它如果在第一個單詞之後輸入另一單個單詞,會再次聲明「單個單詞」?

def return_statement(statement): 
    if statement == (''): 
     response = "blank space" 
     return response 
    if ' ' not in statement 
     response = "single word" 
     return response 
    if ' ' not in statement and response == "single word": 
     response = 'single word again' 
     return response 
+0

除了事物的答案中指出below..I認爲你是缺少「:」第二個if語句.. – prashantsunkari

+1

你描述你的問題的方式似乎與你的要求相矛盾。 *'世界'*是否會返回*'另一個詞'*或*'單一的世界'*? – nqngo

回答

2

在函數return_statement中,response是局部變量。這意味着函數執行結束並返回後,response不再存在 - 我們說它的作用域就是它所在的函數。當你離開一個變量的作用域時,它就消失了。

這裏有一些方法,你可以採取:

1)使return_statement主叫方保留是從它周圍返回response,當它調用它也傳遞response除了statement。這使return_statement的調用者負責。

2)使response成爲一個全局變量,所以它的範圍是無限的。

3)將response設爲類的實例變量。只要您繼續使用相同的類實例,它的值response因此將在呼叫之間持續存在。

0

要存儲以前的響應狀態,您可以爲您的功能添加一個屬性。我只是添加到你的功能,而不修改你的邏輯太多。

def return_statement(statement): 
    // Check if has attribute, otherwise init 
    if not hasattr(return_statement, "prev"): 
     return_statement.prev = '' 
    if statement == (''): 
     response = "blank space" 
     // Store answer before returning 
     return_statement.prev = response 
     return response 
    // Fix logic 
    if ' ' not in statement: 
     if "single word" in return_statement.prev: 
      response = "single word again" 
     else: 
      response = "single word" 
      // Store answer 
      return_statement.prev = response 
     return response