如何替换函数中if语句中的变量?

时间:2015-08-01 08:01:48

标签: python python-2.7

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()        

所以我收到了错误

  

UnboundLocalError:赋值前引用的局部变量'name'

我想要做的是当我的输入name是一个整数时,我输入要替换name的内容并再次运行该函数

2 个答案:

答案 0 :(得分:5)

为什么不将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)

顺便说一句,在()isalpha之后,代码遗失isdigit。 并且长度永远不会变成负数。 len(name) < 0没有意义。

答案 1 :(得分:0)

这是variable scoping的问题。 Python采用与大多数语言不同的approach to function scopes and conflicts。如果您只是读取变量,它将使用全局版本。但是,如果您尝试设置它,那么它将使用本地版本。

python解释器看到你在底部设置name = raw_input(),并在整个函数中使用本地版本 。由于本地第一次没有初始化,因此会出错。所以要修复它,你只需要强制python使用全局的,使用这一行:

def pyg():
    global name

    . . .

当然,其他人给你的建议是更好的练习,也是你应该使用的。