ATM登录系统多用户登录后重复打印异常问题求助
ATM登录问题:第二个用户登录时同时显示「Invalid login」
问题背景
我有一个用户信息文本文件,格式如下:
jack carruthers/2006 150 oliver daniels/0000 10
用户需输入「姓名/Pin」格式内容登录,登录成功后可执行各类操作,数字为用户余额。添加第二个用户前无异常,但登录第二个用户时,虽能正常打印余额,却同时输出「Invalid login」,尝试多种文件读取方式均未解决。
我的代码
# Jack Carruthers # ATM file_path = "user_inf.txt" def login(): global line_num # 全局化行号,用于后续读取/修改用户余额 info = input("Enter login in format:\n Name/Pin \n") with open(r"C:\T-Level Digital Production\Library\atm_1\atm_1\user_inf.txt", "r") as fp: # 用户信息文件路径 for line_num, line in enumerate(fp): # 将line_num与文件行号绑定 if (info) in line: # 如果用户输入内容存在于当前行 print("Login successful\n") main() # 登录成功后运行主程序 balance() break # 跳出循环避免输出无效登录提示 else: print("Invalid login, please try again") def balance(): with open(r"C:\T-Level Digital Production\Library\atm_1\atm_1\user_inf.txt", "r") as fp: lines = fp.readlines() global balances balances = lines[line_num + 1].strip() # 读取余额所在行 print("Your balance is:\n") print(balances, "GBP") def withdraw(): pass def deposit(): pass def end(): pass def main(): pass login()
问题现象
登录第二个用户时,余额能正常打印,但同时弹出「Invalid login」提示。
问题原因
login函数的循环逻辑有问题:遍历文件每一行时,只要当前行不匹配输入内容,就立刻打印错误提示。比如登录oliver daniels/0000时,循环先读到第一行jack carruthers/2006,不匹配就输出错误;接着读到空行,还是不匹配又输出一次;直到读到第三行匹配才执行登录成功逻辑,但之前的错误提示已经输出了。
修复方法
修改login函数,先遍历完所有行确认无匹配项后,再输出错误提示:
def login(): global line_num info = input("Enter login in format:\n Name/Pin \n") found = False # 标记是否找到匹配用户 with open(r"C:\T-Level Digital Production\Library\atm_1\atm_1\user_inf.txt", "r") as fp: for line_num, line in enumerate(fp): # 两边去除空白字符,避免换行、空格影响匹配 if info.strip() in line.strip(): print("Login successful\n") main() balance() found = True break # 循环结束后统一判断是否登录失败 if not found: print("Invalid login, please try again")
额外优化建议
- 匹配时使用
strip()去除输入和文件行的空白字符,避免因换行、空格导致匹配失败; - 目前
main()函数为空,调用无实际作用,可考虑移除或补充功能逻辑。
内容的提问来源于stack exchange,提问作者Jack Carruthers
相关产品推荐
相关产品推荐

