首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何排序:在读取和写入文件时列出超出范围的索引

如何排序:在读取和写入文件时列出超出范围的索引
EN

Stack Overflow用户
提问于 2019-12-03 16:55:35
回答 1查看 35关注 0票数 0

我正在用Python编写一个游戏,最后,分数被写到一个文件中,然后从文件中提取出前5个分数。这通常是非常好的,但是一旦我重置高分,我就会发现一个索引错误,它说“列表索引超出了范围”回溯(最近一次调用):

代码语言:javascript
复制
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

我该怎么解决这个问题

代码语言:javascript
复制
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)) 

在外部文件中,它是格式化的,所以有分数,后面是逗号,后面是用户名。例如:

代码语言:javascript
复制
100,exampleuser

add_up函数很好,只需返回总分。我尝试添加占位符分数来解决这个问题,比如

代码语言:javascript
复制
1,Placeholder1
2,Placeholder2
3,Placeholder3
4,Placeholder4
5,Placeholder5

这有时起作用,但现在不起作用了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-03 19:09:15

在写入文件之后,它的位置在末尾--您可以在leaders.tell()中看到这一点。当您开始阅读时,for循环会立即退出,因为没有更多的行,而且dic仍然是空的。稍后,scoresnames是空的,所以当您尝试访问项时会得到一个IndexError

在开始读取文件之前,它的位置回到开头--如果有一个不想跳过第一行的标题:

代码语言:javascript
复制
    ...
    leaders.seek(0)
    #_ = next(leaders)    # skip header
    for line in leaders:
        data = line.split(",")
        dic[int(data[0])] = data[1]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59161897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档