Python实现继承int的NewInt类判断斐波那契数报错求助
代码错误说明
- 实例方法未添加
self参数:Python类的实例方法第一个参数默认是代表实例自身的self,你定义的is_Perfect_Square、is_fibonacci都缺少该参数,调用时Python会自动传入实例本身,和你手动传入的参数叠加,就触发了「参数数量不匹配」的报错。 - 类内部方法调用未加
self前缀:在is_fibonacci中调用is_Perfect_Square时,需要加self.前缀才能访问当前实例的方法,直接写方法名会被识别为全局函数,找不到对应定义。 - 业务逻辑错误写在类定义内部:生成斐波那契列表、打印结果的代码不应该放在NewInt类的定义块内,需要放到类定义完成后再执行。
- 不符合作业要求的逻辑:作业要求先生成0-1000范围的NewInt实例列表,再基于实例的
is_fibonacci()方法筛选,你的代码直接筛选普通int类型数据,且调用is_fibonacci()时错误传入了参数,实际上NewInt实例本身就存储了对应数值,不需要额外传参。
修正后的完整代码
import math class NewInt(int): def is_perfect_square(self, x): s = int(math.sqrt(x)) return s * s == x def is_fibonacci(self): # 斐波那契数判定公式,当前数值为实例自身 return self.is_perfect_square(5 * self * self + 4) or self.is_perfect_square(5 * self * self - 4) # 生成0到1000范围的NewInt实例列表 new_int_list = [NewInt(i) for i in range(0, 1000)] # 列表推导式筛选所有斐波那契数 fibonacci_list = [num for num in new_int_list if num.is_fibonacci()] print(fibonacci_list)
运行结果
[0, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]
内容的提问来源于stack exchange,提问作者Nicholai Mørch Rindarøy
相关产品推荐
相关产品推荐

