2014-10-22 1 views
0

У меня есть следующий код Python:Python больше и меньше, чем операнды не работают?

if bedrooms and 2 > bedrooms > 5: 
     bn = "BEDROOM NUMBER = " + str(bedrooms)   
    elif not bedrooms: 
     bn = "BEDROOMS DOES NOT EXIST" 

Я шагал через него в моем отладчик и заметил, что, хотя я думал, что спальня = 0 и что объект спальни существовал поток переходит к заявлению Элиф.

Чтобы проверить это, я попробовал:

>>> bedrooms 
0.0 
>>> type(bedrooms) 
<type 'float'> 
>>> if bedrooms and 2 > bedrooms > 5: 
...  print "bw" 
...  

ничего не было напечатано. Поэтому кажется, что 2> спальни> 5 не правда? Что я делаю не так ?

Приложение:

я не объяснил правильно, я не ищу для числа между 2-5, а скорее либо меньше, чем 2 или больше чем 5.

+3

Как можно '2> спальни> 5' всегда быть правдой? Он проверяет, является ли 'спальни' менее 2, но больше 5. – iCodez

+2

Ну,' 0> 5' действительно ложно – fredtantini

+0

что вы ожидаете '2> спальни> 5' сделать точно? – njzk2

ответ

3

Там нет числа, что является одновременно меньше двух и более пяти. Вы перепутали «больше» и «меньше».

if bedrooms and 2 < bedrooms < 5: 

Если вы хотите номер, который не находится между 2 и 5, то вы можете изменить «меньше, чем» на «меньше или равно», и свести на нет все это.

if bedrooms and not (2 <= bedrooms <= 5): 
+0

см. Выше – user61629

+0

@ user61629 Вы хотели бы, чтобы они были больше, чем и * равны *? – agconti

+0

Нет, у меня есть (2 <= спальни <= 5) в другом заявлении (не включенном здесь) – user61629

4

Ваш знак равенства отменен. Например:

>>> 2 > 4 > 5 
False 

Попробуйте вместо этого:

if bedrooms and 2 < bedrooms < 5: 

Это даст вам поведение, я думаю, что вы собираетесь:

>>> 2 < 4 < 5 
True 

Обновление на Приложение: Текущая логика немного неудобна. Возможно, что-то вроде этого:

try: 
    if bedrooms not in [2,3,4,5]: 
     bn = "BEDROOM NUMBER = {}".format(bedrooms)   
except NameError: 
    bn = "BEDROOMS DOES NOT EXIST" 

Это более семантический мне, и давайте другие программисты более легко понять, что вы пытаетесь достичь. Этот способ более явственен и позволяет другим знать, что ваши явные номера таргетинга не входят в этот диапазон и что вы обрабатываете случай, когда спальни могут отсутствовать.

Это всего лишь мои 2 цента, конечно.


Если вы ждете, поплавки, логика может быть также:

try: 
    if not 2 <bedrooms> 5: 
     bn = "BEDROOM NUMBER = {}".format(bedrooms)   
except NameError: 
    bn = "BEDROOMS DOES NOT EXIST" 
+0

см. Выше добавление – user61629

+0

@ user61629 обновлено. – agconti

+0

будут спальни не в [2,3,4,5]: работа со спальнями = 2,5? – user61629

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