【问题标题】:A basic question regarding or operator in python [duplicate]关于python中的or运算符的一个基本问题[重复]
【发布时间】:2020-02-14 09:14:14
【问题描述】:

我很困惑,为什么无论用户输入什么,消息总是像“欢迎 xxx”一样弹出。

username = input('Please enter your username: ')

if username == 'admin' or 'Admin' or 'ADMIN':
    print(f'Welcome {username}')

对不起,我知道这似乎是一个愚蠢的问题,但希望它可以帮助像我这样的初学者更好地理解或操作 python。

感谢您的帮助。

【问题讨论】:

  • if 条件不像你想象的那样工作。正确用法是:if username == 'admin' or username=='Admin' or username=='ADMIN'。在 Python 中,字符串是错误的,因此它将其单独解释为 if 'Admin',相当于 True

标签: python if-statement logical-operators


【解决方案1】:

这里发生的事情是将 Python 视为一种口语。

你打算做什么:

if username == 'admin' or 'Admin' or 'ADMIN':
    # stuff

意思是:

if <condition>:

“条件”是用户名是否为“admin”、“Admin”或“ADMIN”。

但这不是 python 的工作方式。 Python 读取

if username == 'admin' or 'Admin' or 'ADMIN':
    # code

作为

if <condition 1> or <condition 2> or <condition 3>: 
    # code

--

条件 1:username == 'admin' 为 FALSE。

--

条件 2:'Admin' 为真。这是因为 'Admin' 是一个字符串字面量对象,它存在,并且非零、非空、非空,因此为真。

这就像去

myString = "any string"

if myString:
    # code is executed because myString is not empty.

但是你正在这样做

if 'my string': 
    # this code would run.

--

条件 3:'ADMIN' 为 TRUE,与条件 2 为 TRUE 的原因相同。

--

您在这里所做的是if 条件始终为真,无论是否输入。因为

if username == 'admin' or 'Admin' or 'ADMIN':
    # code

评估为

if FALSE or TRUE or TRUE:
    # code

因此,即使它不是“管理员”,也会始终评估为 true 并打印 username 变量中的任何内容。

【讨论】:

    【解决方案2】:

    你想去:

    if username == 'admin' or username == 'Admin' or username =='ADMIN':
    

    【讨论】:

    • 这对于三项检查来说是一个不错的解决方案,但更好的解决方案是if username in ['admin', 'Admin', 'ADMIN']: 甚至更好的if lower(username) == 'admin':,具体取决于需要检查哪些值
    • 你说得对
    • 谢谢,这也解决了我的问题。
    猜你喜欢
    • 2011-05-26
    • 2017-03-20
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多