2016-12-18 71 views
1

我想創建一個與python 3.6循環的決定提示。但它不起作用如何用python創建一個循環的決定提示3.6

def cycle(): 
looping = "yes" 
while looping == "No" or "no" or "n" or "N": 
    looping = input('Do you want to make a new calculation? \n \t (Y/N)') 
    if looping == "No" or "no" or "n" or "N": 
     looping = "yes" 
     break 
    elif looping != "No" or "no" or "n" or "N": 
     print('This is not the right answer') 
     looping="no" 

有人能幫我解決這個問題嗎? 謝謝!

+0

我不知道Python,但在大多數編程語言在那裏你'if'語句不是語法錯誤, 「或」no「的含義並不是你認爲它的意思。它不會將這些值與「循環」進行比較。您需要重複比較,即'循環==「否」或循環==「否」'等等。 – Robert

回答

1

以及Jean-FrançoisFabre指向的比較錯誤編輯出來,這裏也有一個邏輯錯誤。爲了簡化一點,這是你的例子中的代碼:

looping = "yes" 
while looping == "no": 
    (do stuff which might change looping to something else) 

while循環從不開始。你應該寫:

looping = "no" 
while looping == "no": 
    (do stuff) 

或讓 - 弗朗索瓦說,

looping = "no" 
while looping.lower() in ["no","n"]: 
    (do stuff) 

然後你將別人的「否」的回答爲「是」 ......?

爲什麼不嘗試留在永遠,除非用戶提供有效輸入迴路:

def cycle(): 
    newcalc = "no" 
    while True: 
     newcalc = input('Do you want to make a new calculation? \n \t (Y/N)') 
     if newcalc.lower() in ["no","n"]: 
      newcalc = "no" 
      break 
     if newcalc.lower() in ["yes","y"]: 
      newcalc = "yes" 
      break 
     print('This is not the right answer') 
+0

(fyi,我不是Python程序員,如果這是廢話,我很抱歉!) –

+1

我真的很感謝你的幫助,謝謝! –

1

你不能比較字符串這樣的:

while looping == "No" or "no" or "n" or "N": # wrong 

基本上尾隨or語句只是檢查是否"no"不爲空,等等。他們是無用的。

  • 如果looping=="No",你會得到True:循環繼續
  • 如果looping!="No",你會得到下一個 「非假」:"no":循環繼續

正確的方法:轉換爲小寫,並且測試字符串是否屬於列表:

while looping.lower() in ["no","n"]: 
+0

謝謝你的更正,現在好多了 –

相關問題