python类型错误:';非类型';

python类型错误:';非类型';,python,Python,以下代码在类型为的第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 -=

以下代码在类型为的第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()
def插入列表(名称、分数、H):
E=[分数,姓名]
i=len(H)-1
如果H[i]!=无:
打印(“失败”)
而H[i-1][0]
您需要交换while循环条件中操作数的顺序。
从左到右检查条件,并在找到一个
真值时停止计算。当您发现
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
# ...
#。。。
如果H[i]不是无:
打印(“失败”)
当H[i-1]为无或H[i-1][0]
您需要交换while循环条件中操作数的顺序。
从左到右检查条件,并在找到一个
真值时停止计算。当您发现
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
# ...
#。。。
如果H[i]不是无:
打印(“失败”)
当H[i-1]为无或H[i-1][0]
您需要交换while循环条件中操作数的顺序。
从左到右检查条件,并在找到一个
真值时停止计算。当您发现
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
# ...
#。。。
如果H[i]不是无:
打印(“失败”)
当H[i-1]为无或H[i-1][0]
您需要交换while循环条件中操作数的顺序。
从左到右检查条件,并在找到一个
真值时停止计算。当您发现
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
# ...
#。。。
如果H[i]不是无:
打印(“失败”)
当H[i-1]为无或H[i-1][0]
错误信息非常清楚。您正在访问None值,试图将其视为列表。这样做的原因是,在测试它是否为空之前,您首先尝试以这种方式访问它。因此,您需要在while循环中恢复您的条件。除此之外,使用!=or==运算符,但“是”和“不是”运算符,因为都不是单例。最后但并非最不重要的一点,你应该考虑用一个利用列表排序的构建能力的代码替换你的代码:

 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

错误信息非常清楚。您正在访问None值,试图将其视为列表。这样做的原因是,在测试它是否为空之前,您首先尝试以这种方式访问它。因此,您需要在while循环中恢复您的条件。除此之外,使用!=or==运算符,但“是”和“不是”运算符,因为都不是单例。最后但并非最不重要的一点,你应该考虑用一个利用列表排序的构建能力的代码替换你的代码:

 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

错误信息非常清楚。您正在访问None值,试图将其视为列表。这样做的原因是,在测试它是否为空之前,您首先尝试以这种方式访问它。因此,您需要在while循环中恢复您的条件。除此之外,使用!=or==运算符,但“是”和“不是”运算符,因为都不是单例。最后但并非最不重要的一点,你应该考虑用一个利用列表排序的构建能力的代码替换你的代码:

 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

错误信息非常清楚。您正在访问None值,试图将其视为列表。这样做的原因是,在测试它是否为空之前,您首先尝试以这种方式访问它。因此,您需要在while循环中恢复您的条件。除此之外,使用!=or==运算符,但“是”和“不是”运算符,因为都不是单例。最后但并非最不重要的一点,你应该考虑用一个利用列表排序的构建能力的代码替换你的代码:

 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


如果H[i]不是None,则在检查None时使用
。。如果H[i]不是None,则在检查None时交换顺序,
。。如果H[i]不是None,则在检查None时交换顺序,
。。如果H[i]不是None,则在检查None时交换顺序,
。。在你的时间里交换顺序,这很有意义。谢谢大家!+1啊,有道理。谢谢大家!+1啊,有道理。谢谢大家!+1啊,有道理。谢谢大家!+1“你应该扔掉你的代码,用这个替换它”不是很有帮助,是吗?很抱歉,这是一个CSc练习,我不能使用python特定的函数。这只是用于插入数组的伪代码的一些实现。尽管如此,你的答案还是+1。@Joost是的,措辞更严厉