-1

如何正确编写此代码?

highScore=open('scores.txt',mode='r')
score=[]
i=0
print("\nName\t\tScore")
line=highScore.readline().strip('\n')
while line!="":
    line=str(line).split(', ')
    x=[line[0],int(line[1])]
    score.append(x)
    line=highScore.readline()
z=sorted(score, key=itemgetter(1), reverse=False)
for i in z:
    print(str(z[i][0])+"\t\t"+str(z[i][1]))
    i+=1

预计会显示带有相同条目分数的选项卡的名称。

但显示错误:

TypeError: list indices must be integers, not list
4

4 回答 4

0

因为i不是索引,它是列表中的每个元素。请参阅下面的示例

z = 'abcde'
for i in z:
    print i

a
b
c
d
e

所以你想把你的代码改成

for i in z:
    print(str(i[0])+"\t\t"+str(i[1]))
于 2014-08-23T13:35:03.613 回答
0

我认为z是一个二维数组,所以替换这一行:

for i in z:
    print(str(z[i][0])+"\t\t"+str(z[i][1]))
    i+=1

有了这个 :

for i in z:
    print(str(i[0])+"\t\t"+str(i[1]))
于 2014-08-23T13:40:46.667 回答
0

只需str.format按索引使用和访问子元素:

In [10]: z = [[1,2],[3,4]]


In [11]: for i in z:
   ....:     print("{}        {}".format(i[0],i[1]))
   ....:     
1       2
3       4

您正在迭代元素,z因此只需通过索引访问每个子元素。

于 2014-08-23T13:41:29.550 回答
0

这条线line=highScore.readline().strip('\n')可能不是你想要做的。我认为您想阅读整个文件并换行。所以用 read 替换 readline。

lines = highScore.read().strip('\n')

然后,您可以使用 for 循环而不是 while 循环

for line in lines:
    for items in line.split(', '):
         score.append(list(items[0], items[1:]))
于 2014-08-23T14:43:16.523 回答