首页 > 解决方案 > 来自 codeforces 的 thanos 排序问题。错误:TypeError:“NoneType”和“NoneType”的实例之间不支持“<”

问题描述

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

Thanos sort 是一种超级反派的排序算法,其工作原理如下:如果数组没有排序,则打响指*删除前半部分或后半部分,然后重复该过程。

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

*需要无限手套。

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

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

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

TypeError: 'NoneType' 和'NoneType on the line with comment error' 的实例之间不支持'<'

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()

42 l = list(map(int,l)) 43 return l ---> 44 find() 中的 TypeError Traceback (最近一次调用最后一次)

<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'

标签: pythonsortingnon-type

解决方案


您没有返回递归 lcheck 和 rcheck 调用的结果(没有返回 -> 你得到一个无),将其更改为:

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

更多提示:

  • lcheck 和 rcheck 共享大部分代码,这是不可取的
  • 你可以使用 max(p, r)
  • 使用描述性变量名,而不仅仅是单个字母(有时也可以)

推荐阅读