Python:If else循环的行为有所不同

时间:2019-02-04 12:17:24

标签: python python-3.x

我正在尝试对特定的数据帧组合执行操作,但是我的代码未按照我的想法运行,并且我认为我没有做任何明显的错误。

years_list = []
check1 = 1
check10 = 1
r =30

for p in combinations(test4.index,r):
    den = np.mean(p)
    num = np.std(p)
    cv = num/den
    if (den >= 561 and den <= 570 ) :
       if(cv>=0.13 or cv <= 0.17 and check1):
          check1=0
          print("Combination 1 done")

    elif(den>=391 and den <= 400):
        if(cv>=0.13 or cv < 0.17 and check10):
           check10 = 0
           print("Combination 10 done")
    if(check1+check10==0)
        break

在这里,我将check1check10的值更改为0,以便循环仅在if else条件内进入一次,并且如果同时满足两个条件,则中断循环。 Test4.index是一个数据框,我认为应该与之无关的信息。 其输出多次打印Combination 10 done,这是不应该发生的。 我是在做一些非常根本的错误,还是在更深层次的错误中,我无法弄清楚?

编辑:我粘贴了缩进错误,现在正确粘贴了。

2 个答案:

答案 0 :(得分:2)

您的括号是错误的。

检查以下代码:

check1 = 0

if(True or True and check1):
    print("valid")
else:
    print("invalid")

输出:

  

有效

如果要正确验证条件,请使用:

check1 = 0

if(True or True) and check1:
    print("valid")
else:
    print("invalid")

输出:

  

无效

或您的情况:

if(cv>=0.13 or cv < 0.17) and check10:
    check10 = 0
    print("Combination 10 done")

在python中检查operator precedence,以了解将首先对哪个进行评估

答案 1 :(得分:1)

因为您已经有了答案

我说您可以使用逻辑AND运算符而不是0 + 0来重构最后一个条件代码块。

if(check1 == 0 and check10 == 0)
break

为了获得更大的保证,您可以打印check1并在循环结束时检查10个值以评估每次迭代