如何从3位加法器真值表函数输出生成二维数组
如何将3位加法器真值表函数输出转为二维数组
现有一个生成3位加法器真值表的Python函数,但它仅将结果打印输出,无法直接得到二维数组结构的结果。原函数代码如下:
import numpy as np def truthTable(inputs=3): if inputs == 3: print(" A B C S Cout ") for a in range(0, 2): for b in range(0, 2): for c in range(0, 2): cout = eval("((a & b) | (a & c) | (b & c))") s = eval("(a ^ b ^ c)") print(str(a) + "," + str(b) + "," + str(c) + "," + str(s) + "," + str(cout)) truthTable()
修改方案:让函数返回二维数组结构
核心思路是创建一个容器(列表)存储每一行的真值表数据,最后返回这个容器;如果需要numpy数组,再将列表转换为numpy数组即可。同时可以去掉不必要的eval调用,直接使用位运算提升效率和安全性。
方案1:返回普通Python二维列表
def truthTable(inputs=3): truth_table = [] if inputs == 3: for a in range(2): for b in range(2): for c in range(2): # 直接计算进位和和值,无需eval cout = (a & b) | (a & c) | (b & c) s = a ^ b ^ c # 将当前行数据加入列表 truth_table.append([a, b, c, s, cout]) return truth_table # 使用示例 table = truthTable() print(table)
执行后table就是一个二维列表,每个子元素对应真值表的一行,输出如下:
[[0, 0, 0, 0, 0], [0, 0, 1, 1, 0], [0, 1, 0, 1, 0], [0, 1, 1, 0, 1], [1, 0, 0, 1, 0], [1, 0, 1, 0, 1], [1, 1, 0, 0, 1], [1, 1, 1, 1, 1]]
方案2:返回numpy二维数组
如果需要numpy格式的二维数组,只需在返回时将列表转换为np.array即可:
import numpy as np def truthTable(inputs=3): truth_table = [] if inputs == 3: for a in range(2): for b in range(2): for c in range(2): cout = (a & b) | (a & c) | (b & c) s = a ^ b ^ c truth_table.append([a, b, c, s, cout]) return np.array(truth_table) # 使用示例 table = truthTable() print(table)
执行后得到的table是numpy数组,输出如下:
[[0 0 0 0 0] [0 0 1 1 0] [0 1 0 1 0] [0 1 1 0 1] [1 0 0 1 0] [1 0 1 0 1] [1 1 0 0 1] [1 1 1 1 1]]
内容的提问来源于stack exchange,提问作者Rupak
相关产品推荐
相关产品推荐

