python - 来自 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'
解决方案
您没有返回递归 lcheck 和 rcheck 调用的结果(没有返回 -> 你得到一个无),将其更改为:
if len(l)>1:
return lcheck(l)
else:
return 1
更多提示:
- lcheck 和 rcheck 共享大部分代码,这是不可取的
- 你可以使用 max(p, r)
- 使用描述性变量名,而不仅仅是单个字母(有时也可以)
推荐阅读
- python - Odoo 11 社区工资单模块
- c# - 通过 Linq 左连接使用来自多个 MongoDB 集合的信息填充类
- ios - 代号一构建错误,无法在IOS应用中构建
- vba - 从特定工作表复制未知范围
- linux - IFS=';' 读取 -a 数组不拆分“;” 当输入包含换行符时正确
- javascript - TypeError:无法读取未定义的属性“id”(也是“startWith”)
- python - 拆分文本而不分开,例如“纽约”
- javascript - 如何验证 IP 地址以确保用户在四部分中输入 3 位数字?
- ios - NSAttributed 字符串文档类型问题
- angular - 将一系列嵌套的 Promise 转换为 @Effect