我在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)如果你有更好的建议,请说出来。我想你明白我想告诉你的。
谢谢!
答案 0 :(得分:2)
Python默认实现了复数。
由于以下情况,您的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()
,real
和imag
组件将为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)