将上一篇中的例子,修改一下,将两个程序合二为一,如果存储了用户喜欢的水果就显示它,否则提示用户输入他喜欢的水果并将其存储到文件中。
favorite.py
1 import json 2 3 filename = "favorite_fruit.json" 4 5 def greet_user(): 6 """问候用户,并指出他喜欢的水果""" 7 fruit = get_saved_fruit() 8 if fruit: 9 print("I know your favorite fruit ! It's " + fruit) 10 else: 11 fruit = save_user_new_fruit() 12 print("I know your favorite fruit ! It's " + fruit) 13 14 15 16 17 def save_user_new_fruit(): 18 """提示用户输入喜欢的水果""" 19 fruit = input(" What is your favorite fruit ? ") 20 with open(filename,'w') as file_obj: 21 json.dump(file_obj,fruit) 22 return fruit 23 24 def get_saved_fruit(): 25 """如果存储了用户喜欢的水果,就获取它""" 26 try : 27 with open(filename) as file_obj: 28 fruit = json.load(file_obj) 29 except FileNotFoundError: 30 return None 31 else: 32 return fruit 33 34 greet_user()
解释:在优化代码过后,每个函数只需要执行单一任务,这更符合程序的设计
第一次运行程序后的控制台如下:
如果我们是第一次运行,如下图
会让用户先输入最喜欢的水果然后回应用户他最喜欢的水果。
而之后的运行,则如图:
因为程序在第一次运行之后已经将用户喜欢的水果存入了json文件。
所以不会提示用户输入。