Python Pickle仅保存多对用户输入列表中的最后一对输入

Python Pickle仅保存多对用户输入列表中的最后一对输入,python,python-3.x,Python,Python 3.x,我遇到一个问题,pickle模块只保存用户输入的最后一对输入 如何使pickle模块将每对输入保存为一对问题和答案,而不仅仅是最后一个输入的问题和答案 import pickle import random import os os.system('cls') n = input("How many questions do you have? : ") vvff = list() for i in range(0, int(n)): v = inpu

我遇到一个问题,pickle模块只保存用户输入的最后一对输入

如何使pickle模块将每对输入保存为一对问题和答案,而不仅仅是最后一个输入的问题和答案

import pickle
import random
import os
os.system('cls')

    n = input("How many questions do you have? : ")
    vvff = list()

    for i in range(0, int(n)):
        v = input("Enter question : ")
        while True:
            f = input("Enter answer ((true) or (false)) : ")
            if f.lower() in ('true', 'false'):
                    break
            else:
                print("Invalid answer")
    for i in range(0, int(n)):
            vf = {"question": v, "answer": f}
            vvff.append(vf)

    question_vff = input("Would you like to save (yes or  no)")
    if (question_vff == 'yes'):
            pickle.dump(vvff, open("Savequestionandanswerlist.dat", "wb"))
            pickle.dump(n, open("Savequestionamount.dat", "wb"))
            print("Saved!")
    if (question_vff == 'no'):
            print ("Please save to use this information,")

问题是您没有在主循环中添加问题和答案。当您在主循环之外执行循环时,变量v和f被设置为发出的最后一个问题和答案。当您知道自己拥有这些功能时,只需将它们添加到您的列表中即可:

    ...
    for i in range(0, int(n)):
        v = input("Enter question : ")
        while True:
            f = input("Enter answer ((true) or (false)) : ")
            if f.lower() in ('true', 'false'):
                # We have our question, along with a valid answer so add them to our list!
                vf = {"question": v, "answer": f}
                vvff.append(vf)
                break
            else:
                print("Invalid answer")

    question_vff = input("Would you like to save (yes or  no)")
    ...

你在复制/粘贴代码时把缩进弄糟了吗?因为这只是一个错误。@jonShape No I dont您的第一个循环提示用户输入v和f,n次-每次都覆盖最后一对值。然后,您的第二个循环将这些值(最后的值)附加到一个列表中,n次。换句话说,pickle与您的问题完全无关—您从一开始就未能保存多个值对。您需要一个单独的循环,该循环在生成列表时将每个对追加到列表中。