我的Python登录程序无法将文本文件中的单独行与用户的输入进行比较。
我的Python登录程序无法将文本文件中的单独行与用户的输入进行比较。
我希望我的登录程序能够从用户那里获取用户名和密码输入,然后检查它是否与文件中的用户名和密码相同。然而,代码不起作用,我觉得我漏掉了一些东西:
def login(): with open("username.txt","r") as username: usrn_read = username.read() username.close() with open("password.txt","r") as password: passw_read = password.read() password.close() inp_usern = input("Username: ") inp_passw = input("Password: ") if inp_usern==usrn_read and inp_passw==passw_read: print("登录成功!") variable.open("database.txt","a") variable.write("成功登录的用户名: "+inp_usern) variable.write("密码: "+inp_passw) print("你的用户名和密码是:") print(inp_usern) print(inp_passw) forward() else: print("无效的输入。请重试。") inp_usern = [] inp_passw = [] login() def end(): print("谢谢!") def forward(): print("这将继续进行问答!") login()
任何帮助将不胜感激!
用户名文件:
bob12
alexi90
john08
更新:
使用下面的代码它可以工作,但只能读取文本文件的第一行:
def login(): username = open("username.txt","r") usrn_read = username.readline().replace('\n', '') username.close() password = open("password.txt","r") passw_read = password.readline().replace('\n', '') username.close() inp_usern = input("用户名:") inp_passw = input("密码:") if inp_usern==usrn_read and inp_passw==passw_read: print("登录成功!") variable = open("database.txt","a") variable.write("\n成功登录的用户名: "+inp_usern) variable.write(" 密码: "+inp_passw) print("你的用户名和密码是:") print(inp_usern) print(inp_passw) forward() else: print("无效的输入。请重试。") inp_usern = [] inp_passw = [] login() def forward(): print("这将继续进行问答!") login()
以下是文件(第一个是用户名,第二个是密码,它们是单独的文件):
bob12
alexi90
bob00
alexi00
现在它可以将第一行与文件的其他行分开读取,那么如何使其能够分别读取其他行呢?谢谢!
问题的出现原因:使用了Python 2.7版本,但在代码中使用了raw_input()函数。此外,变量"variable"需要先进行赋值。
解决方法:将raw_input()函数更改为input()函数,或者升级到Python 3.x版本。同时,对变量"variable"进行赋值操作。
以下是修正后的代码:
def login(): with open("username.txt","r") as username: usrn_read = username.read() username.close() with open("password.txt","r") as password: passw_read = password.read() password.close() inp_usern = input("Username: ") inp_passw = input("Password: ") if inp_usern==usrn_read and inp_passw==passw_read: print("Succesful!") variable = open("database.txt","a") variable.write("Login succesful for: "+inp_usern) variable.write("Password: "+inp_passw) print("Your username and password is:") print(inp_usern) print(inp_passw) forward() else: print("Not valid input. Please try again.") inp_usern = [] inp_passw = [] login() def end(): print("Thankyou!") def forward(): print("This would continue to quiz!") login()
感谢提供的解答,原问题已得到解决。
问题的原因是使用了错误的输入函数input
,应该使用raw_input
函数。此外,如果输入文件中包含换行符\n
,读取文件时会将换行符一同读入,导致与用户输入不匹配。解决方法是使用strip("\n")
函数将换行符从字符串中去除。
具体解决方法如下:
首先,将input
函数改为raw_input
函数,详细原因可参考https://stackoverflow.com/a/4960216/4765841。
其次,读取文件时使用strip("\n")
函数去除换行符,确保与用户输入匹配。
整体代码如下:
def login(): with open("username.txt","r") as username: usrn_read = username.read().strip("\n") username.close() with open("password.txt","r") as password: passw_read = password.read().strip("\n") password.close() inp_usern = raw_input("Username: ") inp_passw = raw_input("Password: ") if inp_usern==usrn_read and inp_passw==passw_read: print("Succesful!") variable.open("database.txt","a") variable.write("Login succesful for: "+inp_usern) variable.write("Password: "+inp_passw) print("Your username and password is:") print(inp_usern) print(inp_passw) forward() else: print("Not valid input. Please try again.") inp_usern = [] inp_passw = [] login() def end(): print("Thankyou!") def forward(): print("This would continue to quiz!") login()
另外,假设variable.open
是有效的,如果无效,则需要将variable.open
改为with open("database.txt","a") as variable
。
以上就是解决此问题的原因和方法,希望能对您有所帮助。
问题出现的原因:代码中使用了上下文管理器(context manager)来打开文件,而没有使用正确的语法来读取文件的内容。因此,程序无法将文本文件的每行内容与用户输入进行比较。
解决方法:删除代码中的两个file.close()语句,这样就不需要手动关闭文件了。同时,使用正确的语法来读取文件的内容,以便将每行内容与用户输入进行比较。
修改后的代码如下:
with open("file1.txt", "r") as filename: for line in filename: # 进行每行内容的比较 if line.strip() == user_input: # 执行相应的操作 Your actions
这样,程序就能正确地将文本文件的每行内容与用户输入进行比较,从而解决了问题。同时,使用上下文管理器打开文件也不需要手动关闭文件,代码更加简洁和安全。