如何在python中为一个if语句设置多个条件[重复]
Posted
技术标签:
【中文标题】如何在python中为一个if语句设置多个条件[重复]【英文标题】:How to have multiple conditions for one if statement in python [duplicate] 【发布时间】:2016-08-13 23:13:49 【问题描述】:所以我在 python 3.1.5 中编写了一些代码,这些代码需要多个条件才能发生。示例:
def example(arg1, arg2, arg3):
if arg1 == 1:
if arg2 == 2:
if arg3 == 3:
print("Example Text")
问题是,当我这样做时,如果 arg2 和 arg3 不等于 0,它不会打印任何内容。帮助?
【问题讨论】:
if (arg1, arg2, arg3) == (1, 2, 3):
怎么样
“问题是,当我这样做时,如果 arg2 和 arg3 不等于 0,它不会打印任何东西” - 预期。似乎这里唯一有效的论点是 1,2,3
为什么不if arg1 == 1 and arg2 == 2 and arg3 == 3:
?
Roberto 我已经试过了,但是 ozgur 我会试试你的
@SooBaccaCole 它应该可以工作的......我真的不明白为什么不,对不起。
【参考方案1】:
我会用
def example(arg1, arg2, arg3):
if arg1 == 1 and arg2 == 2 and arg3 == 3:
print("Example Text")
and
运算符与同名逻辑门相同;当且仅当所有输入均为 1 时,它才会返回 1。如果您需要该逻辑门,也可以使用 or
运算符。
编辑:实际上,您帖子中提供的代码对我来说很好用。我看不出有什么问题。我认为这可能是您的 Python 的问题,而不是实际的语言。
【讨论】:
我的 IDE 说它没有语法或其他错误,但是当它运行时它不能正确输出文本。罗伯托和您的代码(它们是相同的)都运行良好。【参考方案2】:Darian Moody 在他的blog post 中为这一挑战提供了一个很好的解决方案:
a = 1
b = 2
c = True
rules = [a == 1,
b == 2,
c == True]
if all(rules):
print("Success!")
当给定可迭代对象中的所有元素都为真时,all() 方法返回 True
。如果不是,则返回False
。
您可以在 python 文档here 和更多信息和示例here 中阅读一点更多信息。
(我也在这里用这个信息回答了类似的问题 - How to have multiple conditions for one if statement in python)
【讨论】:
这在用 or 区分相互独立的多个 and 语句时非常有用!谢谢你! 谢谢@nikooters!我十分同意;它完全符合我的需求……正是这种需求让我想到了这个问题。干杯! 请注意,这种方法没有短路 - 始终评估所有条件。在带有 'and' 的常规 'if' 条件中,一旦遇到第一个错误条件,python 就会停止评估。 这应该是公认的答案。我花了几个小时找到这个简化的解决方案。非常感谢! 我搜索了python multiple if statements "and" condition best practices
,发现了许多垃圾的基本定义。最后我发现all
和any
如何帮助为and
和or
条件定义多个if 语句。谢谢!【参考方案3】:
假设您传递的是字符串而不是整数,请尝试将参数转换为整数:
def example(arg1, arg2, arg3):
if int(arg1) == 1 and int(arg2) == 2 and int(arg3) == 3:
print("Example Text")
(经过编辑强调我不是在要求澄清;我试图在我的回答中保持外交。?)
【讨论】:
这应该是一条评论。【参考方案4】:可能有点奇怪或不好的做法,但这是解决问题的一种方法。
(arg1, arg2, arg3) = (1, 2, 3)
if (arg1 == 1)*(arg2 == 2)*(arg3 == 3):
print('Example.')
任何乘以 0 == 0。如果这些条件中的任何一个失败,则它的计算结果为 false。
【讨论】:
为什么你更喜欢这个而不是显而易见的?【参考方案5】:我参加聚会有点晚了,但我想我会分享一种方法,如果你有相同类型的条件,即检查是否所有、任何或给定数量的 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")
这意味着您可以只更改两个初始列表,至少对我来说这更容易。
【讨论】:
非常冗长且不可读。请参阅上面的答案,该答案使用“all”方法以干净的方式实现此 是的,除了 all 语句不允许特定数量的条件。让它变得非常简单和完全没用。更不用说您无法在不更改代码的情况下更改列表,这再次简单且不灵活。但感谢您的意见 请举个例子,因为我认为你所拥有的和上面的例子没有什么区别。两者都可以在运行时改变条件,我认为需要一个阈值数量的条件而不是所有条件是罕见的,而不是 OP 要求的!要复制“至少一个”,请使用 any() 而不是 all() 这两个答案都不能改变条件的数量,他们可以自己改变条件,但不能改变条件的数量。 不能添加到条件列表中?以上是关于如何在python中为一个if语句设置多个条件[重复]的主要内容,如果未能解决你的问题,请参考以下文章