2013-03-11 83 views
0

我想寫一個python程序,但是當我輸入s或S時,它出錯了。在這個python電話簿程序中有一些問題

#!/usr/bin/python 

phonebook = {} 

while True: 
    option = raw_input('Welcome use pyphonebook: add(A)/search(S)?') 
    if option == 'A' or 'a': 
     print 'Add a contact' 
     name = raw_input('Enter a name:') 
     if phonebook.__contains__(name):  
      print 'Contact %s is already in phonbook' % name 
     else: 
      num = raw_input('Enter phone number:') 
     phonebook[name] = num 

elif option == 'S' or 's': 
    print 'Search a contact' 
    name = raw_input('Enter a name:') 
    if name in phonebook: 
     print "%s's phone number is %s" % (name, phonebook[name]) 
    else: 
     print 'Not found'  
print phonebook 

當我輸入S或s時,它會打印'添加聯繫人'。爲什麼?

+0

這是你的'elif'如何縮進你的實際代碼?和'while'一樣嗎? – 2013-03-11 17:35:25

回答

5

您的測試:

if option == 'A' or 'a': 

實際上是這樣工作:

if (option == 'A') or 'a': 

爲 'A' 永遠是真實的,這個測試一直通過。

你想代替

if (option == 'A') or (option == 'a') 

if option in ('A', 'a'): 
+0

非常想你 – dclink 2013-03-11 16:49:13

2

您要爲錯誤的東西進行測試時,使用方法:

if option.lower() == 'a': 

或者是:

if option in ('A', 'a'): 

表達option == 'A' or 'a'被解釋爲:

(option == 'A') or 'a' 

和非空字符串在python中始終被認爲是True

0

如果a == 7 or 5(a==7) or 5自5非falsey它總是爲真

同樣的事情不一樣,如果a == 7 or if a == 5 這意味着意味着你僅比較其'A'和'a'而不是7和5 ....