练习10-11:喜欢的数 编写一个程序,ᨀ 示用户输入喜欢的
数,并使用json.dump() 将这个数存储到文件中。再编写一
个程序,从文件中读取这个值,并打印如下所示的消息。
I know your favorite number! It’s _____.
练习10-12:记住喜欢的数 将练习10-11中的程序合二为一。
如果存储了用户喜欢的数,就向用户显示它,否则ᨀ 示用户输
入喜欢的数并将其存储到文件中。运行这个程序两次,看看它
能否像预期的那样工作。
import json
filename = 'text_files/favorite_name.json'
try:
with open(filename) as f:
number = json.load(f)
except FileNotFoundError:
number = input("Please enter your favorite name: ")
with open(filename,'w') as f:
json.dump(number,f)
else:
print(f"I know your favorite number!It's {number}.")
运行两次即可
最后一个 remember_me.py 版本假设用户要么已输入其用户名,要么是首次运行该程
序。应修改这个程序,以应对这样的情形:当前和最后一次运行该程序的用户并非同一个
人。
为此,在 greet_user() 中打印欢迎用户回来的消息前,询问他用户名是否是对的。如
果不对,就调用 get_new_username() 让用户输入正确的用户名。
import json
def get_stored_username():
#如果存储了用户,就获取它
filename = 'text_files/user.json'
try:
with open(filename) as f:
username = json.load(f)
except FileNotFoundError:
return None
else:
return username
def get_new_username():
#提示用户输入用户名
username = input("What is your name? ")
filename = 'text_files/user.json'
with open(filename,'w') as f:
json.dump(username,f)
return username
def greet_user():
#问候用户,并指出其名字
username = get_stored_username()
print(f"Does {username} is your name?")
title = input("Enter 'y' or 'n' please. ")
if title == 'y':
print(f"Welcome back, {username}!")
elif title == 'n':
username = get_new_username()
print(f"We'll remember you when you come back, {username}!")
# if username:
# print(f"Welcome back, {username}!")
# else:
# username = get_new_username()
# print(f"We'll remember you when you come back, {username}!")
greet_user()
另一种答案:缩进待调整
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 greet_user():
"""基于用户名问候用户。"""
username = get_stored_username()
if username:
correct = input(f"Are you {username}? (y/n) ")
if correct == 'y':
print(f"Welcome back, {username}!")
else:
username = get_new_username()
print(f"We'll remember you when you come back, {username}!")
else:
username = get_new_username()
print(f"We'll remember you when you come back, {username}!")
greet_user()