【问题标题】:I cant get past this 'NoneType' error in my bubblesort我无法通过冒泡排序中的“NoneType”错误
【发布时间】:2021-03-23 09:40:43
【问题描述】:
def bubble_sort(alist):
    size = len(alist)
    for i in range(size):
        index = alist[i]
        
        for j in range(size - 1, i, -1):
            if alist[j] < alist[j-1]:
                temp = alist[j-1]
                alist[j-1] = alist[j]
                alist[j] = temp         
       
    
def bsort(L):
    if len(L) <= 1:
        return L
    else:
        T = bubble_sort(L)
        if L[0] <= T[0]:
            return L[0] + T
        else:
            P = L[0] + T[-1]
            Q = bubble_sort(P)
        return T[0] + Q

print(bsort([5,4,3,9,1]))

收到此错误

    if L[0] <= T[0]:

TypeError: 'NoneType' object is not subscriptable

【问题讨论】:

  • 你没有从函数bubble_sort返回任何东西。
  • 所以,你现在已经知道答案了,但是下次调试的策略是:NoneType is not subscriptable 在该行代码上意味着L 是无或T 是无。没有其他东西可以导致该错误。所以,在if 测试之前打印出这两个值,看看哪个是None,然后通过你的代码向后工作,看看为什么它没有正确设置。

标签: python recursion bubble-sort


【解决方案1】:

您将结果从bubble_sort() 分配给T,但该函数没有显式返回任何内容,因此它返回默认的None

T = bubble_sort(L)

因此,当需要执行此行时,您将索引T,即None - 而None 不可下标:

    if L[0] <= T[0]:

您的代码也有一些类型不匹配错误。正如@M-Chen-3 指出的那样,您正在向列表中添加一个整数:

            return L[0] + T

这里也是:

        return T[0] + Q

这里:

            P = L[0] + T[-1]
            Q = bubble_sort(P)

您将两个整数相加,结果是一个整数,但您随后将其传递给bubble_sort(),它需要一个列表。

【讨论】:

  • 添加到您的答案中,return L[0] + Treturn T[0] + Q 行将导致错误,因为您将整数添加到列表中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
  • 1970-01-01
  • 2013-10-09
  • 1970-01-01
  • 2020-11-11
相关资源
最近更新 更多