Guide for Penjat 2
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:
- Llegeix el nombre de casos de prova i, per cadascun, la paraula secreta.
- 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). - Manté també un comptador d'errors (començant a 0) i un conjunt de lletres ja provades, per no \ tornar-les a comptar.
- 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.
- Si la lletra és
- 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).
- 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