/:'instance'和'int'的不支持的操作数类型

时间:2015-02-06 21:06:01

标签: python python-2.7

我试图创建一个程序来查找数字是否为素数。

文件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'

任何人都知道如何解决这个问题?

3 个答案:

答案 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}}