我正在尝试自学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)
答案 0 :(得分:0)
您应该熟悉的是范围。您可以在线找到很多有关它的信息,但是在短期内可以看到您的变量。 因此,在您的示例中,让我们尝试遵循解释器在输入函数时所执行的步骤。
用户名()
input()
中的值分配给名为inputName
的变量。请注意,变量是否存在之前没有关系。如果没有,解释器将创建它。while
循环。name
的变量是否等于inputName
。解释器在当前 scope 中看不到变量name
,因此它试图将其高出一级,这就是您的主要脚本。它找到该变量,因此使用该变量(您在第51行中声明了该变量)。我希望您在这里理解主要概念。但是,不应将其用作默认方法。创建带参数的函数比使用全局变量或更高范围更好。
最后有一个小纸条。我建议您尝试使用PyCharm之类的编辑器。它会警告您这种情况。它还可以帮助您更好地遵循以下代码样式规则(称为PEP8的文档),其中包括如何命名变量,放置位置以及有多少空格等。这听起来暂时不需要,但是它将为您节省很多以后改变习惯。
祝你好运!