Python报错'int' object has no attribute 'check_div' 求解决方案
问题分析与解决
报错原因
你代码里的核心问题是变量名冲突:
- 一开始你创建了
NombrePremier类的实例number - 但在
for number in range(5,100)循环里,number被重新赋值为循环中的整数,覆盖了之前的实例对象 - 当你调用
number.check_div(number)时,此时的number是int类型,自然没有check_div方法,所以报错
修复后的代码
先修正变量名冲突,再优化质数判断的逻辑(原逻辑存在错误,比如用type(x)==float判断整除是无效的,Python3中/运算永远返回浮点数,应该用取模%判断余数是否为0):
# 创建程序检测0到100之间的所有质数 class NombrePremier: def check_div(self, number): # 小于2的数不是质数 if number < 2: return # 质数的判断:从2到sqrt(number)遍历,只要有一个能整除就不是质数 for i in range(2, int(number**0.5) + 1): if number % i == 0: return print(f"{number} 是质数!!") # 实例化类 premier_checker = NombrePremier() # 遍历0到100的数 for num in range(0, 101): premier_checker.check_div(num)
关键优化点
- 变量名:把循环变量改成
num,避免覆盖类实例 - 质数判断逻辑:
- 先排除小于2的数(质数定义是大于1的自然数)
- 遍历范围缩小到
2到sqrt(number),减少循环次数,效率更高 - 用
number % i == 0判断是否能被整除,这是正确的整除判断方式 - 只要找到一个能整除的数就直接返回,确认不是质数;遍历完都没找到则是质数
内容的提问来源于stack exchange,提问作者younes
相关产品推荐
相关产品推荐

