Python Pickle仅保存多对用户输入列表中的最后一对输入
我遇到一个问题,pickle模块只保存用户输入的最后一对输入 如何使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
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与您的问题完全无关—您从一开始就未能保存多个值对。您需要一个单独的循环,该循环在生成列表时将每个对追加到列表中。