类型错误:'&燃气轮机';在';int';和';非类型';用Python
我的代码中出现以下错误: 文件“C:\Users\angelica\Documents\ING.DE SISTEMAS\Semestre VI\ADA\popes.py”,第35行,求解上界= 上界搜索(popes,0,len_popes-1,n) 文件“C:\Users\angelica\Documents\ING.DE SISTEMAS\Semestre VI\ADA\popes.py”,第9行,在上限搜索中 如果x>arr[hi]: TypeError:“int”和“NoneType”的实例之间不支持“>”类型错误:'&燃气轮机';在';int';和';非类型';用Python,python,Python,我的代码中出现以下错误: 文件“C:\Users\angelica\Documents\ING.DE SISTEMAS\Semestre VI\ADA\popes.py”,第35行,求解上界= 上界搜索(popes,0,len_popes-1,n) 文件“C:\Users\angelica\Documents\ING.DE SISTEMAS\Semestre VI\ADA\popes.py”,第9行,在上限搜索中 如果x>arr[hi]: TypeError:“int”和“NoneType”的实
TypeError:“int”和的实例之间不支持“>” “非类型” 我知道这一定是逻辑上的错误,但我似乎看不出问题出在哪里。如果有人能帮助我,我将不胜感激
from sys import stdin
MAX = 5005
Y,P,pope = None,None,[ None for _ in range(MAX) ]
def upper_bound_search(arr, lo, hi, x):
if x <= arr[lo]:
return lo
if x > arr[hi]:
return -1
mid = ((lo+hi))//2
if x == arr[mid]:
return mid
elif x > arr[mid]:
if mid+1 <= hi and x <= arr[mid+1]:
return mid+1
else:
return upper_bound_search(arr, mid+1, hi, x)
else:
if mid-1 >= lo and x > arr[mid-1]:
return mid
else:
return upper_bound_search(arr,lo, mid-1, x)
def solve(year, popes):
a,b,c = -1, -1, -1
len_popes = len(popes)
for i in range(len_popes):
y = popes[i]
n = y + year -1
upper_bound = upper_bound_search(popes, 0, len_popes-1 , n)
temp = (upper_bound - i)
if a < temp :
a = temp
b = y
c = popes[upper_bound]
return a,b,c
def main():
global Y,P,pope
line = stdin.readline()
while len(line)!=0:
Y,P = int(line),int(stdin.readline())
for p in range(P): pope[p] = int(stdin.readline())
ans = solve(Y, pope)
print('{0} {1} {2}'.format(ans[0], ans[1], ans[2]))
line = stdin.readline()
if len(line)!=0: line = stdin.readline()
main()
在你的全球宣言中
MAX = 5005
Y,p,pope=None,None,[None]*MAX
在上限搜索中比较变量pope的int和none。None在python中是非值,在某些其他编程语言中相当于null。考虑在数组中使用0,这样您就可以执行整数比较。< /p> < p>您将全局代码< pope >代码>列表初始化为5005个代码>没有“< /代码> s”。这意味着
len(pope)
将计算为5005。用于测试的数据的值远小于5005
当您调用上限搜索()
时,您可以这样调用它:
upper\u bound=上界搜索(popes,0,len\u popes-1,n)
这意味着hi
的值为5004(5005-1=5004)
在main()
函数中,只填充pope
全局列表的第一个p
索引:
范围(p)中的p的:pope[p]=int(stdin.readline())
因此,只有列表中的第一个p
项将具有整数值,而列表中的所有其他项将具有值None
。根据您提供的测试数据,P
比5005小得多
然后,什么时候排队?
如果x>arr[hi]:
在上限搜索()中到达,则hi
的值为5004arr[hi]
计算结果为None
,x
为整数。没有为None
定义
运算符,因为说None
小于或大于某个数值没有任何意义
您可以尝试将p-1
作为hi
的值传递。或者,您也可以尝试通过添加数据来动态增加您的pope
列表,而不是用一个非常大的列表来浪费内存。请添加完整的错误消息。我刚刚编辑并添加了错误消息,感谢您的注释!显然,arr[hi]
是一个None
。事实上,整个列表是None
s。您希望从中找到什么?这似乎表明arr
没有索引为hi
的值recursion@DYZ如果整个列表是None
,那么x使用零表示“空值”会破坏OP的算法吗?如果零是可能的真实数据值呢?我认为OP确实需要正确跟踪列表中有多少项包含真实数据。
MAX = 5005