2016-09-28 2 views
-2

Почему он должен вернуть 77 в случае 3? разве это не утверждение bool? Обратите внимание, что случаи 1 и 2 возвращают False. В чем разница между случаями 2 и 3?Python bool statements

7 >= 77 and 77 
Out[313]: False 

7 >= 77 and 7 
Out[314]: False 

7 >= 7 and 77 
Out[315]: 77 

7 >= 8 and 77 
Out[318]: False 

Благодаря

относительно @ комментарий Kasramvd, что мой вопрос является точной копией вопрос другого пользователя (смотри ниже)

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

Я новичок в программировании. И это был мой первый раз, когда я соединил стек над потоком. И это был мой первый вопрос о stackoverflow. Похоже, что stackoverflow не новичок. Спасибо, что заблокировали меня, чтобы задать больше вопросов. Просто нашел это тоже.


вопрос другого пользователя

Я пытаюсь понять этот код из чужого проекта. Если вы хотите, чтобы контекст был здесь: https://github.com/newsapps/beeswithmachineguns/blob/master/beeswithmachineguns/bees.py#L501

IS_PY2 - это просто логическая переменная, True, если основная версия Python равна 2. Я знаю, что непустая строка имеет значение True, но по какой-то причине я не понимаю openmode назначается либо «w», либо «wt», а не «True» или «False».

openmode = IS_PY2 and 'w' or 'wt' 
openkwargs = IS_PY2 and {} or {'encoding': 'utf-8', 'newline': ''} 
+0

Это не так просто: http://stackoverflow.com/questions/36550588/assigning-string-with-boolean-expression/36551857#36551857 –

+0

см редактирования оригинального вопроса для уточнения @Kasramvd –

+0

@HuyNguyen НИКТО блоки, из задавая больше вопросов. Это лучший способ, с помощью которого это сообщество имеет тенденцию становиться проблемой. И каждый новичок должен сначала прочитать [документацию сначала] (http://stackoverflow.com/help/how-to-ask), прежде чем приступать к работе. – Kasramvd

ответ

0

Это связано с тем, что and короткого замыкания, и возвращает truthy значение вместо True или False.

В:

7 >= 77 and 7 

7> = 77 приравнивает к False, поэтому второй операнд and никогда не оценивали, так что она становится False.

В:

7 >= 7 and 77 

7 равно 7 (очевидно), так что второй операнд and оценивается. Поскольку 77 является правдивым, это то, что возвращается.

0

Я считаю, что механики и утверждения в python работают так.

Условия в операторах и операторы оцениваются последовательно. Если обнаружена ложная вещь, она возвращается, как есть. В противном случае возвращается последняя вещь в и условия.

В Python вещи имеют понятие быть правдивыми или ложными, не обязательно являясь логическими переменными. Таким образом, и просто возвращает либо первое, что является ложным, либо последнее условие. В этом случае он перенастраивает 77, и если вы поместите это в условное выражение, это будет рассматриваться как Истина, потому что 77 является правдивым.

Для еи если вы

7>=7 and False and 77 # ===> False 
7>=7 and 0 and 77 # ===> 0 
7>=7 and [] and 77 # ===> [] 

Итак, вы видите, что не возвращает True/False обязательно, он просто возвращает первый falsy вещь он видит или возвращает последнюю вещь.