一、注意事项。
使用math库(python内置库)。
没有使用GUI(too difficult),用户交互界面略显繁琐。
没有错误检测,略显呆滞。
这些功能后续将会完善。
二、代码展示。
import math
def fun(theta):
return (math.pi / 180) * theta
class xiangliang:
def __init__(self):
self.shi = 0 # 实部
self.xu = 0 # 虚部
self.p = 0 # 模
self.theta = 0 # 角度 DEG
pass
def cal_rou(self, shi, xu): # 计算模和辅角
self.shi = shi
self.xu = xu
if self.shi==0:
self.theta=90
else:
self.theta = math.atan(self.xu / self.shi) * 180 / math.pi # deg形式输出θ
self.p = (self.shi ** 2 + self.xu ** 2) ** 0.5
def cal_fushu(self, p, t): # 计算实部和虚部
self.p = p
self.theta = t
self.shi = self.p * math.cos(fun(self.theta))
self.xu = self.p * math.sin(fun(self.theta))
def printf(self, mode=3): # 模式1 复数形式 模式2 极坐标形式 模式3 全输出
if mode == 1 or mode == '1':
if self.xu >= 0:
print("复数形式:", self.shi, '+j', self.xu)
else:
print("复数形式:", self.shi, '-j', abs(self.xu))
elif mode == 2 or mode == '2':
print("极坐标形式:", self.p, '∠', self.theta, '°')
elif mode == 3 or mode == '3':
if self.xu >= 0:
print("复数形式:", self.shi, '+j', self.xu)
else:
print("复数形式:", self.shi, '-j', abs(self.xu))
print("极坐标形式:", self.p, '∠', self.theta, '°')
else:
print("输出模式有错误,选择其他形式 mode=1 为复数形式 mode=2为极坐标模式 mode=3 全输出模式")
def calculate(obj1, obj2, mode): # mode + - * / obj为相量
result = xiangliang()
if mode == "+":
result.shi = obj1.shi + obj2.shi
result.xu = obj1.xu + obj2.xu
result.cal_rou(result.shi, result.xu) # 计算乘积向量的模和辅角
elif mode == '*':
result.shi = obj1.shi * obj2.shi - obj1.xu * obj2.xu
result.xu = obj1_shi * obj2.xu + obj1.xu * obj2.shi
result.cal_rou(result.shi, result.xu) # 计算乘积向量的模和辅角
elif mode == '-':
result.shi = obj1.shi - obj2.shi
result.xu = obj1.xu - obj2.xu
result.cal_rou(result.shi, result.xu)
elif mode == '/':
'''极坐标形式来计算除法'''
if obj2.p!=0:
result.p = obj1.p / obj2.p
else:
result.p=0
result.theta = obj1.theta - obj2.theta
result.cal_fushu(result.p, result.theta)
else:
print("模式错误,选择+-*/模式")
return result
def specific(obj,num1,num2,mode): # mode=1 输入模式为极坐标 mode=2 输入模式为复数形式
if mode==1 or mode=='1':
obj.cal_fushu(num1,num2)
elif mode==2 or mode == '2':
obj.cal_rou(num1,num2)
if __name__ == '__main__':
list_xiang=[0,0]
print("输入规则:极坐标形式就用'/'分开,复数形式用','分开(不含j)")
num1 = input("向量1:")
num2 = input("向量2:")
mode1=2
mode2=2
if '/' in num1:
num1=num1.split('/')
mode1=1
elif ',' in num1:
num1=num1.split(',')
else:
num1=num1.split(',')
if '/' in num2:
num2 = num2.split('/')
mode2=1
elif ',' in num2:
num2 = num2.split(',')
else:
num2 = num2.split(',')
print(num1,num2)
xiang1 = xiangliang()
specific(xiang1,eval(num1[0]),eval(num1[1]),mode1)
xiang2 = xiangliang()
specific(xiang2, eval(num2[0]),eval(num2[1]), mode2)
print("您输入的向量的信息:")
print("向量1")
xiang1.printf()
print("向量2")
xiang2.printf()
mode=input("输入您需要的运算方式:+ — * /")
print("结果")
calculate(xiang1, xiang2, '/').printf()