鱼C论坛

 找回密码
 立即注册
查看: 2371|回复: 11

注册功能和登录功能实现有问题

[复制链接]
发表于 2023-8-3 15:17:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
大佬们,可以帮我改一段代码吗?python课后作业是实现一个注册功能和登录功能。还有两点要求
1.账号里面是否存在非法字符
2.有没有存在的用户名
具体问题我在代码注释中写了
  1. # coding:utf-8
  2. # @Author:星空日记

  3. # #注册功能
  4. illegal_str=['`','`','!','@','#','$','%','^','&','*','(',')']
  5. list_username = []
  6. list_password = []
  7. index_username = 0

  8. print('开始注册账号'.center(20,'-'))
  9. username = input('请输入账号>>>').strip()
  10. password = input('请输入密码>>>').strip()


  11. #用户名是否已被注册
  12. with open('data/user_data.txt',mode='rt',encoding='utf-8') as f :
  13.     #想在这里做两个账号和密码分开的列表,但是报错了,不知道怎么修改
  14.     for line in f:
  15.         data_username,data_password = line.strip().split('---')
  16.         list_username.append(data_username)
  17.         list_password.append(data_password)
  18.     for line in f:
  19.         if username in list_username:
  20.             pass
  21.         else:
  22.             print('用户名已被注册')
  23.             break

  24.     # #判断账号是否有非法字符
  25.     else:
  26.         for line1 in username:
  27.             if line1 not in illegal_str:
  28.                 pass
  29.             else:
  30.                 print('用户名存在非法字符')
  31.                 break
  32.         else:
  33.             with open('data/user_data.txt', mode='at', encoding='utf-8') as f1:
  34.                 res1 = f1.write(f'{username}---{password}')

  35. print(list_password)
  36. print(list_username)
  37. #登录功能
  38. print('开始登录账号'.center(20,'-'))
  39. input_username = input('请输入账号>>>').strip()
  40. input_password = input('请输入密码>>>').strip()

  41. for line2 in list_username:
  42.     if line2 == input_username:
  43.         index_username = list_username.index(line2)
  44.         if input_password == list_password[index_username]:
  45.             print('登陆成功')
  46.             break
  47.         else:
  48.             print('账号或密码错误')
  49.             break
  50. else:
  51.     print('账号或密码错误')
复制代码

user_data.txt
d13423523---123456
fly---111
li---666
jay---333fly---66
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-8-3 15:17:32 | 显示全部楼层
根据你提供的代码,我注意到其中存在一些问题。以下是对你的代码进行修改和优化的建议:
  1. # coding:utf-8
  2. # @Author:星空日记
  3. illegal_str = ['`', '~', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')']
  4. list_username = []
  5. list_password = []
  6. print('开始注册账号'.center(20, '-'))
  7. username = input('请输入账号>>>').strip()
  8. password = input('请输入密码>>>').strip()
  9. # 判断用户名是否已被注册
  10. with open('data/user_data.txt', mode='rt', encoding='utf-8') as f:
  11.     for line in f:
  12.         data_username, data_password = line.strip().split('---')
  13.         list_username.append(data_username)
  14.         list_password.append(data_password)
  15. if username in list_username:
  16.     print('用户名已被注册')
  17. else:
  18.     # 判断账号是否有非法字符
  19.     for char in username:
  20.         if char in illegal_str:
  21.             print('用户名存在非法字符')
  22.             break
  23.     else:
  24.         with open('data/user_data.txt', mode='at', encoding='utf-8') as f1:
  25.             res1 = f1.write(f'{username}---{password}')
  26. print(list_password)
  27. print(list_username)
  28. # 登录功能
  29. print('开始登录账号'.center(20, '-'))
  30. input_username = input('请输入账号>>>').strip()
  31. input_password = input('请输入密码>>>').strip()
  32. for i, name in enumerate(list_username):
  33.     if name == input_username:
  34.         if input_password == list_password[i]:
  35.             print('登录成功')
  36.             break
  37.         else:
  38.             print('账号或密码错误')
  39.             break
  40. else:
  41.     print('账号或密码错误')
