Python 3.x 正在尝试打开.txt文件并检查用户名是否存在
我正在使用Python3.5为类编写一个用户名/密码程序,除了这一部分之外,一切都很好。代码应该打开.txt文件(如果不存在,则创建一个),然后检查您输入的用户名是否已经在文件中。目前,它似乎正在读取一个空白列表(“[]”),基本上看不到任何要检查的内容,因此它接受用户名,尽管您在Windows文件浏览器中打开它时,它确实存在于文件中 下面是用户名函数的外观:Python 3.x 正在尝试打开.txt文件并检查用户名是否存在,python-3.x,Python 3.x,我正在使用Python3.5为类编写一个用户名/密码程序,除了这一部分之外,一切都很好。代码应该打开.txt文件(如果不存在,则创建一个),然后检查您输入的用户名是否已经在文件中。目前,它似乎正在读取一个空白列表(“[]”),基本上看不到任何要检查的内容,因此它接受用户名,尽管您在Windows文件浏览器中打开它时,它确实存在于文件中 下面是用户名函数的外观: def registerNewUsername(): checker = 0 while(checker == 0):
def registerNewUsername():
checker = 0
while(checker == 0):
usernameInput = input("Please enter a username.\n")
usernameInput.strip()
usernameExists = False
try:
f = open("loginInfo.txt", "a+")
userDataEntry = f.readlines()
f.close()
except:
print("Something went wrong!")
listLines = []
for eachLine in listLines:
entry = eachLine.split()
keep = entry[0]
listLines.append(keep)
print(listLines)
if(usernameInput in userDataEntry):
print("This username already exists. Try again.\n")
usernameExists = True
checker = 0
if("@" in usernameInput and ".edu" in usernameInput and usernameExists == False):
print("\nUsername Accepted\n")
checker = 1
else:
print("You need to include @ and .edu in your username. Try again.\n")
checker = 0
return usernameInput
def saveData(passwordInput, usernameInput):
userDataEntry = usernameInput + " " + passwordInput + "\n"
fileObject = open('loginInfo.txt', 'a')
fileObject.write(userDataEntry)
fileObject.close()
以下是创建用户/通行证列表的功能(用户名和密码获得批准后):
def registerNewUsername():
checker = 0
while(checker == 0):
usernameInput = input("Please enter a username.\n")
usernameInput.strip()
usernameExists = False
try:
f = open("loginInfo.txt", "a+")
userDataEntry = f.readlines()
f.close()
except:
print("Something went wrong!")
listLines = []
for eachLine in listLines:
entry = eachLine.split()
keep = entry[0]
listLines.append(keep)
print(listLines)
if(usernameInput in userDataEntry):
print("This username already exists. Try again.\n")
usernameExists = True
checker = 0
if("@" in usernameInput and ".edu" in usernameInput and usernameExists == False):
print("\nUsername Accepted\n")
checker = 1
else:
print("You need to include @ and .edu in your username. Try again.\n")
checker = 0
return usernameInput
def saveData(passwordInput, usernameInput):
userDataEntry = usernameInput + " " + passwordInput + "\n"
fileObject = open('loginInfo.txt', 'a')
fileObject.write(userDataEntry)
fileObject.close()
但是,登录功能确实可以读取列表,并且可以使用其中的数据,因此该功能中可能缺少一些内容?
def loginExisting():
userDataEntry = open('loginInfo.txt', 'r')
listLines = userDataEntry.readlines()
userDataEntry.close()
userDict = {}
for eachLine in listLines:
entry = eachLine.split()
username = entry[0]
password = entry[1]
userDict[username] = password
checker = 0
while(checker == 0):
print("\nYou've registered already? (OwO) Okay then!\n")
usernameInput = input("Please enter your username:")
passwordInput = input("Please enter your password:")
if(usernameInput in userDict):
if(userDict[usernameInput] == passwordInput):
print("\nLogin successful!\nWelcome back,", usernameInput)
checker = 1
else:
print("Password is incorrect. Try again.")
checker = 0
else:
print("Username does not exist. Try again.")
checker = 0
nextStep = int(input("\nWould you like to:\n1.) Exit\n2.) Log out and return to menu\n\n"))
if(nextStep == 1):
print("\nGoodbye!")
if(nextStep == 2):
print("\nReturning to menu...\n")
return nextStep
非常感谢您的帮助 这可能是因为在
registerNewUsername
函数中,您运行usernameInput.strip()
而不将其分配给任何对象。如果不将结果赋回变量或其他变量,则不会发生任何事情。再次尝试运行它,将usernameInput.strip()
行更改为usernameInput=usernameInput.strip()
,这可能是因为在registerNewUsername
函数中,您运行usernameInput.strip()
,而不将其分配给任何对象。如果不将结果赋回变量或其他变量,则不会发生任何事情。再次尝试运行它,将usernameInput.strip()
行更改为usernameInput=usernameInput.strip()
您能进一步说明什么不起作用吗?你期望的输出是什么,你得到了什么?它会崩溃吗?基本上,代码只需要验证用户名不在文件中,然后继续。print语句只是检查它是否正确地打开和读取了txt文件。现在它打印一个空列表,但txt文件包含“username@blah.edu密码3“(带空格)。如果我尝试输入相同的用户名,它将接受该用户名,而不是采用“此用户名已存在。请重试。\n”路由重新启动用户名注册过程。这有意义吗?你能再澄清一下什么不起作用吗?你期望的输出是什么,你得到了什么?它会崩溃吗?基本上,代码只需要验证用户名不在文件中,然后继续。print语句只是检查它是否正确地打开和读取了txt文件。现在它打印一个空列表,但txt文件包含“username@blah.edu密码3“(带空格)。如果我尝试输入相同的用户名,它将接受该用户名,而不是采用“此用户名已存在。请重试。\n”路由重新启动用户名注册过程。这有意义吗?