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) 首先,这段代码不工作,因为我在初始化方法里用了两个参数,当我试着用a=mycomplex()来创建一个实例时,当然会报错。我能不能不改初始化方法就解决这个问题呢?
2) 为了让我更好地理解,我想用两种方式来使用加法方法,就像我在代码里说的那样。我觉得这样会对我有帮助。用a.addition()和c=a.addition(b)说出来是不同的。
3) 如果你有更好的建议来实现上面的内容,请告诉我。我想你明白我想表达的意思。
谢谢!
5 个回答
Python里面有一个内置的复数类型,随时可以使用。你可以在Python的解释器里输入 5+3j + 8+4j
来试试...
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) 是的,你可以通过使用默认值来让它工作:
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)