类型错误:'&燃气轮机';在';int';和';非类型';用Python

类型错误:'&燃气轮机';在';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”的实

我的代码中出现以下错误:

文件“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
的值为5004
arr[hi]
计算结果为
None
x
为整数。没有为
None
定义
运算符,因为说
None
小于或大于某个数值没有任何意义


您可以尝试将
p-1
作为
hi
的值传递。或者,您也可以尝试通过添加数据来动态增加您的
pope
列表,而不是用一个非常大的列表来浪费内存。

请添加完整的错误消息。我刚刚编辑并添加了错误消息,感谢您的注释!显然,
arr[hi]
是一个
None
。事实上,整个列表是
None
s。您希望从中找到什么?这似乎表明
arr
没有索引为
hi
的值recursion@DYZ如果整个列表是
None
,那么
x使用零表示“空值”会破坏OP的算法吗?如果零是可能的真实数据值呢?我认为OP确实需要正确跟踪列表中有多少项包含真实数据。
MAX = 5005