Stings作为名称错误返回

时间:2014-12-27 16:21:08

标签: python

我有一些代码我搞砸了..对于python和编码来说非常新,但是我对这个很难。

我定义了一个函数,并从中获得了一些用户输入。当我尝试打印输入时,我得到一个NameError:name' my_name'没有定义。

这是代码..

  #New Program
  #Written by Chris Nelson of Cnelson Creations

  #This code obtains some basic information from the user
   def questions():
    if userinput == "Y":
        my_name = input("What is your name? ")`enter code here`
        my_age = input("What is your age? ")
        my_urname = input("Please pick a username.. ")
        my_psword = input("Please pick a password.. ")
    elif userinput == "N":
        print ("Sorry we need the information to continue..")
        print ("... Goodbye")
        exit()
    else:
        print ("Not a valid choice.. Goodbye!")
        exit()
   print ("We need to obtain some information from you before going forward")
   print ("Is this ok? Enter Y for 'yes' or N for 'No'...")
   userinput = input("Please enter Y or N ")
   questions() #This code runs the function listed above..
   print ("Great we have some information from you!")
   print ("Lets confirm it is the correct information.. ")
   print ('{}, {}, {}, {}, is this information correct?'.format(my_name, my_age, my_urname, my_psword))

3 个答案:

答案 0 :(得分:2)

您在函数内定义my_name将进入本地范围。查看Short Description of the Scoping Rules?的这个问题。您有多种方法可以纠正此问题

  • 对于my_name以及函数中定义的其他变量可见,您必须在函数外定义它们。

  • 或者在函数中添加全局声明

    global my_name,my_age,my_urname,my_psword

  • 或者使用着名的元组打包和序列解包

    在函数

    中的if条件结尾处发表声明

    return (my_name,my_age,my_urname,my_psword) 并且函数调用中有my_name,my_age,my_urname,my_psword = questions()

  • 或者在函数本身中打印值,就像你自己建议的那样

答案 1 :(得分:0)

因为你试图在函数外部打印my_name。当你在函数内部对它进行定义时它就在本地(范围)命名空间中(函数内部的变量具有局部范围(意味着你无法在函数外部和另一个范围内访问它们) )!如果要在函数外部访问它,则需要将其定义为global。通过在函数的顶层添加global my_name,同样如果您想要访问其他变量,则需要执行my_name之类的操作。

但是你可以在你的函数中返回那些变量:

def questions():
    if userinput == "Y":
        my_name = input("What is your name? ")`enter code here`
        my_age = input("What is your age? ")
        my_urname = input("Please pick a username.. ")
        my_psword = input("Please pick a password.. ")
    elif userinput == "N":
        print ("Sorry we need the information to continue..")
        print ("... Goodbye")
        exit()
    else:
        print ("Not a valid choice.. Goodbye!")
        exit()
    return (my_name,my_age,my_urname,my_psword)

在函数外部,您可以执行以下任务:

my_name, my_age, my_urname, my_psword= questions()

答案 2 :(得分:-3)

添加全局my_name,my_age,my_urname,my_psword

def questions():
    global my_name,my_age,my_urname,my_psword
    if userinput == "Y":
        my_name = input("What is your name? ")`enter code here`
        my_age = input("What is your age? ")
        my_urname = input("Please pick a username.. ")
        my_psword = input("Please pick a password.. ")

所以你也可以在函数之外使用那些变量。