无法将输入变量与 .txt 中的数据进行比较/无法读取文件来比较数据
Unable to compare input variable to data within a .txt / Unable to read file to compare data
目前我正在制作一个既可以登录又可以注册的程序,username/password 存储在一个单独的 .txt 文件中。
注册工作正常,用户名和密码写入没有问题,但我在 userRegister 和 userLogin[= 中读取文件时遇到问题11=]
.txt 文件的格式为 username,password 我想知道如何从文件中读取以比较 loginUsername 和 loginPassword 到 username_password 并将 registerUsername 与现有用户名进行比较以确保没有重复。
username_password = open("savedCredentials.txt", "r+")
option = ()
def startMenu():
option = input("Do you want to [login] or [register] an account?:")
if option == 'login':
return userLogin()
elif option == 'register':
return userRegister()
else:
print("Invalid input, enter either [login] or [register]")
return startMenu()
def userRegister():
registerUsername = input("Enter a username: ")
if registerUsername in username_password:
print("This username is already in use")
userRegister()
else:
registerPassword = input ("Enter a password: ")
if len(registerPassword) < 5:
print("Your password needs to contain 5 or more characters")
registerPassword()
elif " " in registerPassword:
print("Your password cannot contain spaces")
else:
register = open("savedCredentials.txt", "a")
register.write(registerUsername)
register.write(",")
register.write(registerPassword)
register.write("\n")
print("Your username and password have been successfully registered")
def userLogin():
loginUsername = input("Enter your username: ")
if loginUsername in username_password:
loginPassword = input("Enter your password: ")
if loginPassword in username_password:
successfulLogin()
else:
print("This username isn't registered to an account, please try again")
return userLogin()
def successfulLogin():
print("You have been logged in")
username_password.close()
几件事:
您没有在上面的代码中调用任何函数,因此 运行 不会像现在这样。
您不能迭代文本包装器,您可以通过 .read()
读取文件来解决这个问题
如果你在你的函数之外关闭()文件,你会得到一个文件已关闭的错误,而是在你的函数内关闭文件(当用户完成时)。
一旦您完成条件 if 搜索,就会发现 .read() 在第二轮不再起作用。不太清楚为什么(也许这里的其他人可以更详细地说明),但解决方法是将您的文件转换为列表,然后搜索该列表。
下面的工作,但它有点难看(我必须去知道,但想 post 这真的很快所以你至少有一个工作示例,并且可以基于它构建)。
username_password2=[]
with open("savedCredentials.txt", "r+") as file:
for lines in file:
a=lines.replace(',',' ')
b=a.split()
username_password2.append(b)
username_password = [x for y in username_password2 for x in y]
option = ()
def startMenu():
option = input("Do you want to [login] or [register] an account?:")
if option == 'login':
return userLogin()
elif option == 'register':
return userRegister()
else:
print("Invalid input, enter either [login] or [register]")
return startMenu()
def userRegister():
registerUsername = input("Enter a username: ")
if registerUsername in username_password:
print("This username is already in use")
userRegister()
else:
while True:
registerPassword = input ("Enter a password: ")
if len(registerPassword) < 5:
print("Your password needs to contain 5 or more characters")
elif " " in registerPassword:
print("Your password cannot contain spaces")
else:
register = open("savedCredentials.txt", "a")
register.write(registerUsername)
register.write(",")
register.write(registerPassword)
register.write("\n")
print("Your username and password have been successfully registered")
register.close()
break
def userLogin():
loginUsername = input("Enter your username: ")
if loginUsername in username_password:
loginPassword = input("Enter your password: ")
if loginPassword in username_password:
successfulLogin()
else:
print(username_password)
else:
print("This username isn't registered to an account, please try again")
return userLogin()
def successfulLogin():
print("You have been logged in")
startMenu()
您必须将 read
功能添加到您的文件打开。
替换行username_password = open("savedCredentials.txt", "r+")
来自
username_password = open("savedCredentials.txt", "r+").read()
然后你必须删除行 username_password.close()
此外,您需要调用 startMenu
函数,因此请在代码底部添加 startMenu()
。
目前我正在制作一个既可以登录又可以注册的程序,username/password 存储在一个单独的 .txt 文件中。 注册工作正常,用户名和密码写入没有问题,但我在 userRegister 和 userLogin[= 中读取文件时遇到问题11=]
.txt 文件的格式为 username,password 我想知道如何从文件中读取以比较 loginUsername 和 loginPassword 到 username_password 并将 registerUsername 与现有用户名进行比较以确保没有重复。
username_password = open("savedCredentials.txt", "r+")
option = ()
def startMenu():
option = input("Do you want to [login] or [register] an account?:")
if option == 'login':
return userLogin()
elif option == 'register':
return userRegister()
else:
print("Invalid input, enter either [login] or [register]")
return startMenu()
def userRegister():
registerUsername = input("Enter a username: ")
if registerUsername in username_password:
print("This username is already in use")
userRegister()
else:
registerPassword = input ("Enter a password: ")
if len(registerPassword) < 5:
print("Your password needs to contain 5 or more characters")
registerPassword()
elif " " in registerPassword:
print("Your password cannot contain spaces")
else:
register = open("savedCredentials.txt", "a")
register.write(registerUsername)
register.write(",")
register.write(registerPassword)
register.write("\n")
print("Your username and password have been successfully registered")
def userLogin():
loginUsername = input("Enter your username: ")
if loginUsername in username_password:
loginPassword = input("Enter your password: ")
if loginPassword in username_password:
successfulLogin()
else:
print("This username isn't registered to an account, please try again")
return userLogin()
def successfulLogin():
print("You have been logged in")
username_password.close()
几件事:
您没有在上面的代码中调用任何函数,因此 运行 不会像现在这样。
您不能迭代文本包装器,您可以通过 .read()
读取文件来解决这个问题如果你在你的函数之外关闭()文件,你会得到一个文件已关闭的错误,而是在你的函数内关闭文件(当用户完成时)。
一旦您完成条件 if 搜索,就会发现 .read() 在第二轮不再起作用。不太清楚为什么(也许这里的其他人可以更详细地说明),但解决方法是将您的文件转换为列表,然后搜索该列表。
下面的工作,但它有点难看(我必须去知道,但想 post 这真的很快所以你至少有一个工作示例,并且可以基于它构建)。
username_password2=[]
with open("savedCredentials.txt", "r+") as file:
for lines in file:
a=lines.replace(',',' ')
b=a.split()
username_password2.append(b)
username_password = [x for y in username_password2 for x in y]
option = ()
def startMenu():
option = input("Do you want to [login] or [register] an account?:")
if option == 'login':
return userLogin()
elif option == 'register':
return userRegister()
else:
print("Invalid input, enter either [login] or [register]")
return startMenu()
def userRegister():
registerUsername = input("Enter a username: ")
if registerUsername in username_password:
print("This username is already in use")
userRegister()
else:
while True:
registerPassword = input ("Enter a password: ")
if len(registerPassword) < 5:
print("Your password needs to contain 5 or more characters")
elif " " in registerPassword:
print("Your password cannot contain spaces")
else:
register = open("savedCredentials.txt", "a")
register.write(registerUsername)
register.write(",")
register.write(registerPassword)
register.write("\n")
print("Your username and password have been successfully registered")
register.close()
break
def userLogin():
loginUsername = input("Enter your username: ")
if loginUsername in username_password:
loginPassword = input("Enter your password: ")
if loginPassword in username_password:
successfulLogin()
else:
print(username_password)
else:
print("This username isn't registered to an account, please try again")
return userLogin()
def successfulLogin():
print("You have been logged in")
startMenu()
您必须将 read
功能添加到您的文件打开。
替换行username_password = open("savedCredentials.txt", "r+")
来自
username_password = open("savedCredentials.txt", "r+").read()
然后你必须删除行 username_password.close()
此外,您需要调用 startMenu
函数,因此请在代码底部添加 startMenu()
。