yFone - Yes, outra agenda telefonica escrita em python! ;- )
Publicado por Murilo R. Esplugues 30/11/2004
[ Hits: 12.468 ]
Homepage: http://www.helpday.blogspot.com/
yFone é uma agenda telefonônica escrita em python (modo-texto) e utilizando shelve como bd. Com ele você pode adicionar, remover, pesquisar e deletar nomes e telefones de sua lista de contatos.
É extremamente simples e fácil de utilizar, ela funcionou bem com uma lista de 500 números e provavelmente suportará bem mais...
Dúvidas, sugestões: mail-me.
#!/usr/bin/env python
# Fonelista (Agenda Telefonica) le, adiciona e apaga informacoes de um
# banco de dados. O codigo eh pequeno e de facil entendimento. #Mesmo que nao o usem como uma agenda, ele eh util para mostrar certas funcionalidades da linguagem, como acesso a um pseudo banco de dados e tratamento de erros basico.
# Este programa esta sendo distribuido livremente, voce tem liberdade
# para modifica-lo e distribui-lo contanto que mantenha este aviso, a
# versao, nome do autor e email.
# Programa: FONELISTA 0.1 - 10/2004
# Autor: Murilo R. Esplugues
# Sugestoes: murilo_esplugues@yahoo.com.br
# 'shelve' eh um objeto do tipo dicionario que possui persitencia,
import sys, shelve, time
## Caso nao exista tenta criar o arquivo 'contatos.db'.
def abrirDB():
dbarquivo = 'contatos.db'
try:
global db
db = shelve.open(dbarquivo)
except IOError:
print 'Erro ao abrir banco de dados!'
sys.exit(0)
print
print 'Banco de dados', dbarquivo, 'aberto!'
# Listando contatos
def STATUS():
print '\n' * 5
COUNT = 0
LINHAS = 30
for NAME in db.keys():
TESTE = len(NAME)
PONTO = '_'
SINAL = -(TESTE - 22) * PONTO
COUNT = COUNT + 1
if COUNT <= LINHAS:
print 'Nome:',NAME,SINAL,'Numero:',db[NAME]
else:
more = raw_input('Mais? (s/n): ')
if more in ['s','S']:
COUNT = 0
elif more in ['n','N']:
break
else:
print 'Opcao nao encontrada!'
time.sleep(1)
print 'Voce tem:',len(db),'registro(s)!'
print
## Loop (menu), mantem o loop ate que se pressione a tecla 's' (sair)
def Main():
ESCOLHA = None
while ESCOLHA != 's' and ESCOLHA != 'S':
print '\n' * 2
print 'Bem vindo a lista de Contatos'
ESCOLHA = raw_input("""
a - Adicionar
d - Deletar
v - Ver
s - Sair
Escolha um opcao: """)
if ESCOLHA in ['a','A']:
adicionar()
elif ESCOLHA in ['d','D']:
deletar()
elif ESCOLHA in ['v','D']:
ver()
elif ESCOLHA in ['s','S']:
fecharDB()
else:
print 'Opcao nao encontrada'
time.sleep(1)
Main()
## Opcao 'v', mostra todo o dicionario, (nomes e telefones), atraves do 'STATUS'
# pode-se tambem procurar por um nome aqui, faz-se o teste com 'db.has_key(VERNOME)'
# para saber se ha o nome nesse banco de dados.
def ver():
STATUS()
if len(db) == 0:
print 'Sua lista de Contatos esta vazia!'
else:
print
print 's para sair'
print
VERNOME = raw_input('Digite o nome que quer ver: ')
if VERNOME == 's' or VERNOME == 'S':
print 'Voltando ao menu principal...'
else:
if db.has_key(VERNOME):
MOSTRAR = db[VERNOME]
print '\n' * 2
print 'NOME: ',VERNOME, 'FONE: ',MOSTRAR
else:
print 'Nome nao encontrado!'
## Opcao 'd', serve para deletar um registro da lista de contatos.
# caso o nome dado esteja incorreto ou nao exista, python mostrara
# uma mensagem de erro, isso eh novamente tratado aqui com 'db.has_key(DELETAR)'
def deletar():
STATUS()
if len(db) == 0:
print 'Sua lista de Contatos esta vazia!'
else:
print
print 's para sair'
print
DELETAR = raw_input('Digite o nome que quer apagar: ')
if DELETAR == 's' or DELETAR == 'S':
print 'Voltando ao menu principal'
else:
STATUS()
if db.has_key(DELETAR):
del db[DELETAR]
STATUS()
print 'O contato', DELETAR, 'foi apagado com sucesso!'
## Opcao 'a'. Para adicionar um registro ao banco de dados.
# Caso o nome exista o registro
# nao sera efetuado, caso o 'nome' tenha mais de 21 letras
# ele sera rejeitado, isso eh assim para que se possa ter uma
# saida bonita e organizada do 'STATUS'.
def adicionar():
print
print 's para sair'
print
MAXNAME = 21
NOME = raw_input('Nome: ')
if db.has_key(NOME):
print '\n', NOME,'ja existe'
time.sleep(1)
elif NOME in ['','\b']:
print "Nome em branco nao e permitido"
time.sleep(1)
elif NOME == 's' or NOME == 'S':
print 'Voltando ao menu principal...'
elif len(NOME) > MAXNAME:
print
print ' Nome pode ter no maximo 21 letras!'
print ' Experimente usar apenas o primeiro-nome + identificador!'
print ' Ex: joao-escola'
else:
FONE = raw_input('Telefone: ')
if FONE in ['s','S']:
print 'Voltando ao menu principal...'
elif FONE in ['','\b']:
print 'Telefone em branco nao e permitido'
time.sleep(1)
else:
db[NOME]=FONE
STATUS()
# Fechando o Db...
def fecharDB():
db.close()
print
print 'Banco de dados fechado!'
sys.exit()
if __name__ == '__main__':
abrirDB()
Main()
Python com CouchDB usando couchdbkit
Backup automatizado de toda a base MySQL
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Como realizar um ataque de força bruta para desobrir senhas?
Como usar Gpaste no ambiente Cinnamon
Atualizando o Fedora 42 para 43
Estou tentando ser legalista, mas tá complicado! (4)
Perfil criado no samba ad dc não loga no Windows 10 e 11 (7)
Erro ao tentar ativar o secure boot no arch (4)









