def nand_gate(a, b):
"""与非门(当且只当两个输入均为1时,输出才是0。)"""
return 0 if a == 1 and b == 1 else 1
def inv_gate(i):
"""非门"""
return nand_gate(i, i)
def and_gate1(a, b):
"""与门(先通过与非门,再通过非门)"""
return inv_gate(nand_gate(a, b))
def and_gate2(a, b):
"""与门(只有在两个输入均为1的时候,输出才是1)"""
return 1 if a == 1 and b == 1 else 0
def or_gate(a, b):
"""或门(a和b的值先通过非门再将a,b改变的值通过与非门)"""
return nand_gate(inv_gate(a), inv_gate(b))
def xor_gate1(a, b):
"""异或门()"""
return and_gate1(or_gate(a, b), nand_gate(a, b))
def xor_gate2(a, b):
"""异或门(当两个输入不同的时候输出1.)"""
return 1 if a != b else 0
def half_adder(a, b):
"""半加器"""
return (and_gate1(a, b), xor_gate1(a, b))
if __name__ == '__main__':
for a, b in zip([0, 1, 0, 1], [0, 0, 1, 1]):
print(f"{a} nand {b} = {nand_gate(a, b)}")
print('-------------------------------')
for i in range(2):
print(f"{i} inv = {inv_gate(i)}")
print('-------------------------------')
for a, b in zip([0, 1, 0, 1], [0, 0, 1, 1]):
print(f"{a} and1 {b} = {and_gate1(a, b)}")
print('-------------------------------')
for a, b in zip([0, 1, 0, 1], [0, 0, 1, 1]):
print(f"{a} and2 {b} = {and_gate2(a, b)}")
print('-------------------------------')
for a, b in zip([0, 1, 0, 1], [0, 0, 1, 1]):
print(f"{a} or {b} = {or_gate(a, b)}")
print('-------------------------------')
for a, b in zip([0, 1, 0, 1], [0, 0, 1, 1]):
print(f"{a} xor {b} = {xor_gate1(a, b)}")
print('-------------------------------')
for a, b in zip([0, 1, 0, 1], [0, 0, 1, 1]):
print(f"h = {half_adder(a, b)[0]}, l = {half_adder(a, b)[1]}")
运行结果
0 nand 0 = 1
1 nand 0 = 1
0 nand 1 = 1
1 nand 1 = 0
-------------------------------
0 inv = 1
1 inv = 0
-------------------------------
0 and1 0 = 0
1 and1 0 = 0
0 and1 1 = 0
1 and1 1 = 1
-------------------------------
0 and2 0 = 0
1 and2 0 = 0
0 and2 1 = 0
1 and2 1 = 1
-------------------------------
0 or 0 = 0
1 or 0 = 1
0 or 1 = 1
1 or 1 = 1
-------------------------------
0 xor 0 = 0
1 xor 0 = 1
0 xor 1 = 1
1 xor 1 = 0
-------------------------------
h = 0, l = 0
h = 0, l = 1
h = 0, l = 1
h = 1, l = 0
该函数功能实现方式不止一种会有其他实现方式,有兴趣可以通过这个网站分析