鱼C论坛

 找回密码
 立即注册
查看: 1332|回复: 4

[已解决]模拟鱼C登录界面

[复制链接]
发表于 2022-5-10 12:10:42 | 显示全部楼层 |阅读模式

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

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

x
Python第41讲课后作业
我的代码:
  1. import hashlib
  2. names = {}

  3. #定义函数
  4. def get_int():
  5.     print("1. 注册\n2. 登录\n3. 退出")
  6.    
  7.     get = input("请输入指令:")
  8.     while not (get == '1' or get == '2' or get == '3'):
  9.         get = input("错误。请输入正确的指令:")
  10.     else:
  11.         print("=====================")
  12.         return get

  13. def register():
  14.     name = input("请输入用户名:")
  15.     while name in names:
  16.         print("该用户名已存在!")
  17.         name = input("请重新输入用户名:")
  18.     else:
  19.         key = input("请输入密码:")
  20.         key = encrypt(key)
  21.         names[name] = key
  22.         print("恭喜,注册成功!")
  23.         print("=====================")
  24.    

  25. def login():
  26.     name = input("请输入用户名:")
  27.     while name not in names:
  28.         print("该用户名不存在。")
  29.         name = input("请重新输入用户名:")
  30.     else:
  31.         key = input("请输入密码:")
  32.         while encrypt(key) != names[name]:
  33.             print("密码错误!")
  34.             key = input("请重新输入密码:")
  35.         print("恭喜,登录成功!")
  36.         print("=====================")

  37. def encrypt(key):
  38.     key = hashlib.md5(bytes(key,"utf-8"))
  39.             
  40. #运行
  41. print("欢迎来到鱼C论坛~\n=====================")
  42. get = get_int()
  43. while get != '3':
  44.     if get == '1':
  45.         register()
  46.         get = get_int()
  47.     elif get == '2':
  48.         login()
  49.         get = get_int()
复制代码

其他都正常,但是login密码识别好像有问题
  1. =====================
  2. 请输入用户名:xhy
  3. 请输入密码:20080327
  4. 恭喜,注册成功!
  5. =====================
  6. 1. 注册
  7. 2. 登录
  8. 3. 退出
  9. 请输入指令:2
  10. =====================
  11. 请输入用户名:xhy
  12. 请输入密码:2222222222222222222
  13. 恭喜,登录成功!
  14. =====================
复制代码

请问这是为什么
最佳答案
2022-5-10 12:52:34

你的 encrypt 函数忘记设置返回值了

而且你需要调用 hexdigest() 方法才能得到 md5 码的十六进制项,否则比较的是对象内存地址,肯定会不一致的

改动后的 encrypt 函数:

  1. def encrypt(key):
  2.     key = hashlib.md5(bytes(key, "utf-8")).hexdigest()
  3.     return key
复制代码


完整参考代码:

  1. import hashlib

  2. names = {}


  3. # 定义函数
  4. def get_int():
  5.     print("1. 注册\n2. 登录\n3. 退出")

  6.     get = input("请输入指令:")
  7.     while not (get == '1' or get == '2' or get == '3'):
  8.         get = input("错误。请输入正确的指令:")
  9.     else:
  10.         print("=====================")
  11.         return get


  12. def register():
  13.     name = input("请输入用户名:")
  14.     while name in names:
  15.         print("该用户名已存在!")
  16.         name = input("请重新输入用户名:")
  17.     else:
  18.         key = input("请输入密码:")
  19.         key = encrypt(key)
  20.         names[name] = key
  21.         print("恭喜,注册成功!")
  22.         print("=====================")


  23. def login():
  24.     name = input("请输入用户名:")
  25.     while name not in names:
  26.         print("该用户名不存在。")
  27.         name = input("请重新输入用户名:")
  28.     else:
  29.         key = input("请输入密码:")
  30.         while encrypt(key) != names[name]:
  31.             print("密码错误!")
  32.             key = input("请重新输入密码:")
  33.         print("恭喜,登录成功!")
  34.         print("=====================")


  35. def encrypt(key):  # --------------------------------------      改了这个函数
  36.     key = hashlib.md5(bytes(key, "utf-8")).hexdigest()
  37.     return key

  38. # 运行
  39. print("欢迎来到鱼C论坛~\n=====================")
  40. get = get_int()
  41. while get != '3':
  42.     if get == '1':
  43.         register()
  44.         get = get_int()
  45.     elif get == '2':
  46.         login()
  47.         get = get_int()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-5-10 12:36:11 | 显示全部楼层
names[name]   你这玩意到底保存的是用户名还是密码啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-10 12:52:34 | 显示全部楼层    本楼为最佳答案   

你的 encrypt 函数忘记设置返回值了

而且你需要调用 hexdigest() 方法才能得到 md5 码的十六进制项,否则比较的是对象内存地址,肯定会不一致的

改动后的 encrypt 函数:

  1. def encrypt(key):
  2.     key = hashlib.md5(bytes(key, "utf-8")).hexdigest()
  3.     return key
复制代码


完整参考代码:

  1. import hashlib

  2. names = {}


  3. # 定义函数
  4. def get_int():
  5.     print("1. 注册\n2. 登录\n3. 退出")

  6.     get = input("请输入指令:")
  7.     while not (get == '1' or get == '2' or get == '3'):
  8.         get = input("错误。请输入正确的指令:")
  9.     else:
  10.         print("=====================")
  11.         return get


  12. def register():
  13.     name = input("请输入用户名:")
  14.     while name in names:
  15.         print("该用户名已存在!")
  16.         name = input("请重新输入用户名:")
  17.     else:
  18.         key = input("请输入密码:")
  19.         key = encrypt(key)
  20.         names[name] = key
  21.         print("恭喜,注册成功!")
  22.         print("=====================")


  23. def login():
  24.     name = input("请输入用户名:")
  25.     while name not in names:
  26.         print("该用户名不存在。")
  27.         name = input("请重新输入用户名:")
  28.     else:
  29.         key = input("请输入密码:")
  30.         while encrypt(key) != names[name]:
  31.             print("密码错误!")
  32.             key = input("请重新输入密码:")
  33.         print("恭喜,登录成功!")
  34.         print("=====================")


  35. def encrypt(key):  # --------------------------------------      改了这个函数
  36.     key = hashlib.md5(bytes(key, "utf-8")).hexdigest()
  37.     return key

  38. # 运行
  39. print("欢迎来到鱼C论坛~\n=====================")
  40. get = get_int()
  41. while get != '3':
  42.     if get == '1':
  43.         register()
  44.         get = get_int()
  45.     elif get == '2':
  46.         login()
  47.         get = get_int()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-10 13:09:02 | 显示全部楼层
wp231957 发表于 2022-5-10 12:36
names[name]   你这玩意到底保存的是用户名还是密码啊

name是用户名啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-13 11:06:41 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-29 04:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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