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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:39:02