You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:实现用户注册登录参与测验功能,需保存用户信息至文本文件

解决注册登录测验系统的文本存储问题

嘿,我看了你写的测验系统注册代码,确实有几个小坑需要填上,咱们一步步来搞定它!

现有代码的问题点

  • 文件覆盖问题:你用open("user_info.txt", "w")打开文件,这个模式会清空之前的内容重新写入,每次新用户注册都会把老用户的信息删掉,得换成追加模式"a"。
  • 写入数据类型错误:write()方法只接受字符串,你直接传数组array会抛出TypeError,得把用户信息转成格式化的字符串再写入。
  • 登录功能未完成:目前只获取了用户名输入,还没实现从文件读取信息并验证密码的逻辑。

修改后的完整代码示例

# Quiz which tests a student's knowledge
print("Welcome to my quiz!")
start = input("Do you need to register or sign in? ").strip().lower()  # 统一小写,避免大小写问题

if start == "register":
    name = input("What is your name? ").strip()
    age = input("What age are you? ").strip()
    year_group = input("What year of school are you in? ").strip()
    username = name[:3].lower() + age  # 转小写,避免用户名大小写不一致
    print(f"Your username is: {username}")
    password = input("Please input a password which you will remember: ").strip()
    
    # 用追加模式打开文件,每条用户信息占一行,字段用制表符分隔
    with open("user_info.txt", "a") as text_file:
        # 把信息转成字符串,换行保存
        user_data = "\t".join([name, age, year_group, username, password]) + "\n"
        text_file.write(user_data)
    print("Registration successful! You can now sign in.")

elif start == "sign in":
    user_entry = input("Please enter your username: ").strip().lower()
    password_entry = input("Please enter your password: ").strip()
    
    # 处理文件不存在的情况
    try:
        with open("user_info.txt", "r") as text_file:
            logged_in = False
            for line in text_file:
                # 拆分每行的用户数据
                data = line.strip().split("\t")
                if len(data) != 5:
                    continue  # 跳过格式错误的行
                stored_name, stored_age, stored_year, stored_user, stored_pwd = data
                if stored_user.lower() == user_entry and stored_pwd == password_entry:
                    print(f"Welcome back, {stored_name}! Let's start the quiz.")
                    logged_in = True
                    # 这里可以添加测验的逻辑
                    break
            if not logged_in:
                print("Invalid username or password, or you haven't registered yet.")
    except FileNotFoundError:
        print("No users registered yet! Please register first.")

else:
    print("Invalid input! Please enter 'register' or 'sign in'.")

关键改动说明

  • 文件模式:用"a"模式追加写入,保留所有用户信息;用with语句自动关闭文件,避免资源泄漏。
  • 数据格式化:用制表符\t分隔字段,换行保存,后续读取时可以轻松拆分每条用户信息。
  • 鲁棒性优化:添加了输入的strip()和大小写统一,避免因空格或大小写导致的匹配失败;处理了文件不存在的异常情况。
  • 登录验证:遍历文件中的每一行,对比用户名和密码,匹配成功后进入测验环节。

内容的提问来源于stack exchange,提问作者user9215216

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:29:59