如何在python3中获得json的这种实践正常工作?

时间:2018-08-05 10:44:51

标签: python json python-3.x

我做了一个简单的练习,将询问用户的姓名和喜爱的号码并将其存储在字典中。我使用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()

1 个答案:

答案 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作为参数传递。

我建议第二种选择。