You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 17:45:29