2016-04-23 66 views
0

我看到這個Flowchart,並決定製作一個程序。問題是,如果我第一次輸入「否」,它只會返回「去外部」。所有其他人返回「無」。即時通訊使用Python 2.7程序沒有任何返回

def waitawhile(): 
    print "Wait a while" 
    rain2 = raw_input("Is it still raining?") 
    if rain2.lower() == "no": 
     return "Go Outside" 
    elif rain2.lower() == "yes": 
     waitawhile() 
def Raining(): 
    print "Is it raining?" 
    rain = raw_input() 
    if rain.lower() == "no": 
     return "Go Outside" 
    elif rain.lower() == "yes": 
     print "Have Umbrella?" 
     umbrella = raw_input() 
     if umbrella.lower == "yes": 
      return "Go Outside" 
     elif umbrella.lower() == "no": 
      waitawhile() 
print Raining() 

回答

2

問題是與您的通話waitawhile(來自Rainingwaitawhile本身)。調用它之後,您將丟棄返回值並不返回任何內容。

waitawhile() 

到:要解決這個問題,呼叫從改變

return waitawhile() 

確保,兩個功能,也沒有辦法到達函數的結尾而不執行return聲明。

+1

這樣做!我似乎也忘記了umbrella.lower()聲明中的一個括號。我想知道爲什麼沒有返回語法錯誤。 –

+0

@AnvitGarg它不返回語法錯誤,因爲它不是一個錯誤!你只是比較一個對象值和一個字符串值,並沒有問題:) – EbraHim

+0

首先回答是,然後是仍然不工作:(現在編輯 - 作品!!!謝謝! –

0

你的程序有三個問題,在它們被固定如下:

def waitawhile(): 
    print "Wait a while" 
    rain2 = raw_input("Is it still raining?") 
    if rain2.lower() == "no": 
     return "Go Outside" 
    elif rain2.lower() == "yes": 
     return waitawhile() 
def Raining(): 
    print "Is it raining?" 
    rain = raw_input() 
    if rain.lower() == "no": 
     return "Go Outside" 
    elif rain.lower() == "yes": 
     print "Have Umbrella?" 
     umbrella = raw_input() 
     if umbrella.lower() == "yes": 
      return "Go Outside" 
     elif umbrella.lower() == "no": 
      return waitawhile() 
print Raining() 

作如下處理:

>>> ================================ RESTART ================================ 
>>> 
Is it raining? 
yes 
Have Umbrella? 
yes 
Go Outside 
>>> ================================ RESTART ================================ 
>>> 
Is it raining? 
yes 
Have Umbrella? 
no 
Wait a while 
Is it still raining?yes 
Wait a while 
Is it still raining?no 
Go Outside 
>>> 

在你的程序的問題是邏輯上的錯誤,所以解釋將不顯示您出現語法錯誤:

  1. 您使用.lower而不是.lower()在i f條件,它將永遠是假的。
  2. 您忽略了waitawhile()方法的回報,而您必須將它們返回到print方法。
相關問題