我做了一个简单的练习,将询问用户的姓名和喜爱的号码并将其存储在字典中。我使用json,以便每次运行代码时都可以访问数据。该程序将询问用户的姓名,并返回他们喜欢的号码或询问他们喜欢的号码。它还会询问返回的数字是否正确。
问题: 当我多次运行该程序并添加或修改某些值时,所有先前的值都将被删除。
例如,在我第一次运行它之后,.json文件具有
{'alice':'8', 'bob':'7'}
。然后我退出程序。当我再次运行它时,我仍然可以访问Alice和Bob的收藏夹号码。但是,如果我尝试添加其他人的收藏夹号码,爱丽丝和鲍勃将被删除。如果我尝试更改鲍勃的收藏夹号码,爱丽丝将被删除。
之后的任何其他更改都不会导致更多不必要的更改。
感谢任何帮助我的人。
import json
fav_nums = {}
filename = 'fav_number.json'
def user_in_dict(n):
#check if the user had given a response before#
with open(filename, 'r') as f_obj:
fav_nums = json.load(f_obj)
if n in fav_nums:
return True
else:
return False
def return_fav_num():
#return their favourite number and ask if it's correct#
with open(filename, 'r') as f_obj:
fav_nums = json.load(f_obj)
print('Is your favourite number ' + fav_nums[username] + '?')
checker = input('(Y/N)\n')
if checker == 'Y':
return True
else:
return False
def add_fav_num():
#add the new key-value pair into the dictionary#
number = input("What's yout favourite number?\n")
fav_nums[username] = number
with open(filename, 'w') as f_obj:
json.dump(fav_nums, f_obj)
print('Thank you.\n')
while True:
username = input("What's your name? (enter 'q' to quit)\n").lower()
if username == 'q':
break
else:
if user_in_dict(username):
if return_fav_num():
print('')
pass
else:
add_fav_num()
else:
add_fav_num()
答案 0 :(得分:0)
在顶部设置fav_nums = {}
。
在函数user_in_dict(n)
和return_fav_num(n)
中,您仅在函数内部设置了本地fav_nums
,而不是全局函数。因此,全球范围内保持空虚。
在add_fav_num(n)
中,将您的用户添加到全局fav_nums
{}
中,因为该函数中未定义fav_num且使用了gobal版本。
要解决此问题,您可以直接使用数据初始化fav_num
或将fav_num
作为参数传递。
我建议第二种选择。