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

Python除数代码报错:int与builtin_function_or_method无法比较及内置函数使用咨询

问题分析与解决方案

一、错误原因及修复

你遇到的not supported between instances of 'int' and 'builtin_function_or_method'错误,核心问题出在这行代码:

max_count=max

这里的max是Python的内置函数,不是你需要的数值变量。执行这行后,max_count从整数类型变成了函数对象,后续再执行if counter > max_count:时,就会出现整数与函数无法比较的错误。

修复后的完整代码

删掉elif块中错误的max_count=max即可,因为当counter == max_count时,不需要修改max_count的值,只需处理更大数字的更新逻辑:

def divisors(num):
    counter=1
    for i in range(1,num):
        x = num%i
        if x==0:
            counter+=1
    return counter

max_count= 0
Number=0
for i in range(3):
    number = int(input('\nEnter the Number : '))
    counter=divisors(number)

    if counter > max_count:
        max_count=counter
        Number=number

    elif counter==max_count:
        if number>Number:
            Number=number    

print('\n',Number,max_count)

另外补充:原divisors函数的range(1,num)会漏掉数字本身这个约数,若需要统计完整约数,建议改成range(1, num+1)。

二、用内置函数优化约数统计代码

以下几种方式可以用Python内置函数简化并优化你的约数统计逻辑:

方法1:用sum()结合生成器表达式

通过生成器表达式遍历所有可能的除数,用sum()直接统计符合条件的数量,代码更简洁:

def divisors(num):
    # 遍历1到num的所有数,能整除则计1,sum求和得到总约数个数
    return sum(1 for i in range(1, num+1) if num % i == 0)

方法2:结合math.sqrt()优化效率(推荐)

利用约数成对出现的特性(如i和num/i),结合math.sqrt()减少循环次数,大幅提升大数处理效率:

import math

def divisors(num):
    count = 0
    sqrt_num = int(math.sqrt(num))
    for i in range(1, sqrt_num + 1):
        if num % i == 0:
            # 平方数的平方根只算一次约数
            if i == num // i:
                count += 1
            else:
                count += 2
    return count

方法3:用filter()筛选约数

通过filter()函数筛选出能整除目标数的元素,再用len()统计数量:

def divisors(num):
    # filter返回符合条件的迭代器,转成列表后用len统计长度
    return len(list(filter(lambda x: num % x == 0, range(1, num+1))))

内容的提问来源于stack exchange,提问作者Mohammadreza Shahsavar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:10:19