Python 创建一个复数类

-1 投票
5 回答
2565 浏览
提问于 2025-04-17 05:17

我在用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) 首先,这段代码不工作,因为我在初始化方法里用了两个参数,当我试着用a=mycomplex()来创建一个实例时,当然会报错。我能不能不改初始化方法就解决这个问题呢?

2) 为了让我更好地理解,我想用两种方式来使用加法方法,就像我在代码里说的那样。我觉得这样会对我有帮助。用a.addition()和c=a.addition(b)说出来是不同的。

3) 如果你有更好的建议来实现上面的内容,请告诉我。我想你明白我想表达的意思。

谢谢!

5 个回答

1

Python里面有一个内置的复数类型,随时可以使用。你可以在Python的解释器里输入 5+3j + 8+4j 来试试...

2

Python 默认支持复数。

你可以查看 这里这里这里 来了解更多。

补充:也许你会对以下内容感兴趣:

你的 read_data 可能无法正确工作,原因如下:

real = input(..) 这行代码会创建一个新的局部变量 real。你可能想要修改的是 self.real,所以应该写成 self.real = float(input(...)),并且要把输入的值转换成浮点数。

另外,你的构造函数需要你提供两个参数。因此,你应该调用 mycomplex(1,2)(或者其他值)。如果你想要默认值,可以把 __init__ 改成 def __init__(self, real=0, imag=0)

为了让代码更易读,你可以定义一个方法 __add__(self, other)。这样,你就可以用 x+y 来表示你的复数相加。

-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)

撰写回答