Skip to content

Instantly share code, notes, and snippets.

@diegorocha
Created July 4, 2013 19:38
Show Gist options
  • Save diegorocha/5929824 to your computer and use it in GitHub Desktop.
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.
#!/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