复制代码

对于账号是否存在非法字符的判断,我修改了变量名,使用了更加直观的char表示每个字符,并对username中的每个字符进行检查。如果存在非法字符,会按要求输出提示信息。

在用户名是否已被注册的判断中,我修改了for循环的逻辑。首先遍历文件中的用户名和密码,将它们分别存储在list_usernamelist_password列表中。然后,如果输入的用户名存在于list_username中,即表示用户名已被注册。

在登录功能中,我使用enumerate()函数获取到索引i和对应的用户名name,然后逐一比较输入的用户名和密码与列表中的对应项。如果找到匹配的用户名和密码,即表示登录成功。

希望这些修改能够帮助你完成注册功能和登录功能的实现。如果有任何问题,请随时提问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-3 15:17:35 | 显示全部楼层
当涉及到问题解决时,这段代码有几个地方需要进行改进。以下是针对你提供的代码的修改建议:

  1. # coding:utf-8
  2. # @Author:星空日记

  3. # 注册功能
  4. illegal_str = [' ', '~', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')']
  5. list_username = []
  6. list_password = []

  7. print('开始注册账号'.center(20, '-'))
  8. username = input('请输入账号>>>').strip()
  9. password = input('请输入密码>>>').strip()

  10. # 用户名是否已被注册
  11. with open('data/user_data.txt', mode='rt', encoding='utf-8') as f:
  12.     for line in f:
  13.         data_username, data_password = line.strip().split('---')
  14.         list_username.append(data_username)
  15.         list_password.append(data_password)

  16. if username in list_username:
  17.     print('用户名已被注册')
  18. elif any(char in illegal_str for char in username):
  19.     print('用户名存在非法字符')
  20. else:
  21.     with open('data/user_data.txt', mode='at', encoding='utf-8') as f1:
  22.         f1.write(f'{username}---{password}\n')

  23. # 登录功能
  24. print('开始登录账号'.center(20, '-'))
  25. input_username = input('请输入账号>>>').strip()
  26. input_password = input('请输入密码>>>').strip()

  27. if input_username in list_username:
  28.     index_username = list_username.index(input_username)
  29.     if input_password == list_password[index_username]:
  30.         print('登陆成功')
  31.     else:
  32.         print('账号或密码错误')
  33. else:
  34.     print('账号或密码错误')
复制代码


上述修改主要包括以下几个方面:

