How do I sort Python IndexError:List Index out of range when reading and writing with files
How do I sort Python IndexError:List Index out of range when reading and writing with files
我正在 Python 开发一款游戏,最后,分数被写入文件,然后从文件中提取前 5 名分数。这通常工作得很好但是一旦我重置高分我得到一个索引错误说 "the list index is out of range"
回溯(最近调用最后):
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,exampleuser
add_up 功能很好,只是 return 总分。
我尝试添加占位符分数来解决问题,例如
1,Placeholder1
2,Placeholder2
3,Placeholder3
4,Placeholder4
5,Placeholder5
这有时会起作用,但现在又不起作用了。
写入文件后,其 位置 位于末尾 - 您可以通过 leaders.tell()
看到这一点。当您开始阅读时,for 循环会立即退出,因为没有更多的行并且 dic
仍然是空的。稍后,scores
和 names
为空,因此当您尝试访问项目时会得到 IndexError
。
在开始读取文件之前,将其位置设置回开头 - 如果有 header 您不想跳过第一行:
...
leaders.seek(0)
#_ = next(leaders) # skip header
for line in leaders:
data = line.split(",")
dic[int(data[0])] = data[1]
我正在 Python 开发一款游戏,最后,分数被写入文件,然后从文件中提取前 5 名分数。这通常工作得很好但是一旦我重置高分我得到一个索引错误说 "the list index is out of range" 回溯(最近调用最后):
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,exampleuser
add_up 功能很好,只是 return 总分。 我尝试添加占位符分数来解决问题,例如
1,Placeholder1
2,Placeholder2
3,Placeholder3
4,Placeholder4
5,Placeholder5
这有时会起作用,但现在又不起作用了。
写入文件后,其 位置 位于末尾 - 您可以通过 leaders.tell()
看到这一点。当您开始阅读时,for 循环会立即退出,因为没有更多的行并且 dic
仍然是空的。稍后,scores
和 names
为空,因此当您尝试访问项目时会得到 IndexError
。
在开始读取文件之前,将其位置设置回开头 - 如果有 header 您不想跳过第一行:
...
leaders.seek(0)
#_ = next(leaders) # skip header
for line in leaders:
data = line.split(",")
dic[int(data[0])] = data[1]