我正在开发一个简单的程序,要求输入3个输入,如果所有3个输入都匹配,则会打印一条欢迎信息。 (姓名缩写== YNH,年龄== 42,DOB == 1/27/74)。
此外,还会打印用户姓名(YoungNathanHeather)的长度以及打印三种不同字符串之一的输入(颜色)。
我遇到一个问题,即所有三个if语句都为真并打印字符串,即使输入蓝色,粉红色和黄色时变量(颜色)不同。
也许我错过了一些巨大的东西,嵌套了一堆if语句,但有没有人知道这里发生了什么?我希望输入“黄色”并只看到一个字符串打印。
#checks if inputted information matches criteria.
#if all inputted information matches variable criteria
#(Initials == YNH, Age == 42, DOB == 1/27/74), then
#prints a Welcome message for the user.
if Initials == 'YNH':
if Age == '42':
if DOB == '1/27/74':
print('Welcome Young Nathan Heather')
print('Did you know that your name has ' +str((len('YoungNathanHeather'))) +' letters.')
#Asks for a color and prints a response based on if the color is pink, yellow, or blue
color = input("If you could describe your mood in a color, what would it be ?")
if color == 'blue' or 'Blue':
print('According to my research Master, Blue and Yellow together makes green. Green seems to be equal to money.')
elif color == 'pink' or 'Pink':
print('According to my research Master, Pink attracts women or makes a human into a women. Whatever comes first.')
elif color == 'yellow' or "Yellow":
print('According to my research Master, Yellow indicates a "mellow" mood. Prolong this mood if feasible.')
else:
print("My apologies Master. My research is shallow and I am not yet familiar with that mood's \"color\"")
else:
print('Sorry, Wrong Credentials Entered')
else:
print('Sorry, Wrong Credentials Entered')
else:
print('Sorry, Wrong Credentials Entered')
答案 0 :(得分:1)
当你说,
if color == 'blue' or 'Blue':
它被解释为,
if (color == 'blue') or ('Blue'):
如果color == 'blue'
为真,则为真,如果'Blue'
为真,则为或。蓝色总是如此。与其他颜色相同
您可以执行以下操作:
if color in [ 'blue', 'Blue']:
将检查颜色列表中是否存在color
。但是'BlUe','bLuE'等呢?这是一个更好的解决方案。
if color.lower() == "blue":
现在它匹配蓝色的任何大写!
接下来,请考虑以下部分:
if Initials == 'YNH':
if Age == '42':
if DOB == '1/27/74':
print('Welcome Young Nathan Heather')
... ... ...
else:
print('Sorry, Wrong Credentials Entered')
else:
print('Sorry, Wrong Credentials Entered')
else:
print('Sorry, Wrong Credentials Entered')
那是a lot of repetition,但也有很多不必要的缩进,这使得代码更难以阅读并且难以调试。为什么不更像:
if Initials == 'YNH' and Age == '42' and DOB == '1/27/74':
print('Welcome Young Nathan Heather')
... ... ...
else:
print('Sorry, Wrong Credentials Entered')
这样做,你的代码将更容易阅读,也更容易编写!
答案 1 :(得分:1)
在Python中,这没有任何作用:if color == 'blue' or 'Blue'
,它总是真的!您必须将其更改为if color in ('blue', 'Blue')
或更好:if color in {'blue', 'Blue'}
。
为什么什么都不做?因为当你以这种方式写你的时候,Python检查if color == 'blue'
,如果是,则执行;如果为False,则继续检查if 'Blue'
。假设您的颜色为红色,则不符合标准的第一部分,因此Python会移至if 'Blue'
。现在,这总是真的,因为根据Python:
bool(any string except empty string)
为True,bool(any number except 0*)
也是如此!因此,由于任何东西的布尔值都是True,因此if color == 'blue' or 'Blue'
的if条件总是得到满足,无论你输入的是什么,除了空字符串或0之外。
此外,您可以将所有if
加入一行:if Initials == 'YNH' and Age == '42' and DOB == '1/27/74'...
*嗯,更确切地说,0及其变体,例如0L,0j,0.0,0.00 ......