воли
эту работу?
нет, это не будет, потому что вы написали на самом деле:
new_pos is "left"
→ id(new_pos) == id("left")
→ логическое значение X
'right'
покое → bool('right')
→ всегда True
'boat'
одна → bool('boat')
→ всегда True
при оценке этого выражения вы получаете: X or True or True
который всегда оценивает True
. Таким образом, независимо от того, new_pos
- ваша функция, будет всегда return True и назначить new_pos
на self.man
.
Или мне нужно позвонить, если new_pos для каждого или?
хорошо, что это способ сделать это:
if new_pos is 'left' or new_pos is 'right' or new_pos is 'boat':
, но это немного многословный, и не очень элегантно. Лучший способ записать его, чтобы спросить, есть ли new_pos
в кортеже ('left', 'right', 'boat')
:
if new_pos in ('left', 'right', 'boat'):
Nota Bene: хотя я предпочитаю использовать is
при работе со строками (как это часто делает прекрасные предложения, как if user_input is "yes"
, иметь в виду, что это исключительное поведение оператора is
.
оператор is
используется, чтобы соответствовать два экземпляра, являются ли тот же экземпляр (то есть тот же объект в памяти), в то время как ==
проверки оператора ли значение обоих экземпляров одно и то же, и оператор ==
может быть определен разработчиком с использованием __eq__
для пользовательского поведения.
Именно поэтому оператор is
называется оператором идентификации, а оператором ==
является оператор equality
. Учитывая, что оператор id()
дает уникальный идентификатор для экземпляра: вы можете перевести a is b
в id(a) == id(b)
. Побольше читайте об этом this QA.
Нет. Попробуйте 'if new_pos in ('left', 'right', 'boat'):'. –
Ничего себе, спасибо. Это было довольно быстро! –
Это не сработает по двум причинам. Один будет отображаться людьми с лучшими навыками обмана, чем я. Другой - это тесты 'is', чтобы увидеть, является ли один объект тем же объектом, что и другой. То есть, он дает «True» только в том случае, если у них одинаковое место в памяти. Однако вы хотите увидеть, эквивалентны ли они. Do 'if new_pos in (« left »,« right »,« boat »):' – zondo