如果不同的变量是True或False则打印Python 3.3

时间:2013-04-28 11:46:49

标签: python python-3.3

在检查变量是真还是假之后,我在打印邮件时遇到问题。我想要做的是打印变量选择中的变量。必须有一个比下面更简单的方法,但这是我能想到的。我需要一个更好的解决方案或下面的修改才能使它发挥作用。

这是我的代码:

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)

在这种情况下,我总是得到错误,而不是任何打印。该错误始终显示其中一个变量为真。

提前谢谢!

3 个答案:

答案 0 :(得分:10)

你正在检查非空元组是否是伪造的 - 这是不正确的。请改用any

if quirk and not any([minor, creator, nature]):
    print (quirk, item)
# and so on
如果集合中的任何元素为any([minor, creator, nature]),则{p> True会返回True,否则会返回False

答案 1 :(得分:5)

(minor, creator, nature)

是一个元组。并且它始终在布尔上下文中评估为True,而不管minorcreatornature的值。

这是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()效用函数可用于简化代码并使其更清晰地读取。

答案 2 :(得分:1)

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)