1
resposta

Como verificar qual ou quais palavras da lista mais se adequam à palavra secreta, com base nas suas letras reveladas?

Estou tentando fazer um programa capaz de descobrir uma palavra secreta:

palavras = ['casou','pedra','telha','tropa','fruta','bolha','bravo']

palavra_secreta = ['_','_','_','p','a']

for palavra in palavras:
    for i in range(len(palavra)):
        if palavra[i] == palavra_secreta[i]:
            print(palavra)

Pelo exemplo acima a palavra secreta que o código deve encontrar é "tropa", já que é a única palavra da lista de palavras que termina em "pa", entrentanto o retorno está sendo:

pedra
telha
tropa
tropa
fruta
bolha

O que deve ser feito no código para que seja verificado qual ou quais palavras da lista mais se adequam à palavra secreta, com base nas suas letras reveladas?

Como a palavra secreta é "_ _ _ p a", o esperado era que o retorno do programa para esse caso seja "tropa". Claro que em outras situações se mais de uma palavra der match com as letras reveladas, o programa tenderá a printar mais de uma palavra.

1 resposta

Um belo desafio!

palavras = ['casou', 'pedra', 'telha', 'tropa', 'fruta', 'bolha', 'bravo']

palavra_secreta = ['_', '_', '_', 'p', 'a']

coincidencias = []

for i in range(len(palavra_secreta)):
    if palavra_secreta[i] == '_':
        continue
    lista = []
    posicao = len(coincidencias)
    coincidencias.append(lista)
    for palavra in palavras:
        if palavra[i] == palavra_secreta[i]:
            coincidencias[posicao].append(palavra)
    coincidencias[posicao] = set(coincidencias[posicao])

print(set.intersection(*coincidencias))

O pulo do gato foi, a cada iteração nas letras da palavra secreta, obter as palavras com a letra na mesma posição e armazenar isso numa lista.

No fim essa lista é convertida um set para poder usar a operação de intercessão, que devolve as palavras em comum em todas as listas.