[python] 卡诺图化简 3

还是把剩下的也完成了吧, 不然好像不对, 要直观展示出来才行. 于是耽搁中午半个小时,调式出来了, 完整代码我放在gitee上供大家参考.

# est_all 是上面计算的分组信息
# ti 通过输入计算的最少逻辑位数
# 打印
team_syms = []
for i, t in enumerate(est_all):
    team_sym = []
    for e in t:
        # 找到被切换的
        ts_e = list(ts[e])
        t = ts_e[0]
        tn = 0
        for n in ts_e[1:]:
            tn |= t ^ n       
        item_sym = ''  
        for b in range(ti-1,-1,-1):
            if (1<<b & tn) != 0: continue
            t_sym = chr(ord('A')+ti-b-1)
            if (1<<b & t) != 0: item_sym+=f'{t_sym}'
            else: item_sym+=f'\overline{{{t_sym}}}'
        team_sym.append(item_sym)
    team_syms.append(team_sym)

for i, t in enumerate(team_syms):
    print(f'分组{i+1} : ${" + ".join(t)}$')
# 输出是这样的
分组1 : $\overline{A}B\overline{C}E + \overline{A}BC\overline{D} + \overline{B}DE + \overline{C}D + AD$
分组2 : $\overline{A}B\overline{D}E + \overline{A}BC\overline{D} + \overline{B}DE + \overline{C}D + AD$

通过latex展示是这样的:

分组1 : A ‾ B C ‾ E + A ‾ B C D ‾ + B ‾ D E + C ‾ D + A D \overline{A}B\overline{C}E + \overline{A}BC\overline{D} + \overline{B}DE + \overline{C}D + AD ABCE+ABCD+BDE+CD+AD
分组2 : A ‾ B D ‾ E + A ‾ B C D ‾ + B ‾ D E + C ‾ D + A D \overline{A}B\overline{D}E + \overline{A}BC\overline{D} + \overline{B}DE + \overline{C}D + AD ABDE+ABCD+BDE+CD+AD

这是博客的第3部分, 前两部分为
[python] 卡诺图化简
[python] 卡诺图化简 2

ps: 现在就舒服多了, 当然代码还可以优化, 比如脚本输入或者命令行参数输入,输出的格式应该在不同用途做写调整, 代码模块化也还没有做.
不过这只是一个思路, 本来就没那么完美,也就是一个参考, 工程化的东西还是大家根据自己的场景再做优化吧.

  • 20
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值