电路中的相量的四则运算python实现

一、注意事项。

使用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()

猜你喜欢

转载自blog.csdn.net/weixin_52013159/article/details/121390500