鱼C论坛

 找回密码
 立即注册
查看: 2660|回复: 3

[已解决]python 38讲课后题

[复制链接]
发表于 2023-5-23 17:03:44 | 显示全部楼层 |阅读模式

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

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

x
这里是我的代码,问题出现在最后两行,比如说,我输入名字梦梦
按照题目要求,需要print出,小甲鱼、不二、梦梦,
而我只输出梦梦,为什么会这样

  1. record={"小甲鱼":"I_love_FishC","不二如是":"FishC5201314"}
  2. name = input("请输入用户名:")
  3. if name in  record:
  4.     print("该用户名已被注册!")
  5.     name = input("请重新输入用户名:")
  6. else:
  7.     pass
  8. passwd=input("请输入密码:")
  9. record[name]=passwd

  10. for each in name:
  11.     print(f"目前注册的用户有:{name}")
复制代码
正确的代码
  1. fc_db = {"小甲鱼":"I_love_FishC", "不二如是":"FishC5201314"}
  2.    
  3. name = input("请输入用户名:")
  4. while True:
  5.     if fc_db.get(name) != None:
  6.         print("该用户名已被注册!")
  7.         name = input("请重新输入用户名:")
  8.     else:
  9.         break
  10.    
  11. passwd = input("请输入密码:")
  12. fc_db[name] = passwd

  13. print("------------------")
  14. print("目前已注册的用户有:")
  15. for each in fc_db:
  16.     print(each)
复制代码


最佳答案
2023-5-23 18:11:15
你的代码在最后两行使用了 `name` 变量来输出注册的用户信息,然而这个变量只保存了当前输入的用户名,并没有保存之前已经注册的用户名。所以每次循环输出的都是当前输入的用户名。

正确的做法是,在前面使用一个字典(如代码中的 `fc_db`)来存储已经注册的用户名和密码,然后在最后的循环里遍历字典的键(即用户名),将其逐个输出即可。

所以:
  1. fc_db = {"小甲鱼":"I_love_FishC", "不二如是":"FishC5201314"}
  2.    
  3. name = input("请输入用户名:")
  4. while True:
  5.     if fc_db.get(name) != None:
  6.         print("该用户名已被注册!")
  7.         name = input("请重新输入用户名:")
  8.     else:
  9.         break
  10.    
  11. passwd = input("请输入密码:")
  12. fc_db[name] = passwd

  13. print("------------------")
  14. print("目前已注册的用户有:")
  15. for each in fc_db:
  16.     print(each)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-5-23 17:05:05 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2023-5-23 17:06 编辑

你代码第十二行,print(f"....: {name}")
name是用户添加的用户名
而each是每位鱼油
修改后代码

  1. record={"小甲鱼":"I_love_FishC","不二如是":"FishC5201314"}
  2. name = input("请输入用户名:")
  3. if name in  record:
  4.     print("该用户名已被注册!")
  5.     name = input("请重新输入用户名:")
  6. else:
  7.     pass
  8. passwd=input("请输入密码:")
  9. record[name]=passwd

  10. for each in name:
  11.     print(f"目前注册的用户有:{each}")##############这里############
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-23 17:05:44 | 显示全部楼层
本帖最后由 isdkz 于 2023-5-23 17:07 编辑

您的代码中有一点小错误。在最后两行,您尝试打印所有已注册的用户名,但是你是在  name (这是你最后输入的一个用户名)而不是  record (这是包含所有用户名和密码的字典)上进行循环。所以,当你试图打印  each 时 ,实际上你是打印了最后一个添加的用户名的每一个字符。

应该更改最后的循环为:

  1. for each in record:
  2.     print(f"目前注册的用户有:{each}")
复制代码


这样,你就会遍历整个  record  字典的键,而不仅仅是你最后输入的一个名字,然后打印出所有的用户名。

您提供的“正确的代码”里也有一个好的实践,即在询问新用户名时使用了一个循环,直到输入的用户名在数据库中不存在,才会退出循环。这样可以确保每个用户名都是唯一的,不会覆盖现有的用户名和密码。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-23 18:11:15 | 显示全部楼层    本楼为最佳答案   
你的代码在最后两行使用了 `name` 变量来输出注册的用户信息,然而这个变量只保存了当前输入的用户名,并没有保存之前已经注册的用户名。所以每次循环输出的都是当前输入的用户名。

正确的做法是,在前面使用一个字典(如代码中的 `fc_db`)来存储已经注册的用户名和密码,然后在最后的循环里遍历字典的键(即用户名),将其逐个输出即可。

所以:
  1. fc_db = {"小甲鱼":"I_love_FishC", "不二如是":"FishC5201314"}
  2.    
  3. name = input("请输入用户名:")
  4. while True:
  5.     if fc_db.get(name) != None:
  6.         print("该用户名已被注册!")
  7.         name = input("请重新输入用户名:")
  8.     else:
  9.         break
  10.    
  11. passwd = input("请输入密码:")
  12. fc_db[name] = passwd

  13. print("------------------")
  14. print("目前已注册的用户有:")
  15. for each in fc_db:
  16.     print(each)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-23 22:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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