Diferencia entre revisiones de «Ahorcado en Python»

Contenido eliminado Contenido añadido
Danimros (discusión | contribs.)
Sin resumen de edición
Danimros (discusión | contribs.)
Línea 7:
<!-- Cambia los capítulos de ejemplo por los definitivos, pero recuerda cumplir la política de subpáginas. Si tienes dudas lee [[Wikilibros:Política de nombrado]] -->
 
#== 1. [[/Ahorcado base 1/]]==
 
Importamos la libreria os para poder utilizar la función de limpiar pantalla:
Línea 14:
import os # Para borrar la pantalla
</syntaxhighlight>
 
Lista de las letras
 
Tenemos que guardar la lista de las letras que hemos dicho, tanto correctas como incorrectas. Para ello, utilizaremos dos listas, de momento vacías:
Línea 43 ⟶ 41:
print ('A H O R C A D O (Ramon Llull Edition)')
print ("--------------------------------------\n\n") Cada # \n añade un salto de línea
</syntaxhighlight>
 
Antes de pedir letras, mostramos las incorrectas, para evitar que se repitan:
Línea 51 ⟶ 50:
print (letra, end = '') # end = '' evita que se haga un salto de línea despues del print
print ("")
</syntaxhighlight>
 
Ahora mostraremos la palabra tal como está, con las letras que hayan sido acertadas en su posición, y las que quedan con un _:
Línea 67:
print (letra+" ", end = '')
print ("\n")
</syntaxhighlight>
 
Por último, pedimos al usuario que introduzca una letra:
Línea 73 ⟶ 74:
print ('Adivina una letra:')
letra = input()
</syntaxhighlight>
 
Si la letra está en la palabra, la meteremos en la lista letraCorrecta. Sino, en la lista letraIncorrecta:
Línea 81 ⟶ 83:
else:
letraIncorrecta.append(letra)
</syntaxhighlight>
 
== 2. Mejoras ahorcado ==
 
=== 2.1. Permitir elegir entre varias palabras ===
 
Necesitaremos en primer lugar crear una lista de palabras:
 
<syntaxhighlight lang="python">
palabras = 'valoracion aprenderpython comida juego python'.split()
</syntaxhighlight>
 
La función split() nos separará las palabras en una lista, mirando los espacios entrer palabras.
Línea 95 ⟶ 101:
<syntaxhighlight lang="python">
import random
</syntaxhighlight>
 
La función radint devuelve un número aleatorio del rango que pidamos.
Línea 101 ⟶ 108:
posicion = random.randint(0, len(palabras) - 1)
palabraSecreta = palabras[posicion]
</syntaxhighlight>
 
En un lugar del programa, deberemos llamar a la función buscarPalabraAleat y asignarle el valor devuelto a la variable que tiene la palabra con la que vamos a jugar.
 
=== 2.2. Filtrar el tipo de letra permitido ===
 
Cualquier tecla del teclado puede ser utilizada por el usuario a la hora de elegir la letra, por lo que debemos comprobar que solo están permitidas letras del alfabeto. Para ello, mejor crear una función elijeLetra(), puesto que la vamos a utilizar cada vez que pidamos al usuario una letra.
Línea 112 ⟶ 121:
...
return letra
</syntaxhighlight>
 
El bloque principal consiste en capturar un input (el funcionamiento que ya tenemos):
Línea 118 ⟶ 128:
print ('Adivina una letra:')
letra = input()
</syntaxhighlight>
 
Podemos forzar que la letra se convierta a minúsculas:
Línea 123 ⟶ 134:
<syntaxhighlight lang="python">
letra = letra.lower()
</syntaxhighlight>
 
Podemos comprobar que solo se introduce una letra y no dos o más:
Línea 128 ⟶ 140:
<syntaxhighlight lang="python">
if len(letra) != 1:
</syntaxhighlight>
 
No tendríamos que poder decir una letra que ya se ha dicho antes. En este caso algunaLetra es una lista que contiene todas las letras que ya se han dicho antes.
Línea 133 ⟶ 146:
<syntaxhighlight lang="python">
if letra in algunaLetra:
</syntaxhighlight>
 
Comprobar que la letra está en el alfabeto:
Línea 138 ⟶ 152:
<syntaxhighlight lang="python">
if letra not in 'abcdefghijklmnopqrstuvwxyz':
</syntaxhighlight>
 
=== 2.3 Ganar y perder ===
 
Podemos crear una variable booleana finJuego que sea True si ha terminado el juego, y falso si no es así.
Línea 150 ⟶ 165:
<syntaxhighlight lang="python">
if "_" not in palabraResuelta
</syntaxhighlight>
 
Partida perdida: que hayamos fallado un número suficiente de veces
Línea 158 ⟶ 174:
vidas = 6
if len(letraIncorrecta) == vidas:
</syntaxhighlight>
 
El bucle principal se tiene que cambiar:
Línea 171 ⟶ 188:
juegoTerminado = True
mostrarFrasePerdido (y la palabra)
</syntaxhighlight>
 
=== 2.4 Jugar otra vez ===
 
<syntaxhighlight lang="python">
Línea 178 ⟶ 196:
print('¿Quieres jugar otra partida? (Sí o no))
return input().lower().startswith('s')
</syntaxhighlight>
 
=== 2.5 Categorías de palabras ===
 
Otra mejora del programa consiste en cambiar la lista de palabras por un diccionario que permita agrupar por categorías. En este caso, listaPalabras es un diccionario que contiene claves (keys) y valores (values). Cada categoría será una clave (ej:formas), y su valor una lista de elementos (rectangulo,circulo,cuadrado, ...).
Línea 206 ⟶ 225:
 
print([categoria,palabraElegida])
</syntaxhighlight>
 
=== 2.6. Clasificación ===
 
2.6. Clasificación
 
Podríamos hacer el juego más competitivo creando una clasificación. Para ello, tendríamos que pensar en algún sistema de puntuación para poder comparar los resultados de las diferentes partidas.
Línea 216 ⟶ 235:
<syntaxhighlight lang="python">
tablaClasificacion = { 'Dani': 4000, 'Pepe: 2000, 'Manolo: 1000, }
</syntaxhighlight>
Añadir puntuación
 
==== Añadir puntuación ====
 
Tendríamos que pedir el nombre al jugador en una variable nombre al comenzar la partida y guardarlo en alguna variable, como jugador. Al final de la partida, calculamos la puntuación y la guardamos en el diccionario:
Línea 222 ⟶ 243:
<syntaxhighlight lang="python">
tablaClasificacion[nombre] = puntuacion
</syntaxhighlight>
 
==== Mostrar clasificación =====
 
La función mostrarClasificación podría ser:
Línea 237 ⟶ 259:
print(" ", nombreJugador, " ", tablaClasificacion[nombreJugador])
print("--------------------------------\n")
</syntaxhighlight>
 
 
 
 
 
 
# [[/Capítulo de ejemplo 2/]]
## [[/Capítulo de ejemplo 2.1/]]
## [[/Capítulo de ejemplo 2.2/]]
# [[/Capítulo de ejemplo 3/]]
 
<!-- No olvides cambiar la categoría siguiente por la adecuada -->