Python登录注册功能异常:始终提示‘Incorrect login or password’
Python登录注册功能异常:始终提示‘Incorrect login or password’
嘿,我仔细看了你的代码,发现几个关键问题导致登录一直失败,咱们一步步拆解解决:
1. 文件指针位置搞反了
你用a+模式打开login.txt和passw.txt的时候,文件指针默认停在文件末尾。这时候直接调用login.read(),根本读不到之前注册的内容(从末尾开始读,啥也没有),自然就会判断成“账号或密码错误”。
解决办法:登录时打开文件后,先调用seek(0)把指针移到文件开头,再读取内容。
2. 注册内容没分隔,信息全乱套
现在注册时直接把登录名和密码写入文件,比如第一个用户注册alice和1234,文件里就是alice和1234;如果再注册bob,文件会变成alicebob和12345678,完全没法区分不同用户的信息,登录时自然匹配不上。
解决办法:注册时给每个登录名和密码加个换行符\n,让每个用户的信息单独占一行,方便后续读取匹配。
3. 文件关闭方式不够稳妥
你手动调用close()的方式很容易出问题,比如代码执行到一半报错,文件可能就没关上。推荐用Python的with语句,它会自动帮你管理文件的打开和关闭,省心又安全。
修改后的完整代码
state = 0 print("What do you want to do?") print("1. Log in") print("2. Register") dec = int(input()) if dec == 1: # 用with自动管理文件,先把指针移到开头再读 with open("login.txt", "a+") as login, open("passw.txt", "a+") as passw: login.seek(0) passw.seek(0) print("Enter your login:") log = input().strip() print("Enter your password:") pas = input().strip() # 读取所有已注册的账号密码(按行处理) logins = [line.strip() for line in login.readlines()] passwords = [line.strip() for line in passw.readlines()] # 检查输入的账号密码是否匹配 if log in logins and pas in passwords and logins.index(log) == passwords.index(pas): print("You are logged in") state = 1 else: print("Incorrect login or password") state = 0 elif dec == 2: with open("login.txt", "a") as login, open("passw.txt", "a") as passw: print("Enter your login:") log = input().strip() print("Enter your password:") pas = input().strip() # 加换行符分隔每个用户的信息 login.write(log + "\n") passw.write(pas + "\n") print("You are registered") state = 1 if state == 1: print("What do you want to do?") print("1. Read the file") print("2. Write to the file") print("3. Log out") dec = int(input()) if dec == 1: with open("supasecret.txt", "r") as file: print(file.read()) elif dec == 2: # 修正了原代码里的文件名拼写错误:supasceret → supasecret with open("supasecret.txt", "a+") as file: print("Enter the text:") text = input() file.write(text + "\n") # 加换行符避免内容挤在一起 elif dec == 3: state = 0 print("You are logged out")
额外提个小细节
你原代码里读取和写入的文件名不一致(supasceret.txt和supasecret.txt),我已经在修改后的代码里统一成supasecret.txt了,避免后续操作文件时找不到内容。
现在你再试试注册新账号然后登录,应该就能正常进入后续的文件操作环节啦!
备注:内容来源于stack exchange,提问作者KosteQ
相关产品推荐
相关产品推荐

