1
resposta

Minha versão.

Olá, me chamo Rodrigo.

Esta é minha versão do código da forca:

def play():
    import random
    print("********************************************")
    print("*****   Bem vindo ao jogo da Forca!   ******")
    print("********************************************")

    bd = ["banana", "rodrigo", "dia"]
    escolha = random.randrange(0, 3)
    x = bd[escolha].upper()
    letras_acertadas = ["_" for letra in x]
    enforcou = False
    acertou = False
    erros = 0
    print(letras_acertadas)

    while (not acertou and not enforcou):
        chute = input("Digite sua letra: ")
        chute = chute.strip().upper()
        posicao = 0
        for letra in x:
            if (chute == letra):
                letras_acertadas[posicao] = letra
            posicao += 1
        else:
            erros += 1
        enforcou = erros == 6
        acertou = "_" not in letras_acertadas
        print(letras_acertadas)
        print ("Você tem {} chances".format(abs(erros - 6)))
    if acertou:
        print("Você ganhou!!")
        print("A palavra é {}".format(x))
    elif (enforcou):
        print("Você foi enforcado(a)!")
        print("A palavra é {}".format(x))


if __name__ == "__main__":
    play()

Eu acabei removendo um dos "if's" pois achei redundante, gostaria de saber se faria alguma diferença:

    while (not acertou and not enforcou):
        chute = input("Digite sua letra: ")
        chute = chute.strip().upper()
        if (chute in x):     #Removi este IF aqui.
            posicao = 0
            for letra in x:
                if (chute == letra):
                    letras_acertadas[posicao] = letra
                posicao += 1
        else:
            erros += 1
        enforcou = erros == 6
        acertou = "_" not in letras_acertadas
        print(letras_acertadas)
        print ("Você tem {} chances".format(abs(erros - 6)))
1 resposta

Olá Rodrigo! Terá diferença sim. O "else" que faz a contagem dos erros não funcionaria direito pois não há condição antes. Se quiser remover esse if terá que arrumar outra forma de contabilizar os erros


Fiz uma alteração colocando o enumerate no for loop. O enumerate retorna o indice (posição) e o valor, assim não precisa controlar a posição por fora do "for"
def play():
    import random
    print("********************************************")
    print("*****   Bem vindo ao jogo da Forca!   ******")
    print("********************************************")

    bd = ["banana", "rodrigo", "dia"]
    escolha = random.randrange(0, 3)
    x = bd[escolha].upper()
    letras_acertadas = ["_" for letra in x]
    enforcou = False
    acertou = False
    erros = 0
    print(letras_acertadas)

    while (not acertou and not enforcou):
        chute = input("Digite sua letra: ")
        chute = chute.strip().upper()
        posicao = 0
        if (chute in x):
            for posicao, letra in enumerate(x):
                if (chute == letra):
                    letras_acertadas[posicao] = letra
        else:
            erros += 1
        enforcou = erros == 6
        acertou = "_" not in letras_acertadas
        print(letras_acertadas)
        print ("Você tem {} chances".format(abs(erros - 6)))
    if acertou:
        print("Você ganhou!!")
        print("A palavra é {}".format(x))
    elif (enforcou):
        print("Você foi enforcado(a)!")
        print("A palavra é {}".format(x))


if __name__ == "__main__":
    play()