如果 2 个条件为真,如何正确跳过步骤

Posted

技术标签:

【中文标题】如果 2 个条件为真,如何正确跳过步骤【英文标题】:How to properly skip a step if 2 conditions are true 【发布时间】:2013-07-01 13:36:00 【问题描述】:

我有两个条件,ShouldCheckForErrorsHasErrors

我的代码是

if(ShouldCheckForErrors && HasErrors)

    //Do nothing

else

    PassTest()

我觉得这是一个非常冗长的检查。有没有一种方法可以让我不必使用else 进行单次检查?

例如:

if(!ShouldCheckForErrors && !HasErrors)

    PassTest()

不起作用,因为当ShouldCheckforErrorstrue,但HasErrorsfalse 时,将无法调用PassTest()。 (反之亦然)

我只是觉得我的逻辑运算符忘记了一些东西。

【问题讨论】:

【参考方案1】:

您正在寻找De Morgan's Law:

if (!ShouldCheckForErrors || !HasErrors)

换一种说法:

如果没有错误,或者我们没有检查错误,您应该通过。

【讨论】:

根据第一个代码(即“更长”),pass表示两个都是真的,这不是,而是 @Tigran:这不是否定的工作方式。 en.wikipedia.org/wiki/De_Morgan%27s_laws 这是个好方法。现在我不确定@Adil 答案是如何编译成的,但我认为这两个条件都在此处检查,如果!ShouldCheckForErrors 评估为true,则不会检查HasErrors 鉴于用户的新手,您可能想在此处解释德摩根定律或其相关性或用途,而不是将相当密集的***文章留给初学者。 @Tigran: !(A && B) === (!A || !B)【参考方案2】:

在得到两个条件的结果后使用 not 运算符 !

if(!(ShouldCheckForErrors && HasErrors))

    PassTest();

【讨论】:

在我发布 +1 之前没看到这个 非常干净,但我决定使用(!ShouldCheckForErrors || !HasErrors) 以防止不必要地调用第二个条件。【参考方案3】:

你的逻辑有点不对

!ShouldCheckForErrors && !HasErrors

不一样

!(ShouldCheckForErrors && HasErrors)

这就是我相信你想要的

【讨论】:

【参考方案4】:

更简单的情况 -

if(theOnlyCheck) 


else 
    do();

您似乎足够精明,可以缩短检查 -

if(!theOnlyCheck) 
    do();

但你只是搞乱了你的操作顺序。

(check1 && check2) 替换theOnlyCheck。不要忘记括号:

if(!(check1 && check2)) 
    do();

现在,如果您不喜欢处理这些括号,可以遵循德摩根定律:!(a && b)!a || !b 相同。自己想想看——

if(!check1 || !check2) 
    do();

【讨论】:

以上是关于如果 2 个条件为真,如何正确跳过步骤的主要内容,如果未能解决你的问题,请参考以下文章

如何有条件地跳过python中for循环中的迭代步骤数?

循环结构(while循环)

Python:如果条件为真,则跳过 For 循环中的迭代

for 循环

Rails - 验证:如果一个条件为真

unittst用例操作