Guide for Penjat 2


Això és una guia per ajudar-te a començar amb aquest problema — no és la solució.
Mostra el codi per a: Consideracions generals Java 11 Python 3

Com abordar aquest problema

Has de programar un joc del penjat: per cada cas de prova, l'usuari va introduint lletres una a \ una fins que endevina la paraula secreta o arriba a 5 errors (les 6 etapes del dibuix, des de la \ forca buida fins al penjat complet).

Idea general:

  1. Llegeix el nombre de casos de prova i, per cadascun, la paraula secreta.
  2. Manté un "estat" de la paraula amb _ per cada lletra encara no endevinada (per exemple una \ llista de caràcters, tots _ inicialment, de la mateixa longitud que la paraula).
  3. Manté també un comptador d'errors (començant a 0) i un conjunt de lletres ja provades, per no \ tornar-les a comptar.
  4. Llegeix lletres una a una:
    • Si la lletra és 1974, l'usuari es rendeix i el cas acaba aquí.
    • Si la lletra ja s'havia provat abans, ignora-la.
    • Si la lletra és a la paraula, revela-la a totes les posicions on apareix.
    • Si no hi és, incrementa el comptador d'errors.
  5. Després de cada lletra, mostra l'estat actual de la paraula i el dibuix corresponent al nombre \ d'errors actual (cap, torç, braç esquerre, braç dret, cama esquerra, cama dreta — un tram nou per \ cada error).
  6. Acaba el cas quan s'endevina tota la paraula (missatge de victòria) o quan s'arriba a 5 errors \ (missatge de derrota), i llavors ja no cal seguir mostrant res més d'aquell cas.

Paranys habituals:

  • El dibuix té 6 etapes (de 0 a 5 errors): prepara-les totes per endavant (per exemple com una \ llista de textos de diverses línies) i selecciona la que toca segons el comptador d'errors.
  • No oblidis marcar les lletres ja usades, perquè si es repeteixen no comptin com un error nou ni \ tornin a revelar res.
  • Un cop la paraula s'ha endevinat o el penjat s'ha completat, no s'ha de seguir processant res \ més d'aquell cas.

Pista per a Python

Guarda l'estat de la paraula com una llista de caràcters (més fàcil de modificar posició a \ posició que una cadena) i les 6 etapes del dibuix com una llista de textos:

dibuixos = [
    # dibuixos[0] = forca buida ... dibuixos[5] = penjat complet
    # ompliu aqui les 6 etapes del dibuix, tal com es descriuen a l'enunciat
]

n = int(input())
for _ in range(n):
    paraula = input().strip()
    revelada = ["_"] * len(paraula)
    provades = set()
    errors = 0
    acabat = False

    while not acabat:
        lletra = input().strip()
        if lletra == "1974":
            break
        if lletra in provades:
            continue
        provades.add(lletra)

        if lletra in paraula:
            for i, c in enumerate(paraula):
                if c == lletra:
                    revelada[i] = lletra
        else:
            errors += 1

        print("".join(revelada))
        print(dibuixos[errors])

        if "_" not in revelada:
            print("Felicitats! Has endevinat la paraula")
            acabat = True
        elif errors == 5:
            print("Vaja! No has endevinat la paraula")
            acabat = True

Tornar al problema