如何通过两个功能根据需要多次编辑字典?

时间:2017-05-24 02:16:11

标签: python python-3.x scope

我有Python的代码:

def additems():
    items = {}
    add = input("What would you like to add?")
    value = input("What value would you like to assign?")
    items[add] = value
    return items

def resume():
    decision = input("would you like to continue?")
    if decision == "Y":
        main()
    else:
       print("Exiting...")

def main():
    items = additems()
    print(items)
    resume()

main()

目标是能够根据需要多次编辑“项目”,同时始终将更新的词典返回主页。但是,就目前而言,我只能在“additems”函数内编辑一次字典,然后在运行“main”时重置。我不想在main运行时重置字典,我总是希望它打印更新的“items”字典。所以而不是:

“你想补充什么?”  - G “你想分配什么价值?”   - 3 “{'G':'3'}” “你想继续吗?”   - Y. “你想补充什么?”   - J. “你想分配什么价值?”   - 4 “{'J':'4'}”(仅打印字典的最新添加内容)

...代码目前的功能是什么,我希望它能够做到:

“你想补充什么?”  - G “你想分配什么价值?”   - 3 “{'G':'3'}” “你想继续吗?”   - Y. “你想补充什么?”   - J. “你想分配什么价值?”   - 4 “{'G':'3','J':'4'}”(两个添加内容均已打印)

......只要我提供Y的输入就可以做到这一点,这意味着我可以继续。

如果您还没有猜到,我是Stack和Python的新手,但是我们将不胜感激。因此,当我指的是帮助时,我的意思是帮助那些不熟悉Python和编程的人,而不是那些有经验的人。回答就像你和一个5岁的孩子说话一样,为我们省去了所有麻烦。

1 个答案:

答案 0 :(得分:1)

由于@AChampion指出您不需要递归,只需将itemsmain函数传递到additems

由于dict个对象是可变的,我们不需要传递和返回它们,只是在需要时进行变异。

我们可以用无限循环替换递归,如

def additems(items):
    add = input("What would you like to add?\n")
    value = input("What value would you like to assign?\n")
    items[add] = value


def main():
    items = {}
    while True:
        additems(items)
        print(items)
        decision = input("would you like to continue?\n")
        if decision != "Y":
            print("Exiting...")
            return


main()

我在每个问题的末尾添加了换行符'\n',以便用户更轻松地进行互动,如果您不需要它们,请随时删除。