这个python电话簿程序有一些问题

时间:2013-03-11 16:42:38

标签: python

我想编写一个python程序,但是当我输入s或S时,它会出错。

#!/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时,它会打印“添加联系人”。为什么呢?

3 个答案:

答案 0 :(得分:5)

你的考试:

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

实际上是这样的:

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

由于'a'始终为True,因此该测试始终通过。

你想要

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

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

答案 1 :(得分:2)

你正在测试错误的东西,使用:

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

或者也许:

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

表达式option == 'A' or 'a'被解释为:

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

并且在python中始终将非空字符串视为True

答案 2 :(得分:0)

如果a == 7 or 5并不意味着a == 7 or if a == 5 它意味着(a==7) or 5,因为5是非虚假的,它总是真的

与你的比较相同的只是'A'和'a'而不是7和5 ......