2015-11-07 82 views
0

即使我輸入「no」,並且當我輸入「jdlfjap」時,該循環仍然保持循環,例如,它會繼續循環而沒有「?」。爲什麼while while循環不起作用?

有誰知道這是爲什麼?

def makeContact(): 
    contactName = input("Name: ") 
    contactNumber = input("Number: ") 
    dictionaryForContacts[contactName] = contactNumber 
def continueMaking(): 
    while True: 
     continueMaking = input("\nWould you like to continue making contacts? ") 
     if continueMaking == "Yes" or "yes" or "YES": 
      makeContact() 
      continue 
     elif continueMaking == "No" or "no" or "NO": 
      break 
     else:  
      print ("?") 
      continue 
+0

'continueMaking ==「No」或「no」或「NO」'不會做你認爲它做的事。它不會比較這3個單詞中的每一個的「continueMaking」。 – lurker

+0

使用'lower()'或checkout ['in'](https://docs.python.org/3/reference/expressions.html#in) – sam

+0

重寫爲'if continueMaking in(「Yes」,「yes」 ,「YES」)'或'if continueMaking.strip()。lower()==「yes」' – dawg

回答

2

聲明if continueMaking == "Yes" or "yes" or "YES":相當於(continueMaking == "Yes") or "yes" or "YES":其中,無論continueMaking值返回字符串"YES",這是truthy,因此makeContact呼叫始終執行。不區分大小寫的字符串比較可以通過continueMaking.lower() == "yes"完成。

+0

我現在明白了。謝謝!!! – Daniel

+1

好的答案,但可能應該是'continueMaking.strip()。lower()==「yes」'來捕捉尾隨空格。 – dawg

+0

基於[運算符優先順序](https://docs.python.org/2/reference/expressions.html),爲什麼不計算爲'continueMaking == true',因爲'或'具有更高的優先級並且它會被強制爲一個布爾值? – BLaZuRE

1

覆蓋函數continueMaking與變量continueMaking增加了困惑。選擇一個不同的變量名稱。可讀性計數。