【问题标题】:Printing if different variables are True or False Python 3.3如果不同的变量是 True 或 False Python 3.3,则打印
【发布时间】:2013-04-28 20:53:29
【问题描述】:

在检查变量是真还是假后,我无法打印消息。我想要做的是从一组变量中打印出真实的变量。必须有比下面更简单的方法,但这就是我能想到的。我需要更好的解决方案或对以下内容进行修改以使其正常工作。

这是我的代码:

if (quirk) and not (minor, creator, nature):
    print (quirk, item)
elif (minor) and not (quirk, creator, nature):
    print (minor, item)
elif (creator) and not (minor, quirk, nature):
    print (creator, item)
elif (nature) and not (minor, quirk, creator):
    print (item, nature)
else:
    print ("Something went wrong! Properties out of range! Nature =",nature,"Quirk =",quirk,"Minor =",minor,"Creator =",creator)

在这种情况下,我总是收到错误消息,但从来没有打印过任何内容。错误总是表明其中一个变量为真。

提前谢谢你!

【问题讨论】:

    标签: python python-3.3


    【解决方案1】:

    你正在检查一个非空元组是否是假的——这绝不是真的。请改用any

    if quirk and not any([minor, creator, nature]):
        print (quirk, item)
    # and so on
    

    如果集合中的任何元素是True,则any([minor, creator, nature]) 返回True,否则返回False

    【讨论】:

    • 这完全有效!当系统允许我接受分析器时,我会接受。谢谢!我想我需要阅读“任何”。
    • @Simkill 在您使用它时,您可能还想阅读all,这是一个密切相关的功能。
    【解决方案2】:
    (minor, creator, nature)
    

    是一个元组。并且无论minorcreatornature 的值如何,它总是在布尔上下文中计算为True

    documentation for Truth Value Testing 是这么说的:

    可以测试任何对象的真值,用于 if 或 while 条件或作为以下布尔运算的操作数。以下 值被认为是错误的:

    • 错误
    • 任何数字类型的零,例如,0、0.0、0j。
    • 任何空序列,例如,''、()、[]。
    • 任何空映射,例如 {}。
    • 用户定义类的实例,如果该类定义了 bool() 或 len() 方法,则当该方法返回整数零或 bool 值 False。

    所有其他值都被认为是真实的——所以许多类型的对象都是 总是正确的。

    您的非空序列属于 “所有其他值” 类别,因此被视为正确。


    要使用简单的 Python 逻辑来表达您的条件,您需要编写:

    if quirk and not minor and not creator and not nature:
    

    正如@Volatility 指出的那样,any() 实用函数可用于简化您的代码并使其阅读更清晰。

    【讨论】:

      【解决方案3】:

      any 在这里感觉有点矫枉过正:

      if quirk and not (minor or creator or nature):
          print (quirk, item)
      elif minor and not (quirk or creator or nature):
          print (minor, item)
      elif creator and not (minor or quirk or nature):
          print (creator, item)
      elif nature and not (minor or quirk or creator):
          print (item, nature)
      else:
          print ("Something went wrong! Properties out of range! Nature =",nature,"Quirk =",quirk,"Minor =",minor,"Creator =",creator)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-24
        • 1970-01-01
        • 1970-01-01
        • 2018-10-22
        • 2010-11-30
        相关资源
        最近更新 更多