То, с чем вам следует ознакомиться, это Scope. Вы можете найти много информации об этом в режиме онлайн, но в короткой области видимости вашей переменной.
Итак, в вашем примере давайте попробуем выполнить шаги, которые выполняет интерпретатор при вводе вашей функции.
имя пользователя ()
- Печать текста
- Присвойте значение от
input()
переменной с именем inputName
. Обратите внимание, что не имеет значения, существовала ли переменная раньше или нет. Если это не так, переводчик создаст его.
- Введите
while
цикл.
- Проверить, равна ли переменная с именем
name
inputName
. Интерпретатор не может видеть переменную name
в текущем scope , поэтому он пытается посмотреть на один рычаг выше, что является вашим основным сценарием. Он находит переменную, поэтому использует ее (которую вы объявили в строке 51).
Я надеюсь, что вы понимаете основную концепцию здесь. Это, однако, не должно использоваться в качестве метода по умолчанию. Лучше создавать функции, которые принимают аргументы, а не использовать глобальные переменные или более высокую область видимости.
Одна маленькая заметка в конце. Я рекомендую вам попробовать использовать редактор, такой как PyCharm . Он предупредит вас о таких ситуациях. Это также поможет вам лучше следовать следующим правилам стиля кода (документ называется PEP8), которые включают, как именовать переменные, где ставить и сколько пробелов и т. Д. На данный момент это может показаться ненужным, но сэкономит вам много времени. изменение привычек позже.
Удачи!