En este breve tutorial, explicaré un código para adivinar palabras a partir de letras que se piden por teclado. El código en esencia consiste, en una lista de palabras diversas, de las cuales se seleccionará una de forma aleatoria. Luego hay unas variables y funciones para almacenar la palabra seleccionada y crear una lista con una cantidad de espacios en blanco, llamada ‘blancos’ que corresponde al número de letras de la palabra seleccionada. Se incluye otra variable de 6 oportunidades en caso de equivocarse: ‘vidas=6’.
import random
palabras = ['armadillo', 'trompeta', 'conejo', 'Pamplona', 'piano', 'Barranquilla', 'Amazonas',
'manzana', 'pera', 'piña', 'SantaMarta', 'mesa', 'pan', 'reloj', 'Roma', 'Londres', 'Chicago', 'cama',
'licor', 'cafe', 'alfiler', 'chumacera']
select= random.choice(palabras)
#select= 'Barranquilla' #Des comentar para ensayar sentencia de imprimir solo una vez ‘blancos’.select= select.upper()
# Conformamos una lista de espacios en blanco correspondiente a la palabra seleccionada.
blancos= ['_']*len(select)
print(blancos)
vidas= 6
Luego viene un bucle while que trabaja mientras una variable ‘vidas’ y una función que cuenta los ‘espacios en blanco restantes’ no sea cero.
while (vidas>0and blancos.count('_')>0):
Letra_adivinada= input('Adivine una letra: ')
Letra_adivinada= Letra_adivinada.upper() #Convertimos la letra ingresada en MAYUSCULAprint(Letra_adivinada)
if Letra_adivinada in select:
print('ok')
#Hacemos el recorrido de la palabra seleccionada y comparamos letra por letra con la letra adivinada.for letra in range(len(select)):
if Letra_adivinada==select[letra]:
blancos[letra]=Letra_adivinada #Remplazamos un espacio en blanco por la letra adivinadaif letra==select.rfind(Letra_adivinada):#Con esta condicional se imprime solo una vez en caso de haber letras repetidas.print(blancos)
if blancos.count('_')==0:
print('-----GANASTE...!!!----')
breakelse:
print('Incorrecto')
vidas=vidas-1print('Vidas: ',vidas)
if vidas==0:
print('LO SIENTO... PERDISTE!')
print('----------------------')
El bucle ‘while’ comienza con las dos condicionales que inicialmente son mayores que cero, ejemplo: vidas=6; y espacios en blanco: los que indique el tamaño de la palabra seleccionada. En seguida evalúa la letra ingresada por teclado y convertida en mayúscula, para ver si está dentro de la palabra seleccionada , que esta almacenada en la variable “select”.
Si la letra está entre esas palabras, se hace un recorrido, letra por letra, de la palabra seleccionada y se compara con la letra ingresada por el teclado, que es la variable ‘Letra_adivinada’ . Si coinciden, entonces se remplaza un espacio en blanco, por la correspondiente en la lista “blancos”.
En seguida se usa la instrucción de imprimir la lista “blancos”, que puede contener letras adivinadas y espacios en blanco restantes. Para evitar que se imprima varas veces la lista a causa de estar la letra adivinada mas de una vez, añadimos esta sentencia:
if letra==select.rfind(Letra_adivinada)
Con esta sentencia aseguramos que se imprima una sola vez la lista de espacios en blanco en caso que una misma letra adivinada se encuentre varias veces en la palabra seleccionada; y esto lo hará después de iterar en la última posición de la letra adivinada. Esta sentencia se ensayó con la palabra “Barranquilla” como ejemplo perfecto de letras repetidas y ésta se puede des comentar si se desea ensayar.
Aca está el codigo completo:
import random
palabras = ['armadillo', 'trompeta', 'conejo', 'Pamplona', 'piano', 'Barranquilla', 'Amazonas',
'manzana', 'pera', 'piña', 'SantaMarta', 'mesa', 'pan', 'reloj', 'Roma', 'Londres', 'Chicago', 'cama',
'licor', 'cafe', 'alfiler', 'chumacera']
select= random.choice(palabras)
#select= 'Barranquilla'select= select.upper()
# Conformamos una lista de espacios en blanco correspondiente a la palabra seleccionada.
blancos= ['_']*len(select)
print(blancos)
vidas= 6while (vidas>0and blancos.count('_')>0):
Letra_adivinada= input('Adivine una letra: ')
Letra_adivinada= Letra_adivinada.upper() #Convertimos la letra ingresada en MAYUSCULAprint(Letra_adivinada)
if Letra_adivinada in select:
print('ok')
#Hacemos el recorrido de la palabra seleccionada y comparamos letra por letra con la letra adivinada.for letra in range(len(select)):
if Letra_adivinada==select[letra]:
blancos[letra]=Letra_adivinada #Remplazamos un espacio en blanco por la letra adivinadaif letra==select.rfind(Letra_adivinada):#Con esta condicional se imprime solo una vez #en caso de haber letras repetidas.print(blancos)
if blancos.count('_')==0:
print('-----GANASTE...!!!----')
breakelse:
print('Incorrecto')
vidas=vidas-1print('Vidas: ',vidas)
if vidas==0:
print('LO SIENTO... PERDISTE!')
print('----------------------')```