繁体   English   中英

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

[英]Python: If else loop behaving differently

我正在尝试对数据框的特定组合执行操作,但是我的代码未按照我的想法运行,并且我不认为自己做了一些明显的错误。

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是一个数据Test4.index ,我想应该不相关的信息。 它的输出是多次打印Combination 10 done ,这是不应该发生的。 我是在做一些非常根本的错误,还是在更深层次的错误中,我无法弄清楚?

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

您的括号是错误的。

检查以下代码:

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中的运算符优先级 ,以了解将首先评估哪个运算符

因为你已经有了答案

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM