我正在测试我的代码,看它是否正常运行,因此删除任何不一致。
首先,代码如下:
user_name = str(input("What is your name?"))
last_name = str(input("What is your surname?"))
final_total = int(input("What is your total score?"))
with open('quiz_results.txt') as f:
for line in f:
name,val = line.split(":")
user_scores[name].appendleft(int(val))
with open("quiz_results.txt", "a+") as f:
f.write('{}:{}\n'.format(user_name + last_name, final_total))
print("complete.")
with open('quiz_results.txt') as f:
for line in f:
name,val = line.split(":")
user_scores[name].appendleft(int(val))
现在,对于测试数据,我为user_name添加了'Dave',为last_name添加了'Johnson',每个go的最终总数为70,80,90和100,所以我重复了4次程序。
当我输入第一个结果70时,我得到了我期望在文本文件中的结果:
DaveJohnson:70
不同寻常的是,在文本文件中,当我输入80表示结果(同名)时,我会进入文本文件:
DaveJohnson:80
DaveJohnson:70
DaveJohnson:70
当我应该得到:
DaveJohnson:80
DaveJohnson:70
当我输入90时,我进入文本文件:
DaveJohnson:90
DaveJohnson:70
DaveJohnson:70
当我应该得到:
DaveJohnson:90
DaveJohnson:80
DaveJohnson:70
当我输入100时,我进入文本文件:
DaveJohnson:100
DaveJohnson:70
DaveJohnson:70
但我应该得到:
DaveJohnson:100
DaveJohnson:90
DaveJohnson:80
地球上出了什么问题? 更新全部解决了。
答案 0 :(得分:1)
在重新读取数据之前,您永远不会清除user_scores
字典(在第3 with
语句中)
在阅读之前尝试清除字典:
user_scores.clear()
with open('quiz_results.txt') as f:
for line in f:
name,val = line.split(":")
user_scores[name].appendleft(int(val))
另外:最后with
语句看起来不正确;我想你只想写下所有的名字,得分如下:
with open('quiz_results.txt', 'wt') as f :
for k, v in sorted(user_scores.items()):
f.write(item[0] + ':' + str(item[1])+'\n')
答案 1 :(得分:1)
您在不重置user_names的内容的情况下两次阅读quizresults.txt。因此,如果用户名/分数对在开始时位于文件中,则将分数读入用户名,然后再次读取。 user_scores的内容类似于
开始:{'DaveJohnson':[]} #I'm guesing
:{'DaveJohnson':[]}
首次运行后的第二个阻止:{'DaveJohnson':[0]}
首次运行后的第三个阻止:{'DaveJohnson':[70]}
首次运行后的最后一次阻止:{'DaveJohnson':[70]}
在第二次运行后的第一个阻止后:{'DaveJohnson':[70]}
第二次运行后的第二次阻止:{'DaveJohnson':[70]}
(在这里你将DaveJohnson:80添加到你的文件
第二次跑完第三次后[在这里你重新阅读DaveJohnson:文件中的70并阅读DaveJohnson:80]:`{' DaveJohnson':[70,70,80] 出于好奇,为什么你有一个脚本正在读取文件,附加到它,再读一遍然后覆盖它?