【问题标题】:How to get this piece of practice of json in python3 work properly?如何让python3中的json实践这块工作正常?
【发布时间】:2018-08-05 10:44:50
【问题描述】:

我做了一个简单的练习,它会询问用户他们的姓名和最喜欢的号码并将它们存储在字典中。我使用 json 以便每次运行代码时都可以访问数据。该程序将询问用户的姓名并返回他们最喜欢的号码或询问他们最喜欢的号码。它还会询问返回的数字是否正确。

问题: 当我多次运行程序并添加或修改一些值时,之前的所有值都会被删除。

例如,我第一次运行后,.json 文件有 {'alice':'8', 'bob':'7'}在里面。然后我退出了这个程序。当我再次运行它时,我仍然可以访问 Alice 和 Bob 最喜欢的号码。但是,如果我尝试添加另一个人喜欢的号码,Alice 和 Bob 将被删除。如果我尝试更改 Bob 最喜欢的号码,Alice 将被删除。 之后的任何其他更改都不会导致更多不需要的更改。

感谢帮助我的人。

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()

【问题讨论】:

    标签: python json python-3.x


    【解决方案1】:

    在顶部设置fav_nums = {}

    在您的函数user_in_dict(n)return_fav_num(n) 中,您只需在函数内部设置本地fav_nums,而不是全局设置。因此全局变量保持为空。

    add_fav_num(n) 中,您将用户添加到全局fav_nums {},因为函数中没有定义fav_num,而是使用了全局版本。

    要解决此问题,您可以直接使用您的数据初始化fav_num,或者将fav_num 作为参数传递。

    我会推荐第二种选择。

    【讨论】:

      猜你喜欢
      • 2021-07-29
      • 2020-07-09
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2012-06-07
      • 1970-01-01
      • 2017-06-06
      • 2015-05-08
      相关资源
      最近更新 更多