1. 注册功能中,对非法字符的判断使用了  any()  函数来检查用户名是否包含非法字符。
2. 在读取文件时,将用户名和密码分别存储到  list_username  和  list_password  列表中,以便后续比较。
3. 登录功能中,直接使用  input_username  在  list_username` 中查找,无需遍历整个列表。
4. 确保注册信息和登录信息在文件中都以换行符结尾,以便每个记录单独占据一行。

这些修改应该能够使你的代码更加稳定地实现注册和登录功能,同时考虑了用户名非法字符和用户名已注册的情况。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-3 15:17:37 | 显示全部楼层
首先,根据你提供的代码和要求,我帮你进行了一些修改。请注意以下几点:

- 代码注释和字符串前面的"#"符号之间需要有一个空格。
- 建议将非法字符的列表从全局变量移动到循环内部。这样可以在每次循环时重新初始化,以避免问题。
- 注册功能的用户名是否已被注册的判断部分存在逻辑错误,请参考下方的修改示例。
- 登录功能需要在读取用户数据后关闭文件。
  1. # coding:utf-8
  2. # @Author: 星空日记
  3. # 注册功能
  4. illegal_str = ['[color=Red][b]', '[/b][/color]', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')']
  5. list_username = []
  6. list_password = []
  7. print('开始注册账号'.center(20, '-'))
  8. username = input('请输入账号>>>').strip()
  9. password = input('请输入密码>>>').strip()
  10. with open('data/user_data.txt', mode='rt', encoding='utf-8') as f:
  11.     for line in f:
  12.         data_username, data_password = line.strip().split('---')
  13.         list_username.append(data_username)
  14.         list_password.append(data_password)
  15. # 判断账号是否已被注册
  16. if username in list_username:
  17.     print('用户名已被注册')
  18. else:
  19.     # 判断账号是否有非法字符
  20.     for char in username:
  21.         if char in illegal_str:
  22.             print('用户名存在非法字符')
  23.             break
  24.     else:
  25.         with open('data/user_data.txt', mode='at', encoding='utf-8') as f1:
  26.             res1 = f1.write(f'{username}---{password}')
  27. print(list_password)
  28. print(list_username)
  29. # 登录功能
  30. print('开始登录账号'.center(20, '-'))
  31. input_username = input('请输入账号>>>').strip()
  32. input_password = input('请输入密码>>>').strip()
  33. for line2 in list_username:
  34.     if line2 == input_username:
  35.         index_username = list_username.index(line2)
  36.         if input_password == list_password[index_username]:
  37.             print('登陆成功')
  38.             break
  39.         else:
  40.             print('账号或密码错误')
  41.             break
  42. else:
  43.     print('账号或密码错误')
复制代码

此外,请确认user_data.txt文件中的内容是否按照以下格式进行存储:

[/code]
d13423523---123456
fly---111
li---666
jay---333
fly---66
[/code]

如果还有其他问题,请随时提问。

如果回答对你有帮助,请给我一个最佳答案!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-3 15:18:42 | 显示全部楼层
给我最佳答案呗!求你了!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-3 15:19:57 | 显示全部楼层
我也来求求吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-3 15:20:53 | 显示全部楼层
本帖最后由 Mike_python小 于 2023-8-3 12:22 编辑

啊?(楼上和楼上上)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-3 15:26:48 | 显示全部楼层
Mike_python小 发表于 2023-8-3 15:20
啊?(楼上和楼上上)

我是被ben逼的,只能同流合污了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-3 16:16:52 | 显示全部楼层
有修改后的代码吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-3 16:27:15 | 显示全部楼层
追光THO 发表于 2023-8-3 13:16
有修改后的代码吗


  1. # coding:utf-8
  2. # @Author:星空日记

  3. illegal_str = ['`', '~', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')']
  4. list_username = []
  5. list_password = []

  6. print('开始注册账号'.center(20, '-'))
  7. username = input('请输入账号>>>').strip()
  8. password = input('请输入密码>>>').strip()

  9. # 判断用户名是否已被注册
  10. with open('data/user_data.txt', mode='rt', encoding='utf-8') as f:
  11.     for line in f:
  12.         data_username, data_password = line.strip().split('---')
  13.         list_username.append(data_username)
  14.         list_password.append(data_password)

  15. if username in list_username:
  16.     print('用户名已被注册')
  17. else:
  18.     # 判断账号是否有非法字符
  19.     for char in username:
  20.         if char in illegal_str:
  21.             print('用户名存在非法字符')
  22.             break
  23.     else:
  24.         with open('data/user_data.txt', mode='at', encoding='utf-8') as f1:
  25.             res1 = f1.write(f'{username}---{password}')

  26. print(list_password)
  27. print(list_username)

  28. # 登录功能
  29. print('开始登录账号'.center(20, '-'))
  30. input_username = input('请输入账号>>>').strip()
  31. input_password = input('请输入密码>>>').strip()

  32. for i, name in enumerate(list_username):
  33.     if name == input_username:
  34.         if input_password == list_password[i]:
  35.             print('登录成功')
  36.             break
  37.         else:
  38.             print('账号或密码错误')
  39.             break
  40. else:
  41.     print('账号或密码错误')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-3 21:25:31 | 显示全部楼层
