python创建一个复数的类

时间:2011-10-30 15:15:10

标签: python

我在c ++中完成了这个,但我正在尝试python并遇到困难。我做了这段代码:

class mycomplex:
def __init__(self,real=None,imag=None):
    self.real=real
    self.imag=imag

def read_data(self):
    self.real=input("Give the real part :")
    self.imag=input("Give the imag part :")

def addition(self,complex):
    return mycomplex(self.real+complex.real,self.imag+complex.imag)


def __str__(self):
    return ("{0} {1} {2} {3}{4}".format("The complex is : ",self.real,"+",self.imag,"j"))


if __name__=="__main__":

a=mycomplex()
b=mycomplex()
a.read_data()
b.read_data()
print(a)
print(b)
c=a.addition(b)
print(c)

1)首先它不起作用,因为我在init方法中有2个参数,当我尝试用a = mycomplex()创建一个实例时,它当然给了我一个错误。我可以在一些中处理它不改变init的方式吗?

2)为了让我明白我想用2种方法来使用加法,就像我在代码中所说的那样。我认为这对我有所帮助。说a.addition()和c = a.addition是不同的。 (b)中。

3)如果你有更好的建议,请说出来。我想你明白我想告诉你的。

谢谢!

5 个答案:

答案 0 :(得分:2)

Python默认实现了复数。

请参阅hereherehere

编辑:也许您对以下内容感兴趣:

由于以下情况,您的read_data将无法正常运行:

real = input(..)创建一个新的本地变量real。您可能想要修改self.real,因此您应该编写self.real = float(input(...)),并将其转换为float。

此外,你的构造函数需要你给它2个参数。因此,您应该调用mycomplex(1,2)(或其他值)。如果您需要默认值,可以将__init__更改为def __init__(self, real=0, imag=0)

为了便于阅读,您可以定义方法__add__(self, other)。然后,您可以使用x+y作为复数。

答案 1 :(得分:1)

python具有内置的复杂类型,随时可用。尝试在python解释器中键入5+3j + 8+4j ...

答案 2 :(得分:0)

您可以在None

中默认为__init__()
def __init__(self, real=None, imag=None):
    if real is not None:
        self.real=real
    else:
        self.real=0

    if imag is not None:
        self.imag=imag
    else:
        self.imag=0

然后您可以在没有任何参数的情况下调用mycomplex()realimag组件将为0。

您可能还需要考虑实施__add__()功能,而不是addition()

答案 3 :(得分:0)

您可以将代码更改为:

def __init__(self,real=None,imag=None):
    self.real=real;
    self.imag=imag;

def read_data(self):
    self.real=input("Give the real part :")
    self.imag=input("Give the imag part :")

答案 4 :(得分:-1)

1)是的,您可以使用默认值使其工作:

def __init__(self,real=0,imag=0):
    ...

将使用函数签名中指定的默认值来代替缺少的参数。

2)我不明白你编写附加内容的第一种方式:当你写a.addition()时,你在a添加了什么?

第二种方式(a.addition(b))非常清楚,但您需要更改定义addition()的方式:

def addition(self,complex):
    return mycomplex(real+complex.real,imag+complex.imag)