Есть ли способ отрицать оператор if, кроме оператора 'and' внутри него, только в одном выражении else? - PullRequest
0 голосов
/ 18 октября 2019

Как я знаю, мы можем использовать оператор not и переписать оператор if с оператором not (или поменять местами все знаки)! Но поскольку мой код содержит более 10 условий в одном операторе if со многими операторами и, это делает мой код дублирующимся и трудным для чтения. Как пример ниже:

If a>b and A>B and R<w<a<Q and ....
# Else case is just reverse like this
Elif a<b and A<B and R>w>a>Q and ... # Thanks for @bOb for correct the syntax of this example
# I can not use just single Else without rewrite all condition (code will know a<b or A<B and ...)

У кого-нибудь есть идеи по очистке этого кода? Или просто сохранить безопасный путь - переписать все> Спасибо за вашу помощь!

Ответы [ 2 ]

1 голос
/ 18 октября 2019

Если все условия являются строгими неравенствами (< или >), вы можете выполнить

pairs = [(a, b), (A, B), (Q, a), (a, w), (w, R), ...]
if all(x > y for (x, y) in pairs):
  ...
elif all(x < y for (x, y) in pairs):
  ...

all: Вернуть True, если все элементы итерируемого являются истинными(или если итерация пуста)

Если есть другие возможности, вам нужно немного изменить это.

1 голос
/ 18 октября 2019

Ваша логическая логика имеет недостатки.

Противоположностью (A и B и C) является (! A или! B или! C) - если вы отменяете условия, вам нужно переключать операторов.

Ваш синтаксис некорректен. «ELSE» действительно требует или разрешает условие;просто слово «ELSE»

«ELSE IF» - это совершенно другое животное;этим ключевым словом в Python является ELIF, и ваше условие должно быть чем-то отличным от диаметральной противоположности условию в IF.

Примерно так:

if a>b and A>B and R<w<a<Q:
   ... code will run when all conditions are true
elif a<b:
   ... code will run when first initial condition failed
else:
   ... code will run when A<B or !(R<w<a<Q)

2) Условие р

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...