我试图创建一个程序来查找数字是否为素数。
文件2:
class Number():
def __init__(self, x):
self.x = float(x)
def is_prime(x):
x = x
Div = 2
while ((x / 2) > Div):
if(x == 2):
return True
elif(x == 3):
return True
else:
while((x / 2) > Div):
if(x%Div == 0):
return False
elif(Div >= (x / 2)):
return True
else:
Div = Div + 1
文件1:
from File2 import *
N = Number(10)
print N.is_prime()
当我运行它时,我得到了这个:
Traceback (most recent call last):
File "File 1", line 5, in <module>
print N.is_prime()
File "File 2", line 19, in is_prime
while ((x / 2) > Div):
TypeError: unsupported operand type(s) for /: 'instance' and 'int'
任何人都知道如何解决这个问题?
答案 0 :(得分:4)
你的语法很混乱。任何Python类中实例方法的第一个参数始终是实例本身,通常称为self
。仅仅因为您已将参数x
称为“x
”并未将其设置为您最初设置的实际属性x.x
:您必须引用self.x
。但最好使用标准名称,并参考def is_prime(self):
x = self.x
:
{{1}}
答案 1 :(得分:2)
您实际上是在尝试self / 2
。参数x
指向 self ,因为它是Number
类的实例,所以您收到此错误。
您需要使用x
替换传递给您的方法的self.x
,并将方法的签名更改为:
def is_prime(self):
x = x # remove this
Div = 2
while ((self.x / 2) > Div):
....
答案 2 :(得分:2)
@Daniel Roseman已经解决了类定义的语法问题。这是对您选择的算法本身的更正,如果None
为素数,则返回return
(如果函数退出而不遇到明确的x
语句,则返回while
)将4标识为素数。您的嵌套class Number():
def __init__(self, x):
self.x = float(x)
def is_prime(self):
x = self.x
if(x == 2):
return True
elif(x == 3):
return True
else:
Div = 2
while((x / 2) >= Div):
if(x%Div == 0):
return False
else:
Div = Div + 1
return True
for i in range(2,36):
N = Number(i)
print i, N.is_prime()
循环不是必需的。尝试:
{{1}}