1
resposta

[Dúvida] Loop superior a 6 tentativas

import random


def jogar():

    imprime_msg_inicial()
    palavra_secreta = selecione_palavra_secreta()

    letras_acertadas = inicializa_letras_acertadas(palavra_secreta)
    print(letras_acertadas)

    enforcou = False
    acertou = False
    erros = 0

    while (not enforcou and not acertou):

        chute = chute_usuario()

        if (chute in palavra_secreta):
            marca_chute_correto(chute, letras_acertadas, palavra_secreta)
        else:
            erros += 1

        enforcou = erros == 6
        acertou = '_' not in letras_acertadas
        print(letras_acertadas)

    if (acertou):
        imprime_msg_ganhador()
    else:
        imprime_msg_perdedor(palavra_secreta)

    print('Fim do jogo')

def imprime_msg_inicial():
    print('*' * 33)
    print('  Bem vindo ao jogo da Forca!  ')
    print('*' * 33)

def selecione_palavra_secreta():
    arquivo = open('palavras.txt', 'r')
    palavras = []

    for linha in arquivo:
        linha = linha.strip()
        palavras.append(linha)

    arquivo.close()

    numero = random.randrange(0, len(palavras))
    palavra_secreta = palavras[numero].upper()
    return palavra_secreta

def inicializa_letras_acertadas(palavra):
    return ['_' for letra in palavra]

def chute_usuario():
    chute = input('Digite uma letra ')
    chute = chute.strip().upper()
    return chute

def marca_chute_correto(chute, letras_acertadas, palavra_secreta):
    index = 0
    for letra in palavra_secreta:
        if (chute == letra):
            letras_acertadas[index] = letra
        index += 1

def imprime_msg_ganhador():

    print("Expetacular, você ganhou!!!")
    print("       ___________      ")
    print("      '._==_==_=_.'     ")
    print("      .-\\:      /-.    ")
    print("     | (|:.     |) |    ")
    print("      '-|:.     |-'     ")
    print("        \\::.    /      ")
    print("         '::. .'        ")
    print("           ) (          ")
    print("         _.' '._        ")
    print("        '-------'       ")


def imprime_msg_perdedor(palavra_secreta):
    print("Fim da linha, você foi enforcado,kkkk!!!")

    print("    _______________         ")
    print("   /               \       ")
    print("  /                 \      ")
    print("//                   \/\  ")
    print("\|   XXXX     XXXX   | /   ")
    print(" |   XXXX     XXXX   |/     ")
    print(" |   XXX       XXX   |      ")
    print(" |                   |      ")
    print(" \__      XXX      __/     ")
    print("   |\     XXX     /|       ")
    print("   | |           | |        ")
    print("   | I I I I I I I |        ")
    print("   |  I I I I I I  |        ")
    print("   \_             _/       ")
    print("     \_         _/         ")
    print("       \_______/           ")
    print("A palavra secreta era {}".format(palavra_secreta))

if (__name__ == "__main__"):
    jogar()

Minha dúvida é a seguinte, teoricamente o jogo deveria permitir um limite para acertar a palavra secreta no entanto por exemplo quando aparece a palavra carambola e digito mais de uma vez a letra incorreta posso continuar. Uma outra dúvida consigo implementar o número de tentativas para ser igual a extensão da palavra secreta?

1 resposta

Aluno,

Você quer dizer:

  • Se eu digito a mesma letra incorreta NÃO deve diminuir o número de tentativas? É isso?

SE for isso, ENTÃO você precisa sempre armazenar as letras digitadas em, por exemplo, uma "array" e sempre verificar:

SE a letra NÃO foi digitada ENTÃO NÃO adicionar +1 a "erros". SIMPLEMENTE IGNORAR a soma.

A outra dúvida sobre o tamanho da palavra sorteada:

Sim, você consegue! Use a função "len()" para saber o tamanho da palavra resgatada do arquivo "palavras.txt", depois atribua a uma variável que será comparada ao "erros". Se a variável que tem o resultado da "len()" forma maior que o número de tentativas (erros) então fim de jogo!

Mais detalhes da função "len()":

===============================================================

Python len() Function

Definition and Usage

The len() function returns the number of items in an object.

When the object is a string, the len() function returns the number of characters in the string.

https://www.w3schools.com/python/ref_func_len.asp

===============================================================

Guarde uma cópia deste código e tente fazer as modificações para seu gosto. Se algo der errado, você tem o código original guardado.

[]'s,

Fabio I.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software