2015-04-24 2 views
-2

То, что я пытаюсь сделать, это заставить пользователя ввести имя, а затем, чтобы запрограммировать принять это имя и протестировать «если» заявленияПочему этот код не работает

name = input("Enter name here: ") 
if name is "Bill": 
    print("Hello" + name) 
else: 
    print("Hello") 

Всякий раз, когда вход Билл, как имя, сразу же говорит о завершении программы, фактически не печатая мою вторую команду.

+3

Какая ошибка? – m0dem

+0

Неправильное использование оператора 'is'. – Shashank

+0

Что означает функция ['input'] (https://docs.python.org/2/library/functions.html#input)? –

ответ

4

Попробуйте if name == "Bill":, а не is.

Полагаю, что is сравнивает идентичность, а не равенство ценности.

+0

@PeterWood Это не так, на самом деле. По крайней мере, в 3.4. – miradulo

2

Вот небольшой пример, который может помочь вам понять Python identities:

>>> name='Bill' 
>>> name1='Bill' 
>>> if name is name1: 
    print 'yes'    

yes     #Prints "yes" 

>>> id(name)  \ 
45197024   | #Because the ids are the same for both 'name' and 'name1' 
>>> id(name1)  | 
45197024   /

>>> name1=input() 
Bill 

>>> if name is name1: 
    print 'yes' 
         #Does NOT print "yes" 
>>> id(name)  \ 
45197024    | #Because the ids are NOT the same for both 'name' and 'name1' 
>>> id(name1)  | 
43847648   /

Из документов в is оператора:

Операторы является и не проверить идентичности объекта: х y истинно тогда и только тогда, когда x и y являются одним и тем же объектом.

Поскольку ваши два объекта не совпадают, ваш if-statement не работает.

+1

Я подозреваю, что причина в том, что каждая область имеет свой собственный кеш строки или что-то в этом роде, но я не уверен. Хороший ответ. – Shashank

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