如何正确编写此代码?
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
答案 0 :(得分: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]))
答案 1 :(得分: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]))
答案 2 :(得分: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
中的元素,因此只需通过索引访问每个子元素。
答案 3 :(得分: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:]))