【发布时间】:2021-11-03 19:05:59
【问题描述】:
我正在为 AI 和 Python 的初学者做一个作业。
创建一个继承自 int 的类 NewInt。它应该有一个实例方法 is_fibonacci (),如果数字是斐波那契数,则返回 True,否则返回 False。使用 NewInt 从 0 到 1000 生成一个列表。然后使用您创建的类和实例方法创建一个仅保留斐波那契数字的列表理解。
[0, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987] #任务的预期输出
我为这个任务编写了这段代码
import math
class NewInt(int):
def is_Perfect_Square(x):
s = int(math.sqrt(x))
return s*s == x
def is_fibonacci(n):
return is_Perfect_Square(5*n*n + 4) or is_Perfect_Square(5*n*n - 4)
fibonacci_List = [i for i in range(0,1000)if NewInt().is_fibonacci(i)]
print(fibonacci_List)
几个小时前它工作了,但我收到这样的错误:
TypeError Traceback (most recent call last)
<ipython-input-8-377e0f9b7814> in <module>
1 import math
2
----> 3 class NewInt(int):
4
5 def is_Perfect_Square(x):
<ipython-input-8-377e0f9b7814> in NewInt()
11 return is_Perfect_Square(5*n*n + 4) or is_Perfect_Square(5*n*n - 4)
12
---> 13 fibonacci_List = [i for i in range(0,1000)if NewInt().is_fibonacci(i)]
14 print(fibonacci_List)
<ipython-input-8-377e0f9b7814> in <listcomp>(.0)
11 return is_Perfect_Square(5*n*n + 4) or is_Perfect_Square(5*n*n - 4)
12
---> 13 fibonacci_List = [i for i in range(0,1000)if NewInt().is_fibonacci(i)]
14 print(fibonacci_List)
TypeError: is_fibonacci() takes 1 positional argument but 2 were given
谁能帮我指出我的错误?我是 Python 新手。
【问题讨论】:
-
您在这里有些混淆实例和静态方法。你可以试试
NewInt.is_fibonacci(i),但整个NewInt类并没有那么大的意义。另外,为什么不直接生成斐波那契数列,而不是测试每个数字是否是斐波那契数呢? -
您的代码缩进不正确。
-
你的类方法需要
self的第一个参数来包含实例引用。