编写嵌套if语句(包含不同条件)的优雅方式

时间:2014-02-04 13:34:19

标签: python if-statement

我有4个变量(包含0.0到1.0之间的相对值),我想检查这些变量中至少有2个高于0.01,其中1个必须大于0.05。我写了以下块:

if rel1 > 0.05:
    if rel2 > 0.01 or rel3 > 0.01 or rel4 > 0.01:
        print "Yay" # Filler line
elif rel2 > 0.05:
    if rel1 > 0.01 or rel3 > 0.01 or rel4 > 0.01:
        print "Yay" # Filler line
elif rel3 > 0.05:
    if rel1 > 0.01 or rel2 > 0.01 or rel4 > 0.01:
        print "Yay" # Filler line
elif rel4 > 0.05:
    if rel1 > 0.01 or rel2 > 0.01 or rel3 > 0.01:
        print "Yay" # Filler line
然而,我发现这段代码看起来相当狡猾,并且假设必须有更多的pythonic方法来做到这一点?我一直在试验以下内容(没有工作,但展示了我期望它可以解决的问题):

for i in range(1,4):
  val = "rel" + str(i)
    if val > 0.05 # Got stuck on this line
      # dynamically generate the other 3 if's :
        # Do the logic

这里的问题是,它只是产生名称(即rel1)而不是实际值,因为它是一个字符串,我有点不确定如何从这里开始。

2 个答案:

答案 0 :(得分:7)

l = [rel1, rel2, rel3, rel4]
if any(item > 0.05 for item in l) and sum(item > 0.01 for item in l) >= 2:
    print "Yay"

sum()以这种方式工作,因为布尔True的数值为1;感谢@falsetru建议这样做了)

答案 1 :(得分:1)

r = [rel1, rel2, rel3, rel4]
r.sort()
if r[-1] > 0.5 and r[-2] > 0.1:
    print "Yay"