这条线路有问题。我不太清楚为什么它给我的列表索引超出了范围。到目前为止,我已经尝试了几种解决方案,但都没有奏效
scoreboardSorted = sorted(scoreboard, key = lambda t: t[1], reverse = True)
# Print first 5
a = 0
for score in scoreboardSorted:
print(str(score[0]) + ": " + str(score[1]) + " points")
a = a + 1
if a == 5:
这是代码的完整部分
def endGame(points):
scoreboard = []
# Write score to scoreboard
with open("scoreboard.csv", "a") as scoreboardFile:
scoreboardWriter = csv.writer(scoreboardFile)
scoreboardWriter.writerow([name, points])
# Open scoreboard in read mode and store in memory
scoreboardFile = open("scoreboard.csv", "rt")
scoreboardReader = csv.reader(scoreboardFile)
for i in scoreboardReader:
scoreboard.append(i)
print("\nGame over!")
print("Well done " + str(name) + ", you got " + str(points) + " points.")
print("\nTop 5:")
# Sort list
scoreboardSorted = sorted(scoreboard, key = lambda t: t[1], reverse = True)
# Print first 5
a = 0
for score in scoreboardSorted:
print(str(score[0]) + ": " + str(score[1]) + " points")
a = a + 1
if a == 5:
break
sys.exit()
回溯是这样的
Traceback (most recent call last):
File "E:\Nea\NEA-PROJECT.py", line 128, in <module>
endGame(points)
File "E:\Nea\NEA-PROJECT.py", line 30, in endGame
scoreboardSorted = sorted(scoreboard, key = lambda t: t[1], reverse = True)
File "E:\Nea\NEA-PROJECT.py", line 30, in <lambda>
scoreboardSorted = sorted(scoreboard, key = lambda t: t[1], reverse = True)
IndexError: list index out of range
注:请不要只是张贴解决方案,并实际详细解释。我是一个还在努力学习的中学生,如果你能花点时间解释一下,我会非常感激的。提前谢谢
如果
t
(在scoreboard
中的项)的值小于2(1或0),则lambda函数中的t[1]
是不可能的。这可能意味着csv文件中的值太少您可以修复csv中的值,也可以在排序时使用某些默认值:
请注意,我在这里使用了
0
作为默认值,但是如果这给了您错误的排序顺序或类型错误,您必须找出另一个合适的值作为默认值您的
scoreboard
缺少数据。例如,下表中的第二行缺少第二个值您可以使用三元来为缺少的值提供默认值,例如零
这假设
scoreboards
中的每个项本身是至少两个项的序列听起来
scoreboards
中至少有一个项的项少于两个相关问题 更多 >
编程相关推荐