Python用户名管理:保留输入大小写并实现大小写不敏感登录
解决方案:用字典存储用户名映射
要实现保留原始输入大小写且登录不区分大小写验证,核心是同时存储用户名的原始值和小写(casefold)版本,用字典建立两者的映射关系是最直接的方式——字典的键用小写版本用于快速匹配,值存用户输入的原始用户名。
修改后的完整代码
user_db = {} # 键:小写用户名,值:用户输入的原始用户名 app = True while app: start = input("Do you want to add a user to the list? ") if start == "yes": newUsername = input("Add a username to the list: ") lower_username = newUsername.casefold() # 检查是否已存在(不区分大小写) if lower_username in user_db: print(f"Username '{user_db[lower_username]}' already exists (case-insensitive match).") else: user_db[lower_username] = newUsername print(f"Added username: {newUsername}") elif start == "no": userLogin = input("Enter your username: ") lower_login = userLogin.casefold() if lower_login in user_db: print(f"Nice, welcome back, {user_db[lower_login]}!") else: print("Nope, not on the list.") else: print("Please enter 'yes' or 'no'.")
关键调整点
- 数据结构替换:把原来的列表
username换成字典user_db,既解决了原始用户名存储问题,又能利用字典O(1)的高效查找能力。 - 注册逻辑:
- 对新输入的用户名做
casefold()处理,作为字典的键 - 先检查键是否存在,避免重复注册(不区分大小写)
- 不存在则将原始用户名存入字典对应的值
- 对新输入的用户名做
- 登录逻辑:
- 对登录输入做
casefold()处理,去字典的键中匹配 - 匹配成功时,取出字典中存储的原始用户名进行提示,既验证通过又保留了用户最初的输入样式
- 对登录输入做
示例运行
- 注册输入
jOhN,字典存储为{'john': 'jOhN'} - 登录输入
JOHN,转小写后匹配到键john,输出Nice, welcome back, jOhN!
内容的提问来源于stack exchange,提问作者ebkod
相关产品推荐
相关产品推荐

