python中复杂的if语句

时间:2010-03-22 15:21:28

标签: python

我需要在Python中实现一个复杂的 if-elif-else语句,但是我没有让它工作。

我需要的elif行必须检查这个条件的变量:

80,443或1024-65535(含)

我试过

if
  ...
  # several checks
  ...
elif (var1 > 65535) or ((var1 < 1024) and (var1 != 80) and (var1 != 443)):
  # fail
else
  ...

7 个答案:

答案 0 :(得分:44)

这应该这样做:

elif var == 80 or var == 443 or 1024 <= var <= 65535:

答案 1 :(得分:17)

从积极的意义上来说,通常更容易思考,并将其包装在一个不是:

elif not (var1 == 80 or var1 == 443 or (1024 <= var1 <= 65535)):
  # fail

你当然也可以全力以赴,更加注重面向对象:

class PortValidator(object):
  @staticmethod
  def port_allowed(p):
    if p == 80: return True
    if p == 443: return True
    if 1024 <= p <= 65535: return True
    return False


# ...
elif not PortValidator.port_allowed(var1):
  # fail

答案 2 :(得分:7)

if x == 80 or x == 443 or 1024 <= x <= 65535

一定要做

答案 3 :(得分:4)

我认为对我来说这是最蟒蛇的方式,

elif var in [80,443] + range(1024,65535):

虽然它可能需要一点时间和内存(它产生的数字从1024到65535)。如果有问题,我会这样做:

elif 1024 <= var <= 65535 or var in [80,443]:

答案 4 :(得分:2)

if
  ...
  # several checks
  ...
elif not (1024<=var<=65535 or var == 80 or var == 443)
  # fail
else
  ...

答案 5 :(得分:1)

可以像这样写:

elif var1 in [80, 443] or 1024 < var1 < 65535

通过这种方式,您可以检查var1是否出现在列表中,然后只进行1次检查,没有重复&#34; var1&#34;一个额外的时间,看起来很清楚:

如果[80,443]中的var1或1024 < var1&lt; 65535:     打印好“&#39; 其他:     打印&#39;坏&#39;    ....:

答案 6 :(得分:0)

if
  ...
  # several checks
  ...
elif ((var1 > 65535) or ((var1 < 1024)) and (var1 != 80) and (var1 != 443)):
  # fail
else
  ...

你错过了一个括号。