Python报错TypeError: '<='不支持types.GenericAlias与int比较的解决
二分查找小游戏的TypeError错误分析与解决
错误原因
触发TypeError: '<=' not supported between instances of 'types.GenericAlias' and 'int'的核心问题在binary_search函数里的这行代码:
guess = list[mid]
这里误用了Python内置的list类型名称,而非传入的函数参数my_list。list是代表列表类型的GenericAlias对象,不是你定义的具体列表,用它索引整数mid会得到一个类型别名,后续和整数类型的users_input比较时,就会触发类型不兼容的错误。
解决办法
1. 修复核心错误
把list[mid]改成my_list[mid],才能正确从目标列表中取出对应索引的元素:
def binary_search(my_list, users_input): low = 0 high = len(my_list)-1 while low <= high: # 修正循环条件,原条件low < high会漏掉最后一个匹配元素 mid = (low + high) // 2 guess = my_list[mid] # 核心错误修复处 if guess == users_input: return mid if guess < users_input: low = mid + 1 else: high = mid - 1 return None
2. 修复其他潜在问题
除核心错误外,代码还有几处需要调整的细节:
- 原循环条件
low < high会导致目标元素在最后一个位置时无法匹配,改为low <= high才能覆盖所有查找场景 guess_the_number函数直接使用全局变量input_binary_search,若用户输入的数字不在列表中,该变量会是None,后续和整数比较会报错,需增加判断:
def guess_the_number(): if input_binary_search is None: print("你输入的数字不在列表里,请重新运行程序选择列表中的数字!") return while True: users_position = int(input("请输入你认为该数字在列表中的位置:")) if users_position == input_binary_search: print("很棒!你猜对了二分查找得出的位置!") break elif users_position < input_binary_search: print("你猜的位置比二分查找得到的位置小") else: print("你猜的位置比二分查找得到的位置大")
- 初始欢迎文本存在语法错误,换行拼接需修正:
print("欢迎来到我的小游戏!\n你的任务是:\n1. 从下方列表中选一个数字\n2. 猜测这个数字在列表中的位置")
完整修正后的代码
my_list = [ 1, 2, 4, 5, 8, 9, 10, 11, 15, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 40, 41, 42, 43, 47, 48, 49, 50 ] # 二分查找函数 def binary_search(my_list, users_input): low = 0 high = len(my_list)-1 while low <= high: mid = (low + high) // 2 guess = my_list[mid] if guess == users_input: return mid if guess < users_input: low = mid + 1 else: high = mid - 1 return None # 猜位置逻辑 def guess_the_number(): if input_binary_search is None: print("你输入的数字不在列表里,请重新运行程序选择列表中的数字!") return while True: users_position = int(input("请输入你认为该数字在列表中的位置:")) if users_position == input_binary_search: print("很棒!你猜对了二分查找得出的位置!") break elif users_position < input_binary_search: print("你猜的位置比二分查找得到的位置小") else: print("你猜的位置比二分查找得到的位置大") # 游戏启动流程 print("欢迎来到我的小游戏!\n你的任务是:\n1. 从下方列表中选一个数字\n2. 猜测这个数字在列表中的位置") print(my_list) users_input = int(input("请输入列表中的一个数字:")) input_binary_search = binary_search(my_list, users_input) guess_the_number()
内容的提问来源于stack exchange,提问作者ad13
相关产品推荐
相关产品推荐

