Подтвердить что ты не робот

Сложный оператор if в python

Мне нужно реализовать сложный оператор if-elif-else в Python, но я не работаю.

В строке elif мне нужно проверить переменную для этих условий:

80, 443 или 1024-65535 включительно

Я пробовал

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

Ответ 1

Это должно сделать это:

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

Ответ 2

Часто легче думать в положительном смысле и обернуть его не в:

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

Ответ 3

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

обязательно должен

Ответ 4

Я думаю, что самый питонический способ сделать это для меня будет

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

хотя это может занять немного времени и памяти (он генерирует числа от 1024 до 65535). Если с этим возникнет проблема, я сделаю следующее:

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

Ответ 5

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

Ответ 6

Можно написать так:

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

Таким образом вы проверяете, появляется ли в этом списке var1, вы делаете всего 1 чек, не повторяете лишнее время "var1" и выглядите ясно:

если var1 в [80, 443] или 1024 < var1 < 65535:   печатать "хорошо" еще:   печатать 'плохо'  ....:
хороший

Ответ 7

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

Вы пропустили круглую скобку.