我正在用Python编写一个游戏,最后,分数被写到一个文件中,然后从文件中提取出前5个分数。这通常是非常好的,但是一旦我重置高分,我就会发现一个索引错误,它说“列表索引超出了范围”回溯(最近一次调用):
File "/home/leo/Documents/Python/infinitest/infinitest.py", line 172, in <module>
scoreboard()
File "/home/leo/Documents/Python/infinitest/infinitest.py", line 147, in scoreboard
print("{0[0]} : {1[0]}\n{0[1]} : {1[1]}\n{0[2]} : {1[2]}\n{0[3]} : {1[3]}\n{0[4]} : {1[4]}".format(scores,names))
IndexError: list index out of range我该怎么解决这个问题
def scoreboard():
c = add_up1(False)
d = add_up2(False)
with open("/home/leo/Documents/Python/infinitest/hi2.txt", "a+") as leaders:
leaders.write('{},{}\n'.format(c,name1))
leaders.write('{},{}\n'.format(d,name2))
line=leaders.readline()
dic={}
for line in leaders:
data = line.split(",")
dic[int(data[0])] = data[1]
dic1={}
for key in sorted(dic.keys()):
dic1[key]=dic[key]
scores=list(dic1.keys())
names=list(dic1.values())
names =names[::-1]
scores= scores[::-1]
print("{0[0]} : {1[0]}\n{0[1]} : {1[1]}\n{0[2]} :{1[2]}\n{0[3]} : {1[3]}\n{0[4]} : {1[4]}".format(scores,names)) 在外部文件中,它是格式化的,所以有分数,后面是逗号,后面是用户名。例如:
100,exampleuseradd_up函数很好,只需返回总分。我尝试添加占位符分数来解决这个问题,比如
1,Placeholder1
2,Placeholder2
3,Placeholder3
4,Placeholder4
5,Placeholder5这有时起作用,但现在不起作用了。
发布于 2019-12-03 19:09:15
在写入文件之后,它的位置在末尾--您可以在leaders.tell()中看到这一点。当您开始阅读时,for循环会立即退出,因为没有更多的行,而且dic仍然是空的。稍后,scores和names是空的,所以当您尝试访问项时会得到一个IndexError。
在开始读取文件之前,它的位置回到开头--如果有一个不想跳过第一行的标题:
...
leaders.seek(0)
#_ = next(leaders) # skip header
for line in leaders:
data = line.split(",")
dic[int(data[0])] = data[1]https://stackoverflow.com/questions/59161897
复制相似问题