所以我在python 3.1.5中编写了一些代码,要求有一个以上的条件才能发生。例如:
def example(arg1, arg2, arg3):
if arg1 == 1:
if arg2 == 2:
if arg3 == 3:
print("Example Text")
问题在于,当我这样做时,如果arg2和arg3等于0,那么它不会打印任何东西。帮助?
答案 0 :(得分:13)
我会用
def example(arg1, arg2, arg3):
if arg1 == 1 and arg2 == 2 and arg3 == 3:
print("Example Text")
and
运算符与具有相同名称的逻辑门相同;当且仅当所有输入都为1时,它将返回1.如果您想要逻辑门,也可以使用or
运算符。
编辑:实际上,您帖子中提供的代码可以和我一起使用。我没有看到任何问题。我认为这可能是你的Python的一个问题,而不是实际的语言。
答案 1 :(得分:1)
假设您传入的是字符串而不是整数,请尝试将参数转换为整数:
def example(arg1, arg2, arg3):
if int(arg1) == 1 and int(arg2) == 2 and int(arg3) == 3:
print("Example Text")
(编辑强调我不是要求澄清;我试图在答案中保持外交。)
答案 2 :(得分:1)
可能有点奇怪或不好的做法,但这是解决问题的一种方式。
(arg1, arg2, arg3) = (1, 2, 3)
if (arg1 == 1)*(arg2 == 2)*(arg3 == 3):
print('Example.')
任何乘以0 == 0.如果这些条件中的任何一个失败,那么它的计算结果为假。
答案 3 :(得分:0)
我对派对来说有点晚了,但如果您有相同类型的条件,我认为我会分享一种方法,即检查是否所有,任何或给定数量的A_1 = A_2和B_1 = B_2 ,这可以通过以下方式完成:
cond_list_1=["1","2","3"]
cond_list_2=["3","2","1"]
nr_conds=1
if len([True for i, j in zip(cond_list_1, cond_list_2) if i == j])>=nr_conds:
print("At least " + str(nr_conds) + " conditions are fullfilled")
if len([True for i, j in zip(cond_list_1, cond_list_2) if i == j])==len(cond_list_1):
print("All conditions are fullfilled")
这意味着您只需更改两个初始列表,至少对我来说这会更容易。
答案 4 :(得分:0)
Darian Moody在他的blog post:
中为这一挑战提供了很好的解决方案a = 1
b = 2
c = True
rules = [a == 1,
b == 2,
c == True]
if all(rules):
print("Success!")
当给定iterable中的所有元素都为true时,all()方法返回True
。如果没有,则返回False
。
您可以在python docs here中阅读 little 更多信息,以及更多信息和示例here。
(我也在这里回答了类似的问题 - How to have multiple conditions for one if statement in python)