2

该问题是指以下python程序-

# High Scores
# Maintains a list of the five highest scores and the players responsible.

hiscores = [56,45,23,11]
again = "a"


def findplace(xlist, x):
    # list is in descending order
    for j in range(len(xlist)-1):
        if x >= xlist[j]:
            xlist.insert(j, x)
            return xlist


while again:
    print("\n", hiscores)
    score = int(input("\nEnter a score (zero to exit): "))
    if score >= hiscores[3]:
        hiscores = findplace(hiscores, score)
    elif score == 0:
        again = ""


print(hiscores)
input("\nETE")

该程序从用户那里获取分数,如果它们足够高,则将它们添加到列表中。我想通过将 while 循环第三行的索引值设置为 3 来将入门级别设置为最低分数,但这会引发错误。0、1 和 2 完美运行!我究竟做错了什么?

4

2 回答 2

0

我无法用“入门级”分数重现您的问题。但是,由于您的列表无论如何只有五个元素,您可以通过完全放弃入门级检查来使事情变得更容易。

while True:
    print("\n", hiscores)
    score = int(input("\nEnter a score (zero to exit): "))
    if score == 0:
        break
    hiscores = findplace(hiscores, score)

另请注意,您的findplace方法会将高分列表扩展到五个以上的条目,并且None如果分数不在第一个len-1条目中,它可以返回。相反,您可以只添加新分数,以相反的顺序对列表进行排序,然后取前五个元素。

def findplace(xlist, x):
    return sorted(xlist + [x], reverse=True)[:5]
于 2013-03-14T14:20:05.020 回答
0

问题是findplace仅在分数为高分时才返回新列表。如果您输入11未插入的 ,则它不会命中return语句(因此返回None)。由于您设置highscores = findplace(hiscores, score),您实际上将您的列表设置为None,导致TypeError.

移动到与 in 中的循环return xlist相同的级别修复此错误(但会在您的函数中显示逻辑错误,我将留给您发现)。forfindplacefindplace

于 2013-03-14T15:22:07.293 回答