Поскольку Python является динамическим языком, вы можете переназначить тип переменной от одного к другому - в этом случае, непреднамеренно.
Когда вы устанавливаете переменную с равным значком =
, вы фактически присваиваете не только значение, но и выводимый тип.
Этот маленький тест может показать вам тип переменной меняющийся на лету:
i = 1
type(i) ## int
i = "s"
type(i) ## str
Чтобы узнать больше о динамической природе и как присваивание переменной можно изменить тип переменной, смотрите по этой ссылке: http://www.python-course.eu/variables.php
Вот поток
- Ваше имя функции
triangle
- Сразу внутри функции, вы создать переменную
triangle
которая является ул
- Когда ваш
else
блок выполняется, это ошибка, потому что triangle
является теперь ул и больше не отсылка к функции triangle()
Это хорошая практика кодирования, чтобы назвать ваши переменные несколько представительно того, что они содержат - в данном случае - ответ пользователя;
Незначительное изменение имени переменной делает вашу работу программы :)
import math
y = 'yes'
y1 ='Yes'
y2 = 'y'
y3 = 'Y'
def triangle():
response = raw_input('Is the triangle a 45-45-90 or a 30-60-90? ')
if response == y:
print 'yes'
elif response == y1:
print 'yes'
elif response == y2:
print 'yes'
elif response == y3:
print 'yes'
else:
print 'you must enter '+ y +' or ' + y1 + ' or ' + y + ' or ' + y3
triangle()
if __name__ == "__main__":
triangle()
Бонус:
Вы можете сделать свой, если/иначе блок гораздо проще с помощью in
тем более, что ваш ответ всегда является (распечатать «да» и выйти из программы):
if response in (y, y1, y2, y3):
print 'yes'
Надеюсь, это поможет!
Не используйте одно и то же имя для функции и ввода пользователя ... – jonrsharpe
Используйте другое имя локальной переменной. Это противоречит названию функции. Кроме того, вы можете использовать оператор «in» для проверки входного значения – karthikr