трюк с python логическим оператором '' или ''? - PullRequest
0 голосов
/ 01 мая 2020

Я учусь python и у меня проблема с логическим оператором 'или'. Не могу найти информацию и понять, почему код в различных письмах интерпретируется по-разному (какая разница в #First и #Second примерах). Итак, #First пример не равен #Second, когда operator 'и' равны во всех вариантах кода

# First
a=35
b=35
if a or b>35:
    print('First')

'''with code like above python have printed 'First' even if statement false, like i understand it. 
But in other examples, statement are false too, and 'print' wasn't done, like it must be.'''

# Second
c=35
d=35
if c>35 or d>35:
    print('Second')

#Third    
e=35
f=35
if e>35 and f>35:
    print('Third')

#Fourth    
g=35
h=35
if g and h>35:
    print('Fourth')

Ответы [ 4 ]

5 голосов
/ 01 мая 2020
a or b > 35

эквивалентно

a or (b > 35)

, а a является правдивым, потому что все целые числа, кроме 0, являются правдивыми. Вы можете проверить:

>>> a or b > 35
35
>>> (a or b) > 35  
False

См. проверка истинности и приоритет оператора .

Также обратите внимание, что (a or b) > 35 будет не становится True, если любой из a или b больше 35.

(a or b or c or ... or n) > 35

имеет значение true, только если первое ненулевое число в дизъюнкции больше 35

2 голосов
/ 01 мая 2020

"if a" всегда будет иметь значение true для int, если a! = 0.

1 голос
/ 01 мая 2020

Когда вы используете число X непосредственно в условии, Python неявно преобразует его в логическое значение, применяя сравнение X != 0

Итак, для ваших примеров:

Сначала

a=35
b=35
if a or b>35:        # same as if a!=0 or b>35:   True or False --> True
    print('First')

Второй

c=35
d=35
if c>35 or d>35:     # False or False --> False
    print('Second')

Третий

e=35
f=35
if e>35 and f>35:    # False and False --> False
    print('Third')

Четвертый

g=35
h=35
if g and h>35:       # same as if g!=0 and h>35:  True and False --> False
    print('Fourth')

Если вы ищете express условие чтобы проверить, что a или b больше 35, вы не можете записать его как a or b > 35.
Хотя вам может быть понятно в Engli sh, это не так, как Python читает его ,

Python требует, чтобы вы были более явными, поэтому вам придется повторить > 35:

a > 35 or b > 35.

Если вы хотите избежать повторения 35, вот трюк, который вы могли бы использовать:

if max(a,b) > 35:  
   # either a or b is > 35  (i.e. the highest of the two is > 35)

if min(a,b) > 35:
   # both a and b are > 35  (i.e. the lowest of the two is > 35)
0 голосов
/ 01 мая 2020

На самом деле вы должны разделить его, чтобы лучше понять. Давайте рассмотрим первый случай:

a=35
b=35
if a or b>35:
  print('First')

В этом случае ваше условие if состоит из двух частей a и b>25, а оператор or означает, что вам нужна хотя бы одна из них быть True для печати First.

Так что же означает if a? на самом деле это означает, что если a равно значению, отличному от None, 0, "" и False. Итак, в вашем случае, а равен 35, поэтому оценка первой части равна True. Вторая часть оценивается как False, поскольку b не больше 35. И именно поэтому она печатает First.

. В четвертом примере вам нужно, чтобы они оба были оценены как True, чтобы иметь оператор печати выполнен.

Надеюсь, это поможет вам лучше понять его.

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