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
作为A
和B
的值时,输出仍然是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)
我还尝试将aInput
和bInput
之间的and
替换为or
,这似乎可行,但与XOR
和XNOR
盖茨重复使用有点困难:
#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 模拟的主要内容,如果未能解决你的问题,请参考以下文章
尝试为 nand2tetris 构建 PC(计数器),但我在逻辑上遇到了一些问题