Булев запрос - PullRequest
       37

Булев запрос

0 голосов
/ 17 декабря 2009

если:

x = 0
b = x==0

и я буду печатать, будет ли напечатано 'true'

но если бы я сделал:

х = 0
b = x == 3

и я напечатал, будь это ложно. Вместо того, чтобы печатать false, как взять булево значение «b», чтобы напечатать нужный текст?

позвольте мне объяснить подробнее:

bool = all(n > 0 for n in list) 

if bool != 'True':
    print 'a value is not greater than zero'

Но это ничего не печатает?

Ответы [ 8 ]

6 голосов
/ 17 декабря 2009

Что-то вроде этого вы имеете в виду?

x = 0
if x != 3:
    print "x does not equal 3"
6 голосов
/ 17 декабря 2009

Я думаю, что, возможно, следующее поможет облегчить ваше замешательство ...

>>> 0==0
True
>>> 'True'
'True'
>>> (0==0) == 'True'
False
>>> (0==0) == True
True
>>>
4 голосов
/ 17 декабря 2009

Предложение if, как предполагают другие ответы, возможно (и вы можете добавить предложение else, чтобы напечатать что-то конкретное в каждом случае). Более прямой оператор if/else :

print('equality' if b else 'diversity')

Вы также можете использовать индексирование, поскольку False имеет значение int 0, а True - значение int 1:

print(['different', 'the same'][b])

но я считаю, что он немного менее читабелен, чем варианты if.

3 голосов
/ 17 декабря 2009

Удалить кавычки вокруг True:

bool = all(n > 0 for n in list) 

if bool != True:
    print 'a value is not greater than zero'

или, вы также можете проверить на Ложь:

bool = all(n > 0 for n in list) 

if bool == False:
    print 'a value is not greater than zero'

Есть несколько других «быстрых» способов написания, но, поскольку вы новичок, давайте не будем путать предмет более, чем необходимо.

2 голосов
/ 17 декабря 2009
a = lambda b :("not true","true")[b == 3]
print a(3)

сделает это за вас, если вы хотите поместить его в лямбду

2 голосов
/ 17 декабря 2009
>>> x = 0
>>> if not x == 3: print 'x does not equal 3'
x does not equal 3

Позвольте мне объяснить подробнее:

>>> list = [-1, 1, 2, 3]
>>> if not all(n > 0 for n in list): print 'a value is not greater than zero'
a value is not greater than zero

# => or shorter ...
>>> if min(list) < 0: print 'a value is not greater than zero'
a value is not greater than zero

обратите внимание, что list является встроенным и не должен использоваться в качестве имени переменной.

>>> list
<type 'list'>
>>> list = [1, 2, "value not greater than 0"]
>>> list
[1, 2, "value not greater than 0"]
>>> del list
>>> list
<type 'list'>
...
0 голосов
/ 17 декабря 2009
>>> 'True' is not True
True

«Истина» - строка

True - логическое значение

Они не имеют ничего общего друг с другом, кроме как случайно. Строковое значение имеет те же буквы, что и логический литерал. Но это просто совпадение.

0 голосов
/ 17 декабря 2009

Вам нужно будет сделать печать самостоятельно, как все предложили здесь.

Стоит отметить, что некоторые языки (например, Scala, Ruby, Groovy) имеют языковые функции, которые позволяют писать:

x should be(3)

И это сообщит:

0 should be 3 but is not.

В Groovy с инфраструктурой тестирования Спока вы можете написать:

def "my test":
  when: x = 0
  expect: x == 3

И это вывело бы:

Состояние не выполнено:

x == 3
| |  |
0 |  3
 false

Я не думаю, что это возможно чисто в Python, хотя.

...