我的代码提供了以下错误,任何人都可以帮助我解决出错的问题
if(RecentScores [count] .Score)< (RecentScores [count + 1] .Score): IndexError:列表索引超出范围
def rankScores(RecentScores):
noMoreSwaps = False
while not noMoreSwaps:
noMoreSwaps = True
for count in range (1,len(RecentScores)):
if (RecentScores[count].Score) < (RecentScores[count + 1].Score):
noMoreSwaps = False
tempScore = RecentScores[count].Score
tempName = RecentScores[count].Name
RecentScores[count].Score = RecentScores[count+1].Score
RecentScores[count].Name = RecentScores[count+1].Name
RecentScores[count+1].Score = tempScore
RecentScores[count+1].Name = tempName
DisplayRecentScores(RecentScores)
如果有人可以提供帮助,我将非常感激
答案 0 :(得分:1)
大多数编程语言中的索引以0 开头。在行
for count in range (1,len(RecentScores)):
您正在从1
循环到length - 1
(我正在呼叫length
到len(RecentScores)
)。但是在行
if (RecentScores[count].Score) < (RecentScores[count + 1].Score):
您正在使用索引
访问list/tuple
count + 1
让我们说循环是在 last 迭代中。 count
的值为length - 1
。然后,在if
条件下,您尝试使用
list/tuple
RecentScores[length - 1 + 1]
相当于
RecentScores[length]
这将引发异常,因为您正在访问高于允许的索引。
你怎么解决?
为了避免使用不允许的索引,您可以将循环范围更改为更小的范围:
for count in range (1, len(RecentScores) - 1):
答案 1 :(得分:0)
for count in range (1,len(RecentScores)):
if (RecentScores[count].Score) < (RecentScores[count + 1].Score):
此循环中的最大值count
是RecentScores的长度。
然后在循环的最后一次迭代中,您尝试使用以下内容访问一个结尾:
RecentScores[count + 1]
尝试访问此内容会为您提供所见的IndexError: list index out of range
。
循环索引从0开始,所以要解决此问题,您需要更改循环操作的范围:
for count in range (0,len(RecentScores)-1):
如果您要执行的操作是按照评论的建议对整个分数列表进行排序(请注意,这不是问题中的代码所做的那样),那么最好这样做:
sortedScores = sorted(RecentScores, key=lambda x: x.Score, reverse=True)
答案 2 :(得分:0)
for count in range(0,len(RecentScores)-1):
始终记住索引从0开始并转到length-1。而且由于你要访问索引+ 1的东西,你还需要减1,因为范围(a,b)从a到b-1