Каково логическое значение «строки» в Python? - PullRequest
9 голосов
/ 26 декабря 2010

Я ошибочно написал этот код на Python:

name = input("what is your name?")
if name == "Kamran" or "Samaneh":
    print("That is a nice name")
else:
    print("You have a boring name ;)")

Он всегда печатает «Это хорошее имя», даже когда ввод не «Kamran» или «Samaneh».

Правильно ли я сказал, что он считает "Саманех" истинным? Почему?

Кстати, я уже заметил свою ошибку. Правильная форма:

if name == "Kamran" or name == "Samaneh":

Ответы [ 6 ]

13 голосов
/ 26 декабря 2010

Любая непустая строка в Python (и большинстве других языков) верна, как и все ненулевые числа и непустые списки, словари, наборы и кортежи.лучший способ сделать то, что вы хотите, это:

name = input("what is your name?")
if name in ("Kamran", "Samaneh"):
    print("That is a nice name")
else:
    print("You have a boring name ;)")

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

7 голосов
/ 26 декабря 2010

Кроме пустой строки '', все строки будут оцениваться как True (см. на этой странице полный список значений всех типов, которые оцениваются как False. Это следует логике многие другие языки программирования (кроме некоторых, которые также оценивают строки, такие как '0', 'false' и т. д. до False). Точное решение о том, что делать, несколько произвольно, но сделанный выбор можно объяснить как разрешающий приведение для использования в качестве простого способа проверки пустых (по умолчанию или незаполненных) строк.

Вы всегда можете принудительно привести приведение любого типа к bool, используя функцию bool().

>>> bool('')
False
>>> bool('non-empty string')
True
>>> bool('0')
True
>>> bool('False')
True
>>> bool('false')
True
2 голосов
/ 26 декабря 2010

В Python пустая строка считается False, True в противном случае.

Вы можете использовать оператор in:

if name in ("Kamran","Samaneh"):
    print("That is a nice name")
else:
    print("You have a boring name ;)")
2 голосов
/ 26 декабря 2010

http://docs.python.org/library/stdtypes.html#truth-value-testing

".... Все остальные значения считаются истинными, поэтому объекты многих типов всегда являются истинными."

0 голосов
/ 26 декабря 2010

Очевидно, это должно быть:

name = raw_input("what is your name?")

не

name = input("what is your name?")

.

То, что вы написали, похоже на:

if (name == "Kamran" or "Samaneh")

Другое хорошее выражение:

if name == ("Kamran" or "Samaneh")

Но я также предпочитаю, чтобы имя в ("Kamran" или "Samaneh"), как уже показывалось

.

Кстати, можно написать:

print("That is a nice name" if raw_input("what is your name?") in ("Kamran","Samaneh")
      else "You have a boring name ;)")
0 голосов
/ 26 декабря 2010

Непустая строка - True, да.Пустой - Ложь.Это очень удобно.

...