Wordle Python
przez slow__learner @slow__learner
- 31
- 0
- 0
Introducción
Mi proyecto consistió en la creación de Wordle, con sistema de guardado y demás.

Materiales
Pycharm y las librerías de python: randint y pandas
Código del juego
from random import randint
import pandas as pd
#Colores para los textos
CIAN = "\033[96m"
VERDE = "\033[92m"
AMARILLO = "\033[93m"
ROJO = "\033[91m"
MAGENTA = "\033[95m"
GRIS = "\033[90m"
NEGRITA = "\033[1m"
RESET = "\033[0m"
# Función analizadora de palabras
def analizador_de_palabras(muestra, lista):
if muestra == lista:
return True
abecedario = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
palabras_verdes = []
palabras_amarillas = []
palabras_grises = []
conteo = {}
for letra in muestra:
conteo[letra] = conteo.get(letra, 0) + 1
usadas = set()
#Palabras verdes
for i in range(5):
if lista[i] == muestra[i]:
palabras_verdes.append(lista[i])
usadas.add(i)
conteo[lista[i]] -= 1
#Palabras amarillas y grises
if i in usadas:
continue
letra = lista[i]
if letra in muestra and conteo.get(letra, 0) > 0:
palabras_amarillas.append(letra)
conteo[letra] -= 1
else:
palabras_grises.append(letra)
#Quitar del abecedario
for letra in lista:
if letra in abecedario:
abecedario.remove(letra)
a = VERDE + NEGRITA + f"VERDE: {palabras_verdes}\n" + RESET
b = AMARILLO + NEGRITA + f"AMARILLO: {palabras_amarillas}\n" + RESET
c = GRIS + NEGRITA + f"GRIS: {palabras_grises}\n" + RESET
d = CIAN + NEGRITA + f"SIN USAR: {abecedario}\n" + RESET
return a + b + c + d
def analizador_de_palabras_modo_dificil(muestra, lista, vocablo, verdes):
if muestra == lista:
return True
abecedario = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
palabras_verdes = []
palabras_amarillas = []
palabras_grises = []
conteo = {}
for letra in muestra:
conteo[letra] = conteo.get(letra, 0) + 1
usadas = set()
# Palabras verdes
for i in range(5):
if lista[i] == muestra[i]:
palabras_verdes.append(lista[i])
if lista[i] not in vocablo:
vocablo.append(lista[i])
verdes[i] = lista[i]
usadas.add(i)
# Palabras amarillas y grises
if i in usadas:
continue
letra = lista[i]
if letra in muestra and conteo.get(letra, 0) > 0:
palabras_amarillas.append(letra)
if letra not in vocablo:
vocablo.append(letra)
conteo[letra] -= 1
else:
palabras_grises.append(letra)
# Quitar del abecedario
for letra in lista:
if letra in abecedario:
abecedario.remove(letra)
a = VERDE + NEGRITA + f"VERDE: {palabras_verdes}\n" + RESET
b = AMARILLO + NEGRITA + f"AMARILLO: {palabras_amarillas}\n" + RESET
c = GRIS + NEGRITA + f"GRIS: {palabras_grises}\n" + RESET
d = CIAN + NEGRITA + f"SIN USAR: {abecedario}\n" + RESET
return a + b + c + d
def wordle():
#Palabras del wordle
with open("Palabras.txt", "r") as archivo:
palabras = [linea.strip() for linea in archivo.readlines()]
#Data de jugadores
data = pd.read_csv("DataJugadores.csv", sep=";")
#Bucle del juego
while True:
#Menu de inicio
print(CIAN + NEGRITA + " *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*" + RESET)
print(CIAN + NEGRITA + " *-*-*-*-WORDLE-DE-CONSOLA-*-*-*-*" + RESET)
print(CIAN + NEGRITA + " *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*" + RESET)
print()
print(VERDE + " 1.- JUGAR MODO CLASICO " + RESET)
print(AMARILLO + " 2.- JUGAR MODO DIFICIL " + RESET)
print(MAGENTA + " 3.- VER ESTADÍSTICAS DEL JUGADOR " + RESET)
print(ROJO + " 4.- SALIR " + RESET)
print()
respuesta1 = input(CIAN + "ELIJA LA OPCIÓN: " + RESET)
print()
#Bucle 1 MODO CLASICO
if respuesta1 == "1":
while True:
print(ROJO + NEGRITA + " *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*" + RESET)
print(ROJO + NEGRITA + " *-*-*-*-WORDLE-MODO-CLÁSICO-*-*-*" + RESET)
print(ROJO + NEGRITA + " *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*" + RESET)
print()
jugador = input(CIAN + "Ingrese su nombre: " + RESET)
print()
#Filtro para la base de datos
filtro = (data["Jugador"] == jugador) & (data["Modo"] == "CLÁSICO")
palabra = palabras[randint(0, len(palabras) - 1)]
palabra = list(palabra.upper())
matriz_wordle = [["", "", "", "", ""],
["", "", "", "", ""],
["", "", "", "", ""],
["", "", "", "", ""],
["", "", "", "", ""],
["", "", "", "", ""]
]
for intento in range(0, len(matriz_wordle) + 1):
if intento == len(matriz_wordle):
print(ROJO + NEGRITA + "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+" + RESET)
print(ROJO + NEGRITA + "+-+-+-+-+-+-PERDISTE+-+-+-+-+-+" + RESET)
print(ROJO + NEGRITA + "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+" + RESET)
print()
print(CIAN + NEGRITA + f"La palabra era: {palabra}" + RESET)
input(GRIS + "Pulse cualquier tecla para continuar: " + RESET)
if filtro.any():
data.loc[filtro, "Partidas"] += 1
data.loc[filtro, "Intentos"] += intento
else:
data.loc[len(data)] = [jugador, intento, 0, 1, "CLÁSICO"]
data.to_csv("DataJugadores.csv", sep=";", index=False)
break
palabra_usuario = input(CIAN + NEGRITA + f"Intento {intento + 1}: " + RESET)
print()
while len(palabra_usuario) != 5:
palabra_usuario = input(
CIAN + NEGRITA + f"Intento {intento + 1}\nIngrese una palabra de 5 letras: " + RESET)
print()
while palabra_usuario not in palabras or len(palabra_usuario) != 5:
palabra_usuario = input(
CIAN + NEGRITA + f"Intento {intento + 1}\nLa palabra no se encuentra en el diccionario\ningresar otra palabra de 5 letras: " + RESET)
print()
palabra_usuario = list(palabra_usuario.upper())
matriz_wordle[intento] = palabra_usuario
print()
if analizador_de_palabras(palabra_usuario, palabra) == True:
print(VERDE + NEGRITA + " *-*-*-*-*-*-*-*-*-*-*-*-*-*-*" + RESET)
print(VERDE + NEGRITA + " *-*-PALABRA-ENCONTRADA*-*-*-*" + RESET)
print(VERDE + NEGRITA + " *-*-*-*-*-*-*-*-*-*-*-*-*-*-*" + RESET)
print()
input(GRIS + "Pulse cualquier tecla para continuar: " + RESET)
if filtro.any():
data.loc[filtro, "Victorias"] += 1
data.loc[filtro, "Intentos"] += intento + 1
data.loc[filtro, "Partidas"] += 1
else:
data.loc[len(data)] = [jugador, intento, 1, 1, "CLÁSICO"]
data.to_csv("DataJugadores.csv", sep=";", index=False)
break
for celda in range(len(matriz_wordle)):
for letra in matriz_wordle[celda]:
print("%4s" % [letra], end=" ")
print()
print(analizador_de_palabras(palabra, palabra_usuario))
break
#Bucle 2 MODO DIFÍCIL
elif respuesta1 == "2":
while True:
print(ROJO + NEGRITA + " *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*" + RESET)
print(ROJO + NEGRITA + " *-*-*-*-WORDLE-MODO-DIFICIL-*-*-*" + RESET)
print(ROJO + NEGRITA + " *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*" + RESET)
print()
jugador = input(CIAN + "Ingrese su nombre: " + RESET)
print()
# Filtro para la base de datos
filtro = (data["Jugador"] == jugador) & (data["Modo"] == "CLÁSICO")
palabra = palabras[randint(0, len(palabras)-1)]
palabra = list(palabra.upper())
pistas = []
verdes = {}
matriz_wordle = [["","","","",""],
["","","","",""],
["","","","",""],
["","","","",""],
["","","","",""],
["","","","",""]
]
for intento in range(0, len(matriz_wordle) + 1):
if intento == len(matriz_wordle):
print(ROJO + NEGRITA + "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+"+ RESET)
print(ROJO + NEGRITA + "+-+-+-+-+-+-PERDISTE+-+-+-+-+-+"+ RESET)
print(ROJO + NEGRITA + "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+" + RESET)
print()
print(CIAN + NEGRITA + f"La palabra era: {palabra}" + RESET)
if filtro.any():
data.loc[filtro, "Partidas"] += 1
data.loc[filtro, "Intentos"] += intento
else:
data.loc[len(data)] = [jugador, 0, 0, 1, "CLÁSICO"]
data.to_csv("DataJugadores.csv", sep=";", index=False)
break
palabra_usuario = input(CIAN + NEGRITA + f"Intento {intento + 1}: " + RESET)
print()
while True:
palabra_usuario = input(CIAN + NEGRITA + f"Intento {intento + 1}: " + RESET)
print()
while len(palabra_usuario) != 5:
palabra_usuario = input(
CIAN + NEGRITA +
f"Intento {intento + 1}\nIngrese una palabra de 5 letras: "
+ RESET
)
print()
while palabra_usuario not in palabras:
palabra_usuario = input(
CIAN + NEGRITA + f"Intento {intento + 1}\nLa palabra no se encuentra en el diccionario\ningresar otra palabra de 5 letras: "
+ RESET
)
print()
palabra_usuario = list(palabra_usuario.upper())
valido = True
# Verificar letras verdes
for posicion, letra in verdes.items():
if palabra_usuario[posicion] != letra:
print(
ROJO +
f"La letra '{letra}' debe permanecer en la posición {posicion + 1}."
+ RESET
)
valido = False
# Verificar letras amarillas
if valido:
for letra in pistas:
if letra not in palabra_usuario:
print(
ROJO +
f"La palabra debe contener la letra '{letra}'."
+ RESET
)
valido = False
if valido:
break
print(ROJO + "La palabra no cumple las restricciones del modo difícil." + RESET)
print()
matriz_wordle[intento] = palabra_usuario
print()
for celda in range(len(matriz_wordle)):
for letra in matriz_wordle[celda]:
print("%4s" % [letra], end=" ")
print()
if analizador_de_palabras_modo_dificil(palabra, palabra_usuario, pistas, verdes) == True:
print(VERDE + NEGRITA + " *-*-*-*-*-*-*-*-*-*-*-*-*-*-*" + RESET)
print(VERDE + NEGRITA + " *-*-PALABRA-ENCONTRADA*-*-*-*" + RESET)
print(VERDE + NEGRITA + " *-*-*-*-*-*-*-*-*-*-*-*-*-*-*" + RESET)
print()
input(GRIS + "Pulse cualquier tecla para continuar: " + RESET)
if filtro.any():
data.loc[filtro, "Victorias"] += 1
data.loc[filtro, "Intentos"] += intento + 1
data.loc[filtro, "Partidas"] += 1
else:
data.loc[len(data)] = [jugador, intento, 1, 1, "DIFÍCIL"]
data.to_csv("DataJugadores.csv", sep=";", index=False)
input(GRIS + "Pulse cualquier tecla para continuar: " + RESET)
break
print(analizador_de_palabras_modo_dificil(palabra, palabra_usuario, pistas, verdes))
break
elif respuesta1 == "3":
print()
print(CIAN + NEGRITA + " *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*" + RESET)
print(CIAN + NEGRITA + " *-*-*-*-RANKING-DE-JUGADORES-*-*-*-" + RESET)
print(CIAN + NEGRITA + " *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*" + RESET)
print()
print(VERDE + NEGRITA + " 1: RANKING DE JUGADORES MODO CLÁSICO" + RESET)
print(VERDE + NEGRITA + " 2: RANKING DE JUGADORES MODO DIFÍCIL" + RESET)
modo = input(GRIS + NEGRITA + "Elija el ranking que quiera ver: " + RESET)
print()
if modo == "1":
ranking = data[data["Modo"] == "CLÁSICO"]
titulo = "RANKING JUGADORES MODO CLÁSICO"
elif modo == "2":
ranking = data[data["Modo"] == "DIFÍCIL"]
titulo = "RANKING JUGADORES MODO DIFÍCIL"
else:
print(ROJO + "+-+-+-+-+-Opción no válida-+-+-+-+-+-+" + RESET)
input(GRIS + "Pulse cualquier tecla para continuar: " + RESET)
continue
ranking = ranking.sort_values(by="Victorias", ascending=False)
print(ROJO + NEGRITA + titulo + RESET)
print(ranking)
victorias_totales = ranking["Victorias"].sum()
partidas_totales = ranking["Partidas"].sum()
intentos_totales = ranking["Intentos"].sum()
if partidas_totales > 0:
porcentaje = (victorias_totales / partidas_totales) * 100
else:
porcentaje = 0
if victorias_totales > 0:
promedio = intentos_totales / victorias_totales
else:
promedio = 0
print()
print(AMARILLO + NEGRITA + f"Porcentaje de éxito: {porcentaje:.2f}%" + RESET)
print(AMARILLO + NEGRITA + f"Promedio de intentos para ganar: {promedio:.2f}" + RESET)
print()
input(GRIS + "Pulse cualquier tecla para continuar: " + RESET)
elif respuesta1 == "4":
print()
print(AMARILLO + NEGRITA + " *-*-*-*-*-*-*-*-*-*" + RESET)
print(AMARILLO + NEGRITA + " SEE YOU NEXT TIME!!" + RESET)
print(AMARILLO + NEGRITA + " *-*-*-*-*-*-*-*-*-*" + RESET)
break
else:
print()
print(ROJO + " +=+=+=Respuesta no válida=+=+=+=+" + RESET)
input(GRIS + " Pulse cualquier tecla para volver" + RESET)
wordle()

0 komentarzy
Zaloguj się lub dołącz bezpłatnie, aby móc komentować