下面是修改后的代码,解决了你提出的问题:
  1. illegal_str = ['`', '`', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')']
  2. list_username = []
  3. list_password = []

  4. print('开始注册账号'.center(20, '-'))
  5. username = input('请输入账号>>>').strip()
  6. password = input('请输入密码>>>').strip()

  7. # 判断账号是否有非法字符
  8. for char in username:
  9.     if char in illegal_str:
  10.         print('用户名存在非法字符')
  11.         break
  12. else:
  13.     with open('data/user_data.txt', mode='rt', encoding='utf-8') as f:
  14.         for line in f:
  15.             data_username, data_password = line.strip().split('---')
  16.             list_username.append(data_username)
  17.             list_password.append(data_password)
  18.         if username in list_username:
  19.             print('用户名已被注册')
  20.         else:
  21.             with open('data/user_data.txt', mode='at', encoding='utf-8') as f1:
  22.                 res1 = f1.write(f'{username}---{password}\n')

  23. # 登录功能
  24. print('开始登录账号'.center(20, '-'))
  25. input_username = input('请输入账号>>>').strip()
  26. input_password = input('请输入密码>>>').strip()

  27. if input_username in list_username:
  28.     index_username = list_username.index(input_username)
  29.     if input_password == list_password[index_username]:
  30.         print('登陆成功')
  31.     else:
  32.         print('账号或密码错误')
  33. else:
  34.     print('账号或密码错误')
复制代码

主要的修改包括:

判断账号是否有非法字符时,使用新的循环变量 char,避免与之前的变量 line1 混淆。
在注册账号时,将新注册的用户名和密码写入文件时,添加换行符 \n。
在登录功能中,直接通过条件语句判断用户名和密码是否正确,避免使用循环和索引。
请注意将合适的路径替换 open() 函数中的 'data/user_data.txt'。另外,建议在注册成功后,更新 list_username 和 list_password 列表,以避免重新打开文件读取数据。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-4 07:45:45 | 显示全部楼层
你好,我发现你的代码有几个问题:

- 你的非法字符列表中有重复的符号,比如两个反引号。
- 你的第一个for循环中,如果用户名在列表中,应该打印“用户名已被注册”,而不是反过来。
- 你的第二个for循环中,如果用户名不在列表中,应该打印“账号或密码错误”,而不是反过来。
- 你的user_data.txt文件中有一个重复的用户名fly,这可能会导致错误。

我尝试修改了一下你的代码,你可以参考一下:

  1. # coding:utf-8
  2. # @Author:星空日记

  3. # #注册功能
  4. illegal_str=['`','!','@','#','$','%','^','&','*','(',')']
  5. list_username = []
  6. list_password = []

  7. print('开始注册账号'.center(20,'-'))
  8. username = input('请输入账号>>>').strip()
  9. password = input('请输入密码>>>').strip()


  10. #用户名是否已被注册
  11. with open('data/user_data.txt',mode='rt',encoding='utf-8') as f :
  12.     #用splitlines方法可以直接得到每一行的内容,不需要再用strip和split
  13.     for line in f.splitlines():
  14.         data_username,data_password = line.split('---')
  15.         list_username.append(data_username)
  16.         list_password.append(data_password)
  17.     #用in操作符可以直接判断一个元素是否在列表中,不需要再用for循环
  18.     if username in list_username:
  19.         print('用户名已被注册')
  20.     else:
  21.         #判断账号是否有非法字符
  22.         for char in username:
  23.             if char in illegal_str:
  24.                 print('用户名存在非法字符')
  25.                 break
  26.         else:
  27.             with open('data/user_data.txt', mode='at', encoding='utf-8') as f1:
  28.                 res1 = f1.write(f'{username}---{password}\n')

  29. print(list_password)
  30. print(list_username)
  31. #登录功能
  32. print('开始登录账号'.center(20,'-'))
  33. input_username = input('请输入账号>>>').strip()
  34. input_password = input('请输入密码>>>').strip()

  35. #用index方法可以直接得到一个元素在列表中的位置,不需要再用变量记录
  36. if input_username in list_username:
  37.     index = list_username.index(input_username)
  38.     if input_password == list_password[index]:
  39.         print('登陆成功')
  40.     else:
  41.         print('账号或密码错误')
  42. else:
  43.     print('账号或密码错误')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-23 07:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表