【问题标题】:Could somebody please help me with this code?有人可以帮我处理这段代码吗?
【发布时间】:2017-01-06 01:02:49
【问题描述】:

有人可以帮助我吗?我已经编写了这个 python 代码,但由于某种原因它没有正确响应我的 if 和 elif 语句。

print ('Welkom')
print("\n")

naam = input('Typ alsjeblieft je naam en druk vervolgens op enter: ')
print("\n")

if naam == 'Tim' or 'tim':
    print ('Hoi Tim')
elif naam == 'Mitch' or 'mitch':
    print ('Hoi Mitch')
elif naam == 'Tom' or 'tom':
    print ('Hoi Tom')
else:
    print ('Hoi vreemdeling!')

无论我输入什么(例如 mitch),它都会打印出“Hoi Tim”。我用数字和表达式(如 input == 20)尝试了相同的代码。在这些情况下,它确实响应了我的 if 语句。有人可以向我解释我做错了什么吗?

【问题讨论】:

    标签: python


    【解决方案1】:

    if naam == 'Tim' or 'tim' 被解释为:

    if (naam == 'Tim') or ('tim')
    

    永远是True,因为bool('tim') is True(非空字符串被认为是True)。因此,您有类似 False or True 的内容,它将返回 True(因为其中一个值为 True)。

    如果要将输入与两个字符串进行比较,则必须执行以下操作:

    if naam == 'Tim' or naam ==  'tim':
    

    或者:

    if name in ('Tim', 'tim'):
    

    但是,对于您的示例,您可以使用 str.lower():

    if naam.lower() == 'tim':
    

    其他的也一样:

    elif naam.lower() == 'mitch':
        print('Hoi Mitch')
    elif naam.lower() == 'tom':
        print('Hoi Tom')
    

    【讨论】:

    • 另外,我认为input 在字符串末尾包含\n。他们将不得不致电.rstrip()
    • input() 不包括换行符。
    • 感谢您的回复海德罗。你的解释很清楚。我确实有一个问题。您会建议哪种方法?为什么?
    • @user2756101 糟糕,直到现在才看到这条评论。我更喜欢使用.lower,因为它更短且更具可读性。至于性能,那么if name in ('Tim', 'tim')可能是最快的
    【解决方案2】:

    如果要比较的值增加,你可以这样做

    if naam in ('Tim', 'tim'):
        print ('Hoi Tim')
    elif naam in ('Mitch', 'mitch'):
        print ('Hoi Mitch')
    elif naam in ('Tom', 'tom'):
        print ('Hoi Tom')
    else:
        print ('Hoi vreemdeling!')
    

    【讨论】:

    • 感谢您的回复。应该怎么解释?是不是像 elif naam in(includes) 一样?在使用 in 时,我可以写尽可能多的选项吗?
    • 当您使用in 时,您可以在元组或python 列表中列出所有选项。如果任何项目匹配,它将返回 true。
    猜你喜欢
    • 2015-12-06
    • 2021-01-04
    • 2016-04-28
    • 1970-01-01
    • 2020-06-20
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多