2016-10-28 3 views
1

Я знаю, что кто-то спросил о «если», который работает как if not, или not in, но я хотел бы иметь заявление, которое вводит исключение из условного оператора. Например:есть ли что-то «за исключением» в Python, которое работает как «исключение», но для обычного кода, а не для исключений.

if num >= 0 and num <= 99: 
    # then do sth (except the following line) 
unless num = 10: 
    # in this case do something else 

Было бы очень разборчивый и понятнее, чем письма:

if (num >= 0 and num <= 9) or (num >= 11 and num <= 99): 
     # then do sth (except the following line) 
    elif num = 10: 
     # in this case do something else 

Условные не заявление не сделать то же самое ...

ПРИМЕЧАНИЯ: Я практически новичок в это так, пожалуйста, медведь со мной

+1

просто добавьте 'и num! = 10' в первом условии, так что это произойдет, если оно находится между o и 99 и [не равно 10.] (http://stackoverflow.com/questions/11060506/is-there -a-not-equal-operator-in-python) –

+1

Я бы не согласился с тем, что ваш предполагаемый 'if' более интуитивный, имеющий большой блок кода, который будет запускать 'if num> = 0 и num <= 99', а затем увидеть под ним то, что это не все условие, приведет меня в бешенство. –

+0

Да! Вы совершенно правы ...,! = 10 в первой строке, а затем elif, полностью эквивалентны. Большое спасибо! – Martec

ответ

7

Обычных если может это сделать, если вы измените порядок пунктов:

if num == 10: 
    # do the num = 10 thing 
elif 0 <= num <= 99: 
    # do something else 
+0

Охх, да, конечно! Небольшой шаг для программиста, но большой для новичков ... Очень полезно, спасибо большое! – Martec

+0

@Martec: несвязанный: если вам нужно рассмотреть несколько диапазонов, используйте полузакрытые интервалы, такие как: 'n в диапазоне (100)' ('0 <= n <100'). См. [Почему нумерация должна начинаться с нуля] (https://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html) – jfs

0

Обратный путь и проверьте сначала 10.

If num == 10: 
    # in this case do something 
elif num >= 0 and num <= 99: 
    # then do sth 
1

ваш preposed unless привело бы к очень не-интуитивным кода на мой взгляд, когда есть if заявление я ожидаю, что заявление должно произойти, если все условие сбывается, если есть способ изменить это так что вам нужно было найти конец блока, чтобы увидеть, есть ли какой-то отдельный случай, будет очень неприятно при чтении кода.

В основном вы заинтересованы в запуске первый, когда num != 10 является одним из дополнительных условий, так что просто использовать:

if 0<=num <= 99 and num!=10: 
    #statement here 
elif num == 10: 
    #other statement. 

Также обратите внимание, что 0 <= num <= 99 по существу equivelent к 0 <= num and num <= 99 но легче читать :)

+0

Я вижу это Tadhg, я полностью понимаю, что мы хотим знать сначала взгляните, что это делает. Если бы у нас было более поздние (или несколько!) Исключений, это было бы неинтересно вообще ... Мне кажется, что теперь, если * ..., извините, я имею в виду * if * вместо if if, мы попробовал, тогда было бы иначе. Но простые решения, которые вы предложили в качестве базового минимума, одинаково эффективны, поэтому я не вижу необходимости, если только сейчас. Благодаря :) – Martec