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(): """提示用户输入新的用户名,将其储存在文件中,并返回该名字""" filename = 'username.json' username = input("Please enter your name: ") with open(filename,'w') as f_obj: json.dump(username,f_obj) return username def check_username(): """打印一条消息,让用户确认是否为自己的用户名,并返回答案""" username = get_stored_username() print("Is this your name? " + username) anwser = input("(yes/no) ") return anwser def greet_user(): """传递一条消息,和用户打招呼""" username = get_stored_username() if username: anwser = check_username() if anwser == 'yes': print("Welcome back, " + username + '!') elif anwser == 'no': username = get_new_username() print("I'll remember you when you come back, " + username + '!') else: username = get_new_username() print("I'll remember you when you come back, " + username + '!') greet_user()
思考:能否将首次运行用户和新用户合并到同一处理方式中?