Python不遵循'if语句'

时间:2014-06-05 02:33:55

标签: python python-2.7

我对我制作的python 2.7代码有疑问,似乎无法从朋友那里找到任何答案,所以我来到这里。我是python和编程的完整菜鸟。这是代码:

import time
import random
a = ['Spooky','Sexy','Snazzy','Random','Wild','Smoggy','Enchanting','Quick','Acoustic','Irritating','Annoying','Thirsty','Fierce','Embarassed','Touch']
b = ['Kurtis','Tisa','Randy','Theda','Dani','Beulah','Dallas','Jeannette','Vera','Kristopher','Donna','Wanda','Sergio','Betsy','Holly']
c = ['1873','123','448','8781','1284','3','45','34']
d = ['Hicks','Ryan','Houston','Cunningham','Ortiz','Baker','Erickson','Pittman','Patrick','Blake','Allison','Taylor','Harper','Romero']
random.shuffle(a)
random.shuffle(b)
random.shuffle(c)
random.shuffle(d)
a = raw_input('Would you like a random username? ')
if a == 'Yes' or 'yes' or 'Yea' or 'yea':
    print 'PROCESSING..'
    time.sleep(.5)
    print 'PROCESSING..'
    time.sleep(.5)
    print 'PROCESSING..'
    time.sleep(.5)
    print 'PROCESSING..'
    time.sleep(.5)
    print 'PROCESSING..'
    time.sleep(.5)
    print 'PROCESSING..'
    time.sleep(.5)
    print 'PROCESSING..'
    time.sleep(.5)
    print 'PROCESSING..'
    time.sleep(.5)
    print a[3] + b[2] + d[5] + c[4]
else:
    print "I didn't have a name for you anyways"

我的问题是该程序会生成一个随机名称,即使您输入其他内容,然后是'是'或者是'是'或者'是啊'或者'是啊'。 非常感谢提前!

7 个答案:

答案 0 :(得分:6)

尝试

if a in ['Yes', 'yes', 'Yea', 'yea']:

or的每一面都是它自己的独立表达。因此,如果a == 'Yes'为false,那么Python将不会尝试查看a == 'yes'是否为真。它会尝试查看'yes'是否为真。它是,因为任何非空字符串都被认为是真的。

答案 1 :(得分:3)

您的代码与此相同:

if (a == 'Yes') or ('yes') or ('Yea') or ('yea'):
    ...

bool('yes')为True - 非空字符串被视为True

答案 2 :(得分:2)

你的if条件错了,应该是

if a == 'Yes' or a == 'yes' or a == 'Yea' or a == 'yea':

答案 3 :(得分:2)

'或'运算符不会按照您的想法运行:)

当你有:

if a == 'Yes' or 'yes' or 'Yea' or 'yea':

如果满足以下任何条件,您的程序将生成一个随机名称:

a == 'Yes' 'yes' 'Yea' 'yea'

“是”或“是”等值始终为真,因此您的程序将始终生成随机名称。

其他任何一个答案都是解决问题的好方法;老式的方法就像:

if a.upper()[0] == 'Y'

将接受以“y”或“Y”开头的任何回复,如果您的用户输入“是”,这可能很方便!

答案 4 :(得分:0)

因为当你写if a == 'Yes' or 'yes' or 'Yea' or 'yea':时,它与if (a == 'Yes') or ('yes') or ('Yea') or ('yea'):相同。 'yes'/'Yea'/'yea'被评估为布尔值。

答案 5 :(得分:0)

您的代码会检查if a == 'Yes',然后是'yes',然后是'Yea',然后 'yea',这会导致输入{ {1}}语句,因为字符串是非空的。

相反,请将if语句更改为if,如下所示:

if a.lower().startswith('y'):

答案 6 :(得分:0)

import string    
if a.lower().startswith("y"):