Как работят булевите оператори при условия „ако“?

В момента съм нов в Python и се опитвам да стартирам няколко прости реда код. Не мога да разбера как Python оценява този синтаксис след израза if. Всякакви обяснения ще бъдат оценени.

number = int(raw_input("Enter number : "))

if number == (1 or 2 or 3):
    print "Match"
else:
    print "No match"

Само цяло число 1 дава положителен резултат, а всички други числа, включително 2 и 3, преминават през клона else. Могат ли условията да бъдат посочени само като следното?:

if number == 1 or number == 2 or number == 3:

Благодаря ти.


person UnknownMessenger    schedule 19.09.2013    source източник


Отговори (3)


Python има булеви стойности, като True и False, и също така има фалшиви стойности, като всеки празен списък, кортеж или речник, празен низ, 0 и None. Истинските ценности са обратното на това, а именно всичко, което е дефинирано.

Python or оценява и съкращава върху първия елемент, който връща вярна стойност.

Така че изразът (1 or 2 or 3) ще върне 1.

Ако искате да сравните всички елементи, тогава търсите ключовата дума in:

if number in (1, 2, 3):
    # Do logic
person Makoto    schedule 19.09.2013
comment
Благодаря за информацията и линковете. Не знаех за това решаващо разграничение между истински и фалшиви ценности и сега всичко има много повече смисъл. Ако първата стойност е почти всякаква, тогава останалата част от серията булеви оператори ще бъде игнорирана. - person UnknownMessenger; 19.09.2013

Вероятно искате:

if number in (1, 2, 3):
person tom10    schedule 19.09.2013

Операторът or приема два аргумента от лявата и дясната си страна и изпълнява следната логика:

  1. Оценете нещата от лявата страна.
  2. Ако е вярна стойност (напр. bool(x) is True, така че не е нула, празен низ или None), върнете я и спрете.
  3. В противен случай оценете нещата от дясната страна и го върнете.

Като такъв, 1 or 2 or 3 е просто 1, така че вашият израз се превръща в:

if number == (1):

Ако наистина имате предвид number == 1 or number == 2 or number == 3 или number in (1, 2, 3), ще трябва да кажете това.

(Между другото: Операторът and работи по същия начин, с изключение на това, че стъпка 2 се връща, ако лявата страна е falsey.)

person Community    schedule 19.09.2013