如何在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,发现了许多垃圾的基本定义。最后我发现allany 如何帮助为andor 条件定义多个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语句设置多个条件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python的if和while如何放多个条件判断?

python的if和while如何放多个条件判断?

如何在角度 9 中为多个 if else 语句编写测试用例

python的if判断&两重判断

python的if判断&两重判断

“python if”语句可以多条件判断吗?