项目登录系统问题:输入账号密码无法与文件存储内容匹配
解决登录系统账号密码匹配失败的问题
嘿,我之前开发类似的文本存储登录系统时,也碰到过完全一样的坑!这种“用户名匹配正常、密码却始终不对”的情况,90%都是隐藏的空白字符或者字符编码问题在搞鬼——肉眼根本看不出来,但对比的时候就会出错。
下面是我当时排查和解决的步骤,你可以一步步试:
1. 先处理读取文件时的换行符问题
用readlines()或者直接遍历文件行的时候,每行末尾会自带换行符(\n或者Windows下的\r\n)。比如文件里写的是bob:abc123,实际读取到的内容可能是bob:abc123\n,用:分割后,密码就变成了abc123\n,和你输入的abc123自然匹配不上,但用户名bob是正常的,刚好符合你描述的现象。
解决方法很简单,读取每行后先调用strip()去掉首尾的空白字符(包括换行符、空格):
with open('accounts.txt', 'r', encoding='utf-8') as f: for line in f: # 去掉换行符和首尾空格,同时跳过空行 cleaned_line = line.strip() if not cleaned_line: continue # 分割用户名和密码 stored_user, stored_pwd = cleaned_line.split(':') # 再和输入的内容对比 if stored_user == input_user and stored_pwd == input_pwd: print("登录成功!") break else: print("登录失败!")
2. 检查分隔符是不是英文冒号
有时候不小心会输入中文冒号(:),看起来和英文冒号(:)差不多,但实际是完全不同的字符。你可以用repr()函数打印读取到的内容,就能看清真实的字符:
print(repr(stored_user), repr(stored_pwd))
如果输出里的冒号是':'(中文),那就是这个问题了,把文件里的分隔符改成英文冒号就行。
3. 对用户输入的内容也做清理
有时候用户输入时会不小心多打空格(比如密码末尾加了空格),这也会导致匹配失败。可以对输入的用户名和密码也做strip()处理:
input_user = input("请输入用户名:").strip() input_pwd = input("请输入密码:").strip()
按照这几步排查,应该就能解决你的问题了!
内容的提问来源于stack exchange,提问作者sean
相关产品推荐
相关产品推荐

