2017-08-15 57 views
0

所以我編寫了一個函數,它需要一個電池變量的值。如果值爲「是」或「否」,我希望它執行某些操作。如果這些值都不是這些答案,我希望它再次要求它無限次的時間。這是我的代碼,以防我的描述不好。如何重複循環直到給出有效的答案?

def batterie_answer(): 
    batteries = raw_input("yes or no > ").lower() 
    print batteries 
    while True: 
     if batteries != "yes" or batteries != "no": 
      print "Please respond yes or no" 
      raw_input("> ") 
      continue 
     elif batteries == "yes": 
      print "batteries taken!" 
      items["batteries"] = 1 
      break 
     elif batteries == "no": 
      print "Probably a wise choice. Save some space!" 
      break 

batterie_answer() 
+2

見https://stackoverflow.com/a/23294659/1540468 –

+0

你的第二個使用raw_input'的'應該與你的第一個用途:使用較低,並分配給電池(旁白:'answer'可能比「電池」更好的變量名稱)。 – Evert

回答

2

您需要將作業移至while循環中或添加其他作業。您還需要將or更改爲and。您還需要刪除額外的raw_input行,該行不會將值賦予batteries變量。

def batterie_answer(): 
    while True: 
     batteries = raw_input("yes or no > ").lower() 
     print batteries 
     if batteries != "yes" and batteries != "no": 
      print "Please respond yes or no" 
      continue 
     elif batteries == "yes": 
      print "batteries taken!" 
      items["batteries"] = 1 
      break 
     elif batteries == "no": 
      print "Probably a wise choice. Save some space!" 
      break 

batterie_answer() 
+0

嘿,我是編碼方面的noobie,所以這就是爲什麼我問簡單的問題,但你能向我解釋爲什麼我必須在while循環中放置電池分配線,爲什麼我必須放置一個而不是一個or。 – TiJoePecheur

+0

如果你不把賦值行放在while循環中,那麼當你在循環中時,變量的值永遠不會改變,這意味着你永遠不會離開它。 – kindall

+0

而你必須使用'和'而不是'或'的原因是''或',那個表達式總是爲真。如果「電池」等於「是」,那麼它不等於「否」,所以第二部分是正確的,反之亦然。因此,「或」的至少一個分支總是如此,這使得整個事情成真。 – kindall

1

while循環不包括原raw_input()命令,所以它永遠不會在第一次迭代後,要求輸入。相反,它只會一遍又一遍地打印出答案。

while True向上移動幾行,使其包含raw_input()命令。

+0

while循環確實有一個'raw_input'行。修復這條線可能會對OP更具啓發性,而不僅僅是忽略它。 – zondo

1

問題出在你的if語句中。無論給出什麼樣的價值都沒有關係,條件總是等於真,它會再次要求價值。例如,如果該值爲「是」,那麼條件將是(false or true),這相當於如果值爲「否」,那麼它將是(true or false),這也等同於真,如果該值類似於「asdf」那麼它將是(true or true),這也等於是真的。

修復「or」運算符到「和」運算符的修改。

if batteries != "yes" and batteries != "no":