Checking of Accounts Python Hangman Game

0

I'm finalizing the hangman game in Python. But I have a problem with the final verification when the player hits the word, I can not create a check to validate if the player has hit the word, could they help me?

from random import randint

def tentativa1():
    print('''
|─|─────────────────|
| |               (o.o)
| |
| |
| |
| |
| |
| |
|_|=====================
você tem 6 tentativas
========================
''')
def tentativa2():
    print('''
|─|─────────────────|
| |               (o.o)
| |                ||
| |                ||
| |                ||
| |
| |
| |
|_|=====================
você tem 5 tentativas
========================
''')
def tentativa3():
    print('''
|─|─────────────────|
| |               (o.o)
| |                ||_
| |                || \
| |                ||  \
| |
| |
| |
|_|=====================
você tem 4 tentativas
========================
''')
def tentativa4():
    print('''
|─|─────────────────|
| |               (o.o)
| |               _||_
| |              / || \
| |             /  ||  \
| |
| |
| |
|_|=====================
você tem 3 tentativas
========================
''')
def tentativa5():
    print('''
|─|─────────────────|
| |               (o.o)
| |               _||_
| |              / || \
| |             /  ||  \
| |                /
| |              _/
| |
|_|=====================
você tem 2 tentativas
========================
''')
def tentativa6():
    print('''
|─|─────────────────|
| |               (o.o)
| |               _||_
| |              / || \
| |             /  ||  \
| |                /\
| |              _/  \_
| |
|_|================================
Última Chance !!! Tome cuidado !!!
===================================
''')
def campeao():
    print(''' =-=-=-=-=- PARABÉNS VOCÊ GANHOU !!!! =-=-=-=-=-''')
def final():
    print(''' ========== VOCÊ PERDEU !!! ==========''')

lista_palavras = ["casa", "shopping", "palio", "palmeiras", "lakers", "lucas", "acdc", "dinossauro"]
lista_dicas = ["DICA: Local de descanso...", "DICA: Ir as compras...", "DICA: Carro popular", "DICA: Time sem mundial...", "DICA: Time da NBA...", "DICA: Companheiro de sala conhecido como Nethoes...", "DICA: Banda de Rock...", "DICA: Animal Pré Histórico..."]

print('''====================================
       JOGO DA FORCA - IFPR
====================================''')
print("\n")

print('''====================================
    Pronto para Começar...?
====================================''')
print("\n")

aceita = 1
n_aceita = 0

while True:
    inicio = int(input("Digite (1) para Inicar ou (0) para Sair: "))

    if inicio == 1:

        pos = randint (0, len(lista_palavras)-1)
        palavra = lista_palavras[pos]
        riscos = [" _ "] * len(palavra)

        letras_digitadas = []
        letras_descobertas = []

        print("\n")
        print("Começando o jogo....FORCA - IFPR")

        print("\n")
        print(lista_dicas[pos])
        print("\n")
        print(riscos)
        print("\n")

        erros = 0
        acertos = 0

        while erros < 7 :
            letra = input("Digite uma letra: ").lower()

                if letra in palavra:
                pos = palavra.find(letra)
                for i in range(pos, len(palavra)):
                    if letra == palavra[i]:
                        riscos[i] = letra

            else:
                erros = erros + 1

            if erros == 1:
                tentativa1()
            elif erros == 2:
                tentativa2()
            elif erros == 3:
                tentativa3()
            elif erros == 4:
                tentativa4()
            elif erros == 5:
                tentativa5()
            elif erros == 6:
                tentativa6()
            if erros == 7:
                final()
                break

            print(riscos)

        # Condição para verifcar se a letra já foi digitada.

            if letra in letras_digitadas:
                print("Você já tentou essa Letra. Digite Novamente !!!")

            else:
                letras_digitadas.append(letra)

    else:
        print("Saindo do jogo....")
        print("\n")
        print("Obrigado!")
        break
    
asked by anonymous 19.07.2018 / 18:56

2 answers

0

One way is to test if you still have risks in riscos :

while erros < 7 :
    if ' _ ' not in riscos:
        print('Voce ganhou')

Testing:

DICA: Animal Pré Histórico...

[' _ ', ' _ ', ' _ ', ' _ ', ' _ ', ' _ ', ' _ ', ' _ ', ' _ ', ' _ ']
Digite uma letra: d
['d', ' _ ', ' _ ', ' _ ', ' _ ', ' _ ', ' _ ', ' _ ', ' _ ', ' _ ']
Digite uma letra: i
['d', 'i', ' _ ', ' _ ', ' _ ', ' _ ', ' _ ', ' _ ', ' _ ', ' _ ']
Digite uma letra: n
['d', 'i', 'n', ' _ ', ' _ ', ' _ ', ' _ ', ' _ ', ' _ ', ' _ ']
Digite uma letra: o
['d', 'i', 'n', 'o', ' _ ', ' _ ', ' _ ', ' _ ', ' _ ', 'o']
Digite uma letra: s
['d', 'i', 'n', 'o', 's', 's', ' _ ', ' _ ', ' _ ', 'o']
Digite uma letra: a
['d', 'i', 'n', 'o', 's', 's', 'a', ' _ ', ' _ ', 'o']
Digite uma letra: u
['d', 'i', 'n', 'o', 's', 's', 'a', 'u', ' _ ', 'o']
Digite uma letra: r
['d', 'i', 'n', 'o', 's', 's', 'a', 'u', 'r', 'o']
Voce ganhou
    
19.07.2018 / 20:41
0

If the word that the player has to hit is the variable palavra , and you save the letters that he hit in the riscos list, then you can compare the palavra with the conversion to string of lista using join .

In the code just put:

while erros < 7 :
    # (...) o resto do codigo  

    # como ultima instrução do while
    if palavra == ''.join(riscos):
        campeao()
        break

There are many things that can improve and make different, but only indicating the simplest ones:

  • To get better when showing riscos you can use the same technique as in the comparison, making print(' '.join(riscos)) . Notice that I used ' '.join with space for the risks to be spaced out.

  • You should not initialize riscos with spaces next to _ as you did:

    riscos = [" _ "] * len(palavra)
    #          ^-^
    

    This is visual formatting that you should only do when it will show to the player. Do it first:

    riscos = ["_"] * len(palavra)
    
  • Do not create a function for each error value:

    if erros == 1:
        tentativa1()
    elif erros == 2:
        tentativa2()
    elif erros == 3:
        tentativa3()
    elif erros == 4:
        tentativa4()
    elif erros == 5:
        tentativa5()
    elif erros == 6:
        tentativa6()
    

    Instead get the number of errors in the function that shows the doll, and draw the right doll based on that quantity:

    def tentativa(erros):
        if erros == 1:
            #desenho do 1
    

    This will make the block of ifs showing previously in:

    tentativa(erros)
    

    There are even parts of the drawing that are the same in all cases, which you may want to reuse and do regardless of the number of errors.

20.07.2018 / 00:30