Python 练习10-13:验证用户
练习10-13:验证用户
最后一个remember_me.py版本假设用户要么已输入用户名,要么是首次运行该程序。我们应该修改这个程序,以防当前用户并非上次运行该程序的用户。
为此,在greet_user()中打印欢迎用户回来的消息前,询问他用户名是否正确。如果不对,就调用get_new_username()让用户输入正确的用户名。
import json def get_stored_username(): """获取存储的用户名——如果存储了。""" filename = 'username.json' try: with open(filename) as f_obj: username = json.load(f_obj) except FileNotFoundError: return None else: return username def get_new_username(): """提示用户输入用户名。""" username = input("What is your name? ") filename = 'username.json' with open(filename, 'w') as f_obj: json.dump(username, f_obj) return username def check_username(): pass def greet_user(): """基于用户名问候用户。""" username = get_stored_username() if username: correct = input(f"Are you {username}? (y/n) ") if correct == 'y': print(f"Welcome back, {username}!") return else: username = get_new_username() print(f"We'll remember you when you come back, {username}!") return else: username = get_new_username() print(f"We'll remember you when you come back, {username}!") greet_user()
如上例子在greet_user() 中,不使用嵌套,再增加一个check_username()函数:
import json def get_stored_username(): """获取存储的用户名——如果存储了。""" filename = 'username.json' try: with open(filename) as f_obj: username = json.load(f_obj) except FileNotFoundError: return None else: return username def get_new_username(): """提示用户输入用户名。""" username = input("What is your name? ") filename = 'username.json' with open(filename, 'w') as f_obj: json.dump(username, f_obj) return username def check_username(username): """"检查名字是否相符""" username = get_stored_username() if username: correct = input(f"Are you {username}? (y/n) ") if correct == 'y': return username else: return None def greet_user(): """基于用户名问候用户。""" username = get_stored_username() if check_username(username): print(f"Welcome back, {username}!") else: username = get_new_username() print(f"We'll remember you when you come back, {username}!") greet_user()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了