2015-08-01 2 views
1
print 'Welcome to the Pig Latin Translator!' 

def pyg(): 
    if name.isalpha and len(name) > 0: 
     print 
    elif name.isdigit: 
     print "This is an integer, not a string!" 
     name = raw_input() 
     pyg() 
    elif len(name) <= 0: 
     print "You typed nothing!" 
     name = raw_input() 
     pyg() 
name = raw_input() 
pyg()   

Так я получаю ошибкуКак заменить переменную в выражении if в функции?

UnboundLocalError: local variable 'name' referenced before assignment

То, что я пытаюсь сделать, это когда мой вход name представляет собой целое число вхожу что-то, чтобы заменить name и запустить функцию снова

ответ

5

Почему бы» t вы передаете name в качестве аргумента функции и заставляете функцию принимать параметр?

print 'Welcome to the Pig Latin Translator!' 

def pyg(name): 
    if name.isalpha() and len(name) > 0: 
     print 
    elif name.isdigit(): 
     print "This is an integer, not a string!" 
     name = raw_input() 
     pyg() 
    elif len(name) == 0: 
     print "You typed nothing!" 
     name = raw_input() 
     pyg(name) 

name = raw_input() 
pyg(name) 

BTW, код отсутствует () после isalpha, isdigit. и длина никогда не станет отрицательным числом. len(name) < 0 не имеет смысла.

0

Это проблема с variable scoping. Python занимает approach to function scopes and conflicts, который отличается от большинства языков. Если вы только читаете переменную, она будет использовать глобальную версию. Однако, если вы попытаетесь установить его, он будет использовать локальную версию.

Интерпретатор python видит, что вы устанавливаете name = raw_input() внизу и использует локальную версию по всей функции. Поскольку локальный не инициализирован в первый раз, вы получаете сообщение об ошибке. Таким образом, чтобы исправить это, вы просто должны заставить питон использовать глобальные один, с этой линией:

def pyg(): 
    global name 

    . . . 

Конечно, другие предложения дали вам гораздо лучше практика, и то, что вы должны использовать.

+0

Спасибо, мой код работает, но я до сих пор не понимаю, когда я должен использовать «глобальный» – Ch3wbacc4

+1

@ Ch3wbacc4 google 'python global variable' – aIKid

+2

@ Ch3wbacc4 Редко, если вообще когда-либо. Часто бывает лучшее решение, чем «глобальное», взгляните на мои ответы и ответы на фальсету. Глобальные переменные часто могут иметь побочные эффекты, которые вы не понимали, если что-то еще изменяет переменную между вызовом функции, например. –

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