import random
def hang87():
# inicialização
# --- palavra secreta
palavras = open('/tempo/data/palavras.txt').read().split()
secreta = list(random.choice(palavras))
dicio = seq_to_dict(secreta)
# --- parâmetros
TAMANHO = len(secreta)
LIMITE = limite(TAMANHO)
pal_utilizador = list('_'* TAMANHO)
acertou = False
letras_usadas = []
# Entra no jogo
for tentativa in range(LIMITE):
# estado actual
mostra_palavra(pal_utilizador)
# joga
letra = adivinha(letras_usadas)
# analisa resposta
if letra in dicio:
# --- Acertou na letra!
indices = dicio[letra]
for ind in indices:
pal_utilizador[ind] = letra
# --- Acertou na palavra??
if fim(secreta,pal_utilizador):
acertou = True
mensagem_sim(secreta)
break
# actualiza estado
letras_usadas.append(letra)
# mensagem final
mensagem_fim(acertou,secreta)
# Auxiliares
def adivinha(letras_usadas):
"""Tenta mais uma letra."""
letra = raw_input('Escolha uma letra: ')
# verifica letra - ciclo
while letra in letras_usadas:
print '*** Letra já usada. Escolha outra sff!***'
letra = raw_input('Escolha uma letra: ')
return letra
def limite(tam_palavra):
""" para mais tarde se poder generalizar..."""
return tam_palavra
def mensagem_sim(secreta):
print 'Uau! Acertou!'
mostra_palavra(secreta)
def mensagem_fim(acertou,secreta):
if not acertou:
print 'Oops! Esgotaram-se as suas hipóteses...'
print 'A palavra secreta era: '
mostra_palavra(secreta)
print 'See you!'
def mostra_palavra(palavra):
""" mostra uma plavra formada por caracteres guardados numa lista."""
pal = ' '.join(palavra)
print 'Palavra:'
print pal
def fim(secreta, utilizador):
return secreta == utilizador
# --- Importante
def seq_to_dict(palavra):
"""
Transforma uma palavra num dicionário de chave os caracteres e
valores a lista dos índices.
"""
dicio = {}
for indice,letra in enumerate(palavra):
dicio[letra] = dicio.get(letra,[])+[indice]
return dicio
if __name__ == '__main__':
hang87()
sábado, 28 de novembro de 2009
Problema 8.7
Vamos apresentar uma solução básica para esta questão ... básica. O leitor é chamado a estudar o resultado e tentar entender como, e porque, funciona. Ter feito os problemas 8.1 a 8.7 ajuda! O mais importante a reter é que usamos diferentes representações internas (o que é manipulado no interior pelo programa) e externas (o que é visualizado no écran). Refira-se ainda que a palavra secreta é guardada na forma de um dicionário, onde as chaves são os caracteres e os valores os índices na cadeia onde esses caracteres ocorrem. É usada para alterar de modo expedito o estado da palavra que o utilizador vai construindo.
Subscrever:
Enviar feedback (Atom)
Sem comentários:
Enviar um comentário