我错过了什么?

时间:2019-06-25 11:14:13

标签: python variables global local

我正在尝试自学Python,并正在通过在线一些教程进行学习。我创建了一个基本程序,要求您输入名称和密码(存​​储为变量)。然后,它要求您重新输入它们,以及它们是否与打印的图像相匹配。

我已经定义了一些带有全局变量的函数。但是,如果我#发出全局声明,则我的程序仍然可以运行。从我读过的内容来看,在函数内部未声明为全局的变量应该是局部的。因此,使用全局声明#我的程序不起作用。但是确实如此。我错过了什么?

import sys

#password = ""
#name = ""
#inputName = ""
#inputPassword = ""
#accountAnswer = ""

def username():
    #global inputName
    print("What is your name?")
    inputName = input()
    while name != inputName:
        print("Sorry, you are not a registered user.")
        print("What is your name?")
        inputName = input()
    #return

def pwrd():
    #global inputPassword
    print("Please enter your password:")
    inputPassword = input()
    while inputPassword != password:
        print("Sorry, incorrect Password:")
        print("Please re-enter your password:")
        inputPassword = input()
        continue
    #return


print("Hi there, would you like to create an account? (y/n)")


while True:
    accountAnswer = input()
    if accountAnswer == "y":
        break
    if accountAnswer == "n":
        break
    print("That was an incorrect response")
    print("Would you like to create an account? (y/n)")


if accountAnswer == "y":
    print("Great! Let's get you set up.")
else:
    print("OK, no worries.")
    sys.exit()

print("Choose a username")
name = input()

print("Now choose a password.")
password = input()

print("let's try logging in.")

username()

pwrd()

print("Access Granted")

print(name, password)

1 个答案:

答案 0 :(得分:0)

您应该熟悉的是范围。您可以在线找到很多有关它的信息,但是在短期内可以看到您的变量。 因此,在您的示例中,让我们尝试遵循解释器在输入函数时所执行的步骤。

用户名()

  1. 打印文字
  2. input()中的值分配给名为inputName的变量。请注意,变量是否存在之前没有关系。如果没有,解释器将创建它。
  3. 进入while循环。
  4. 检查名为name的变量是否等于inputName。解释器在当前 scope 中看不到变量name,因此它试图将其高出一级,这就是您的主要脚本。它找到该变量,因此使用该变量(您在第51行中声明了该变量)。

我希望您在这里理解主要概念。但是,不应将其用作默认方法。创建带参数的函数比使用全局变量或更高范围更好。

最后有一个小纸条。我建议您尝试使用PyCharm之类的编辑器。它会警告您这种情况。它还可以帮助您更好地遵循以下代码样式规则(称为PEP8的文档),其中包括如何命名变量,放置位置以及有多少空格等。这听起来暂时不需要,但是它将为您节省很多以后改变习惯。

祝你好运!