【问题标题】:python if condition "and" keyword issuepython if条件“and”关键字问题
【发布时间】:2012-04-18 07:38:01
【问题描述】:

我只是尝试调用此代码

uname=""
passwd="jhj"
if uname =="":print "uname"
if passwd=="":print "passwd"
if not uname and passwd:
    print "either"

输出是:

uname
either

不应该是“uname”吗?我该如何解决这个问题?

【问题讨论】:

    标签: python string if-statement


    【解决方案1】:

    简单的解决方法是

    if not uname and not passwd:
    

    因为它评估为

    if (not uname) and (not passwd):
    

    if not (uname or passwd):
    

    但是如果既没有提供uname 也没有提供password,这将无法正常工作(它将打印所有三个)。

    您可以将逻辑更改为仅执行一个 print 的构造:

    uname = ""
    passwd = "jhj"
    
    if not (uname or passwd):
        print "either"
    elif not uname:
        print "uname"
    elif not passwd:
        print "passwd"
    

    【讨论】:

    • 或者确实是not(uname and password)
    • @katrielalex 不是一回事。如果计算结果为Truenot(uname and password) 将返回 True。你想要的等价是not (uname or password)
    • 德摩根定律:非 a 非 b == 非(a 或 b)
    • @Lattyware - 当然,这更优雅,但更逐字逐句的方法应该有助于 OP 更容易理解逻辑。
    【解决方案2】:

    你在这里做的是这样的:

    if (not uname) and passwd:
    

    如果你想检查它们是否都是假的,你需要这样做:

    if not uname and not passwd:
    

    请注意:

    if not (uname and passwd):
    

    不是一回事,好像一个项目是True,整个事情都会评估为false。如果你想用一个not来做,正确的逻辑是:

    if not (uname or passwd):
    

    【讨论】:

      【解决方案3】:

      您想要的是将if not uname and passwd 中的not 应用于 unname 和 passwd:

      if not uname and not passwd

      或:

      if not any((uname, passwd))

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-06
        • 2021-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多