使用Python实现各种逻辑门

 

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

该函数功能实现方式不止一种会有其他实现方式,有兴趣可以通过这个网站分析

NandGame - Build a computer from scratch.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值