以下代码在第6行返回错误类型:TypeError:' NoneType'对象不可订阅
有什么问题?
def insertAtList(name, score, H):
E = [score, name]
i = len(H) - 1
if H[i] != None:
print("fail")
while H[i-1][0] < E[0] or H[i-1] == None:
H[i] = H[i-1]
i -= 1
H[i] = E
for c in range (0,len(H) - 1):
print(H[c])
def testq4():
H = [[940, "Mike"], [880, "Rob"], [830, "Jill"], [790, "Paul"],
[750, "Anna"], [660, "Rose"], [650, "Jack"], None, None, None]
insertAtList("Mark",675,H)
testq4()
答案 0 :(得分:2)
您需要在while循环条件中交换操作数的顺序。 or
从左到右检查条件,并在找到一个True
值时停止评估。当您发现H[i-1]
为None
时,您就会想要这样做。目前,如果H[i-1]
为None
,您仍在尝试评估不存在的H[i-1][0]
。
试试这样:
# ...
if H[i] is not None:
print("fail")
while H[i-1] is None or H[i-1][0] < E[0]:
H[i] = H[i-1]
i -= 1
# ...
答案 1 :(得分:1)
错误信息非常清楚。您正在访问无值,尝试将其视为列表。这样做的原因是你首先尝试&amp;在之前以方式访问它,如果它是None,则进行测试。所以你需要在while循环中恢复你的条件。最重要的是,使用!=或==运算符不能检查None,但&#34;是&#34;并且&#34;不是&#34;运算符,因为None是单例。最后但同样重要的是,您应该考虑使用利用列表排序的内置功能的代码替换您的代码:
def insertAtList(name, score, highscores):
highscores.append([score, name])
highscores.sort(key=lambda entry: 0 if entry is None else entry, reverse=True)
H = [[940, "Mike"], [880, "Rob"], [830, "Jill"], [790, "Paul"],
[750, "Anna"], [660, "Rose"], [650, "Jack"], None, None, None]
insertAtList("Mark",675,H)
print H