Python 逻辑代码:AND、NAND、OR、NOR、XOR、XNOR 和 NOT 模拟

Posted

技术标签:

【中文标题】Python 逻辑代码:AND、NAND、OR、NOR、XOR、XNOR 和 NOT 模拟【英文标题】:Python Logic Code: AND, NAND, OR, NOR, XOR, XNOR, & NOT simulation 【发布时间】:2018-11-18 01:12:30 【问题描述】:

我正在尝试找出我的代码无法正常工作的原因。为什么我的一些逻辑门,比如OR,没有给我正确的输出?以OR 门为例。当我运行代码并传入1 作为AB 的值时,输出仍然是False。我试过调整它,它仍然给我False 作为输出。

以下是我目前所做的一个示例:

aInput = int(input('Enter value for A: '))
bInput = int(input('Enter value for B: '))

#AND Gate
if aInput == 1 and bInput == 1:
    ANDGate = "True"
    ANDGateNum = 1
else:
    ANDGate = "False"
    ANDGateNum = 0

print('AND Gate output is', ANDGate, 'or', ANDGateNum)

#NAND Gate
if aInput == 1 and bInput == 1:
    NANDGate = "False"
    NANDGateNum = 0
else:
    NANDGate = "True"
    NANDGateNum = 1

print('NAND Gate output is', NANDGate, 'or', NANDGateNum)

#OR Gate
if aInput == 1 and bInput == 1:
    ORGate = "True"
    ORGateNum = 1
if aInput == 1 and bInput == 0:
    ORGate = "True"
    ORGateNum = 1
if aInput == 0 and bInput == 1:
    ORGate = "True"
    ORGateNum = 1
else:
    ORGate = "False"
    ORGateNum = 0

print('OR Gate output is', ORGate, 'or', ORGateNum)

#NOR Gate
if aInput == 1 and bInput == 1:
    NORGate = "False"
    NORGateNum = 0
if aInput == 1 and bInput == 0:
    NORGate = "False"
    NORGateNum = 0
if aInput == 0 and bInput == 1:
    NORGate = "False"
    NORGateNum = 0
else:
    NORGate = "True"
    NORGateNum = 1

print('NOR Gate output is', NORGate, 'or', NORGateNum)

#XNOR Gate
if aInput == 1 and bInput == 1:
    XNORGate = "True"
    XNORGateNum = 1
if aInput == 1 and bInput == 0:
    XNORGate = "False"
    XNORGateNum = 0
if aInput == 0 and bInput == 1:
    XNORGate = "False"
    XNORGateNum = 0
else:
    XNORGate = "True"
    XNORGateNum = 1

print('XNOR Gate output is', XNORGate, 'or', XNORGateNum)

#XOR Gate
if aInput == 1 and bInput == 1:
    XORGate = "False"
    XORGateNum = 0
if aInput == 1 and bInput == 0:
    XORGate = "True"
    XORGateNum = 1
if aInput == 0 and bInput == 1:
    XORGate = "True"
    XORGateNum = 1
else:
    XORGate = "False"
    XORGateNum = 0

print('XOR Gate output is', XORGate, 'or', XORGateNum)

#NOT Gate
if aInput == 1: 
    NOTGate = "False"
    NOTGateNum = 0

else:
    NOTGate = "True"
    NOTGateNum = 1

print('NOT Gate output is', NOTGate, 'or', NOTGateNum)

我还尝试将aInputbInput 之间的and 替换为or,这似乎可行,但与XORXNOR 盖茨重复使用有点困难:

#OR Gate
if aInput == 1 or bInput == 1:
    ORGate = "True"
    ORGateNum = 1
else:
    ORGate = "False"
    ORGateNum = 0

print('OR Gate output is', ORGate, 'or', ORGateNum)

#NOR Gate
if aInput == 1 or bInput == 1:
    NORGate = "False"
    NORGateNum = 0
else:
    NORGate = "True"
    NORGateNum = 1

print('NOR Gate output is', NORGate, 'or', NORGateNum)

【问题讨论】:

非常漂亮的图片。但请发布文字,而不是图片。 我看到你正在使用 if if if else。尝试使用 if elif elif else 代替。如果不清楚原因,请尝试此链接以获取更多信息:***.com/questions/9271712/… @alfonso 还没学会。我试试看,谢谢! 我回答了你的问题,因为我很同情迟到并且不知道如何完成你的作业,但请稍后再回来编辑你的问题。在 SO,我们努力使网站达到一定的标准,以造福于使用它的每个人。 @alfonso 谢谢!我想出了如果我想展示一小段代码我必须做什么。 【参考方案1】:

如 cmets 中所述,尝试使用 elif。欢迎使用 Stack Overflow!

#OR Gate  
if aInput == 1 and bInput == 1:  
    ORGate = "True"  
    ORGateNum = 1  
elif aInput == 1 and bInput == 0:  
    ORGate = "True"  
    ORGateNum = 1  
elif aInput == 0 and bInput == 1:  
    ORGate = "True"  
    ORGateNum = 1  
else:  
    ORGate = "False"  
    ORGateNum = 0  

print('OR Gate output is', ORGate, 'or', ORGateNum) 

【讨论】:

成功了!太感谢了。我以前从未听说过 elif,所以这太棒了:) 太好了,很高兴它成功了。如果您想“接受”我的回答,请按其左侧的复选标记。如果你这样做,我们都会得到奖励。如果您认为有更好的答案,则不必接受我的答案,那很好。但请接受一个答案,以便问题结束。 我很可能会 :) 实际上我最终为我的 OR 和 NOR 门使用了不同的东西(我在上面的问题中发布了它),并在 XOR 和 XNOR 门上使用了 elif,因为它们是仅当输入相同时为真或假。但是,假设我的教授不接受 elifs(他说现在我仔细检查了使用 if 语句),我将如何对这两个门(XOR 和 XNOR)使用 if 语句? 我可以保证他不会有elif的问题。 elif 是“else if”的简写。 “if 语句”由“if、else if、else”组成。这是编程和控制结构的基本组成部分,他必须非常不合理地不接受。 我提交了它并仔细检查了所有的门都显示了正确的输出。绝对是我从您(以及其他发表评论的人)那里学到的很棒的东西。非常感谢您的帮助以及热情、耐心和告知。 :)【参考方案2】:

您可能还对 AND (&)、OR (|) 和 XOR (^) 的位运算符感兴趣:

a = int(input('Enter value for A (0 or 1): '))
b = int(input('Enter value for B (0 or 1): '))

print("AND: ", bool(a & b))
print("OR:  ", bool(a | b))
print("XOR: ", bool(a ^ b))

这只会在用户输入 0 或 1 时输出您期望的结果。

输入 A 的值(0 或 1):1 输入 B 的值(0 或 1):1 并且:是的 或:真 异或:假 输入 A 的值(0 或 1):1 输入 B 的值(0 或 1):0 并且:错误 或:真 异或:真

【讨论】:

太棒了!甚至不知道这存在。会记住它。让它超级简单:)

以上是关于Python 逻辑代码:AND、NAND、OR、NOR、XOR、XNOR 和 NOT 模拟的主要内容,如果未能解决你的问题,请参考以下文章

NAND、NOR、XNOR 的逻辑运算符优先级

01-布尔逻辑的习题

[HNOI2012]与非

尝试为 nand2tetris 构建 PC(计数器),但我在逻辑上遇到了一些问题

三极管组成逻辑门电路的办法(AND,OR,NAND,NOR,EXOR)

什么叫NAND闪存?什么叫NOR闪存? 这两者有什么区别?