Created
July 4, 2013 19:38
-
-
Save diegorocha/5929824 to your computer and use it in GitHub Desktop.
Um exemplo em Python de como fazer as funções NOT, AND e OR utilizando apenas as funções NAND ou NOR.
O script produz uma tabela verdade que compara as três funções com as suas implementações alternativas.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
""" Funções básicas """ | |
def nao(a): | |
a = int(a) | |
if a == 0: | |
return 1 | |
if a == 1: | |
return 0 | |
def e(a, b): | |
return int((a == 1) and (b == 1)) | |
def ou(a, b): | |
return int((a == 1) or (b == 1)) | |
""" Funções NAND e NOR""" | |
def nand(a, b): | |
return nao(e(a,b)) | |
def nor(a, b): | |
return nao(ou(a,b)) | |
"""" Funções compostas somente através da NAND """ | |
def nao_nand(a): | |
return nand(a, a) | |
def e_nand(a, b): | |
return nand(nand(a, b), nand(a, b)) | |
def ou_nand(a, b): | |
return nand(nand(a, a), nand(b, b)) | |
"""" Funções compostas somente através da NOR """ | |
def nao_nor(a): | |
return nor(a, a) | |
def e_nor(a, b): | |
return nor(nor(a, a), nor(b, b)) | |
def ou_nor(a, b): | |
return nor(nor(a, b), nor(a, b)) | |
if __name__ == '__main__': | |
print 'Tabela Verdade\nA B NA NA1 NA2 E E1 E2 OU OU1 OU2' | |
for a in range(0, 2): | |
for b in range(0, 2): | |
print str.format('{} {} {:2} {:3} {:3} {} {:2} {:2} {:2} {:3} {:3}', a, b, nao(a), nao_nand(a), nao_nor(a), e(a, b), e_nand(a, b), e_nor(a, b), ou(a, b), ou_nand(a, b), ou_nor(a, b)) | |
print """ | |
Legenda | |
NA : Nao A | |
NA1: Nao A (utilizando somente nand) | |
NA2: Nao A (utilizando somente nor) | |
E : A * B | |
E1 : A * B (utilizando somente nand) | |
E2 : A * B (utilizando somente nor) | |
OU : A + B | |
OU1: A + B (utilizando somente nand) | |
OU2: A + B (utilizando somente nor)""" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment