2015-05-24 2 views
0

Я не понимаю, почему приведенный ниже код не работает должным образом. Если обе переменные a и b < 0, она должна печатать, что оба числа отрицательные, иначе последнее сообщение. Но это просто не работает, что я делаю неправильно? пожалуйста помоги!и оператор со случайным

import random 
while True: 
    input() 
    a=random.randint(-9,9) 
    b=random.randint(-9,9) 
    print(a,b) 
    if a and b < 0: 
     print("2 negative numbers:",a,b) 
    else: 
     print("one or both of the numbers are positive!") 

Я запускаю это на python 3.4.

+0

Возможный дубликат [Как проверить одну переменную на несколько значений?] (Http://stackoverflow.com/questions/15112125/how-do-i-test-one-variable-against-multiple-values) – jonrsharpe

ответ

0

Вы оцениваете только a, не это отношение к 0:

if a < 0 and b < 0: 
0

Это:

a and b < 0: 

равносильна этому:

(a) and (b < 0): 

(a) является False когда a равно 0 и True в противном случае. Поэтому из-за короткого замыкания b < 0 даже не оценивается.

Как исправить вы можете использовать all метод:

all(i < 0 for i in (a, b)) 
1

Оценка Обоими операндами будет решить эту проблему. Здесь оба Операнды - это выражения, которые приводят к истинному или ложному, поэтому, если оба результата приводят к истине; вы получите требуемый результат.

if ((a < 0) and (b < 0)): 
+2

Привет и приветствуем stackoverflow. Хотя это может быть полезно для вопроса, ответ не соответствует ожидаемому формату для этого сайта. Я бы рекомендовал вам предоставить дополнительную информацию о том, почему этот ответ полезен. – Wtower

1

Я думаю, вы немного смущены тем, как распределяются операторы.

Если у вас есть

if a and b < 0 

это не значит,

if (both a and b) < 0 

но вместо

if (a) and (b < 0) 

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

if (a != 0) and (b < 0) 

поскольку «числовой нуль всех типов ... имеет значение ложь» (см the reference on booleans on docs.python.org)


Вместо этого, вы хотите

if a < 0 and b < 0 

, который расскажет вам, если оба a и b меньше нуль.

Смежные вопросы