將上一篇中的例子,修改一下,將兩個程序合二為一,如果存儲了用戶喜歡的水果就顯示它,否則提示用戶輸入他喜歡的水果並將其存儲到文件中。
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文件。
所以不會提示用戶輸入。