Python 登录帐户错误
我正在尝试建立一个基于文本的帐户系统。基本上,用户创建一个账户,并将信息保存到名为账户的字典中。每个帐户有两部分,用户名和密码。将信息保存到帐户字典时,它将保存为帐户[newusername]=newpassword。无论如何,我做的登录功能不起作用,我输入的任何东西都不起作用,它只是说我输入的东西是错误的 这是我的登录码:Python 登录帐户错误,python,Python,我正在尝试建立一个基于文本的帐户系统。基本上,用户创建一个账户,并将信息保存到名为账户的字典中。每个帐户有两部分,用户名和密码。将信息保存到帐户字典时,它将保存为帐户[newusername]=newpassword。无论如何,我做的登录功能不起作用,我输入的任何东西都不起作用,它只是说我输入的东西是错误的 这是我的登录码: def login(): username = "" password = "" print "\n------------------------
def login():
username = ""
password = ""
print "\n--------------------------------------------"
print "\n Would you like to login?"
yesorno = raw_input("\n Please enter YES or NO: ")
if yesorno.lower() == "no":
print "\n--------------------------------------------"
startup()
elif yesorno.lower() == "yes":
while username == "":
username = raw_input("\n Please enter your username: ")
while password == "":
password = raw_input("\n Please enter your password: ")
for usernames in accounts:
if username.lower() == usernames.lower():
for passwords in accounts.values():
if password == passwords:
print "\n Access Granted"
print "\n--------------------------------------------"
menu()
else:
pass
print "\n Access Denied"
print "\n Please try again"
login()
else:
pass
print "\n Access Denied"
print "\n Please try again"
login()
else:
login()
下面是我的完整代码:
import datetime
import time
import pickle
filesfile = "filesfiles"
accountfile = "accountsfiles"
accounts = {}
files = {}
accountsaver = open(accountfile,'r')
accounts = pickle.load(accountsaver)
accountsaver.close()
filesaver = open(filesfile,'r')
files = pickle.load(filesaver)
filesaver.close()
def startup():
accountsaver = open(accountfile,'wb')
pickle.dump(accounts, accountsaver)
accountsaver.close()
print "\n ------------------- "
print " FILE SYSTEM MANAGER "
print " ------------------- "
print "\n To login type in: LOGIN"
print " To create a new account type in: ACCOUNT"
loginornew = raw_input("\n Please enter LOGIN or ACCOUNT: ")
if loginornew.lower() == "login":
login()
elif loginornew.lower() == "account":
newaccount()
else:
startup()
def newaccount():
newusername = ""
newpassword = ""
newpasswordagain = ""
print "\n--------------------------------------------"
print "\n Would you like to create a new account?"
yesorno = raw_input("\n Please enter YES or NO: ")
if yesorno.lower() == "no":
print "\n--------------------------------------------"
startup()
elif yesorno.lower() == "yes":
while newusername == "":
newusername = raw_input("\n Please enter a username for your account: ")
while newpassword == "":
newpassword = raw_input(" Please enter a password for your account: ")
while newpasswordagain == "":
newpasswordagain = raw_input(" Please confirm the password for your account: ")
if newpassword == newpasswordagain:
for username in accounts:
if username.lower() == newusername.lower():
print "\n Username already exists"
print " Please try again"
newaccount()
else:
pass
accounts[newusername] = newpassword
print "\n Account Created"
print "\n--------------------------------------------"
startup()
else:
print "\n Passwords do not match"
print " Please try again"
newaccount()
else:
newaccount()
def login():
username = ""
password = ""
print "\n--------------------------------------------"
print "\n Would you like to login?"
yesorno = raw_input("\n Please enter YES or NO: ")
if yesorno.lower() == "no":
print "\n--------------------------------------------"
startup()
elif yesorno.lower() == "yes":
while username == "":
username = raw_input("\n Please enter your username: ")
while password == "":
password = raw_input("\n Please enter your password: ")
for usernames in accounts:
if username.lower() == usernames.lower():
for passwords in accounts.values():
if password == passwords:
print "\n Access Granted"
print "\n--------------------------------------------"
menu()
else:
pass
print "\n Access Denied"
print "\n Please try again"
login()
else:
pass
print "\n Access Denied"
print "\n Please try again"
login()
else:
login()
在python中,每个函数都有自己的名称表,这基本上意味着在函数完成后,任何变量的任何更改都将丢失。如果要更改所谓的全局变量(全局命名空间中的变量,函数外部的变量)而不是局部变量(例如函数命名空间中的变量),首先必须将其声明为全局变量:
def foo():
global accounts
accounts = "whatever"
这是主要问题。但您的代码仍然无法正常工作:按照您的操作方式,用户名和密码不必匹配,只需在您的帐户中记录,在任何位置:
for usernames in accounts: #Iteration over all usernames
if username.lower() == usernames.lower():
for passwords in accounts.values(): #Iteration over all passwords
if password == passwords:
print "\n Access Granted"
print "\n--------------------------------------------"
menu()
你最好这样解决:
for account in accounts.items():
if account[0] == username and account[1] == password:
print "\n Access Granted!!!"
还有一个问题:(函数:newaccount())
要执行的操作:重新启动函数。但是在这里,您正在重新启动已经运行的函数中的函数。在#[1]成功完成后,您的程序将在#[1]之后的行继续,并更改已存在用户的密码。(这不应该,是吗?)
要解决此问题,只需在else部分中插入正确的代码,并在函数的另一个实例正在执行作业时中断for循环:
for username in accounts:
if username.lower() == newusername.lower():
print "\n Username already exists"
print " Please try again"
newaccount()
break #!!!
else: #!!
accounts[newusername] = newpassword
print "\n Account Created"
print "\n--------------------------------------------"
startup()
…希望我的意思很清楚
for username in accounts:
if username.lower() == newusername.lower():
print "\n Username already exists"
print " Please try again"
newaccount()
break #!!!
else: #!!
accounts[newusername] = newpassword
print "\n Account Created"
print "\n--------------------------------------------"
startup()