来自Codeforce的thanos排序问题。错误:TypeError:'NoneType'和'NoneType'的实例之间不支持'<'

时间:2019-09-08 07:45:01

标签: python sorting non-type

我是编程新手。请在我的程序中提出其他问题,这将提高我的编程技能

Thanos排序是一种超级排序算法,其工作原理如下:如果未对数组进行排序,请用手指*删除项目的前半部分或后半部分,然后重复该过程。

给出一个输入数组,使用Thanos排序可以从中获得最长排序数组的大小是多少?

*需要无限手套。

输入 输入的第一行包含一个数字n(1≤n≤16)-数组的大小。 n保证是2的幂。

第二行输入包含n个以空格分隔的整数ai(1≤ai≤100)—数组的元素。

输出 返回可以使用Thanos sort获得的排序数组的最大长度。数组中的元素必须以非降序排序。

TypeError:具有注释错误的行上的'NoneType'和'NoneType实例之间不支持'<'

def find():
    a = int(input())
    if a%2==0 and a<=16 and a>=1:
        x = input()
        l = x.split()
        p= lcheck(l)
        r = rcheck(l)
        if p < r: # error
            return r
        else:
            return p

    else:
        print("enter the array length correctly")
        find()
def lcheck(l):
    n = len(l)
    m= sorted(l)
    if  l==m:
        return len(l)
    else:
        n=n//2
        l=l[:n]
        if len(l)>1:
            lcheck(l)
        else:
            return 1  
def rcheck(l):
    n = len(l)
    m= sorted(l)
    if  l==m:
        return len(l)
    else:
        n=n//2
        l=l[n+1:]
        if len(l)>1:
            rcheck(l)
        else:
            return 1
def splitint(x):
    l = x.split()
    l = list(map(int,l))
    return l
find()

TypeError跟踪(最近一次通话)  在      42 l =列表(map(int,l))      43返回l ---> 44个find()

<ipython-input-15-4486e758ce8e> in find()
      6         p= lcheck(l)
      7         r = rcheck(l)
----> 8         if p < r: # error
      9             return r
     10         else:

TypeError: '<' not supported between instances of 'NoneType' and 'NoneType'

2 个答案:

答案 0 :(得分:1)

您不返回递归lcheck和rcheck调用的结果(不返回->您将得到None),请将其更改为:

if len(l)>1:
    return lcheck(l)
else:
    return 1

更多提示:

  • lcheck和rcheck共享他们的大部分代码,这是不受欢迎的
  • 您可以使用max(p,r)
  • 使用描述性变量名称,而不仅仅是单个字母(有时可以)

答案 1 :(得分:0)

您的代码将无法通过以下测试用例:

16

78 16 40 90 4 13 99 19 41 47 50 68 71 79 96 76

下面是您可能想尝试的工作代码:

def lcheck(a):
    if a == sorted(a):
        return len(a)
    else:
        new_a = a[:len(a)//2]
        if len(new_a) > 1:
            if lcheck(new_a) >= rcheck(new_a):
                return lcheck(new_a)
            else:
                return rcheck(new_a)
        else:
            return 1

def rcheck(a):
    if a == sorted(a):
        return len(a)
    else:
        new_a = a[len(a)//2:]
        if len(new_a) > 1:
            if lcheck(new_a) >= rcheck(new_a):
                return lcheck(new_a)
            else:
                return rcheck(new_a)
        else:
            return 1

if __name__=="__main__":
    n = int(input())
    a = list(map(int, input().split()))
    if lcheck(a) >= rcheck(a):
        print(lcheck(a))
    else:
        print(rcheck(a))