¡Hola! En esta ocasión realizaremos un pequeño proyecto, el cual permitirá conocer apropiadamente el uso de los ciclos for, while y las condiciones if.
Trataremos de abordar todo desde la perspectiva de un juego de 21 Blackjack.
Las condiciones para este juego son bastante simples:
- El programa dará cartas aleatorias a la mesa y al jugador
- Si el jugador obtiene un As y es mayor a 21, se le restarán 10
- La combinación más cercana a 21 gana la partida
- Si revisas la idea del proyecto, es claro que nos solicita algo importante, como lo es “aleatorio”, para esto importaremos la librería “random”
import random
- Seguido, utilizaremos un diccionario el cual contiene “claves” y “valores”, para decirle a python con cuáles cartas jugaremos.
cartas = {
"dos": 2,
"tres": 3,
"cuatro": 4,
"cinco": 5,
"seis": 6,
"siete": 7,
"ocho": 8,
"nueve": 9,
"J": 10,
"Q": 10,
"K":10,
"As": 11
}
- Bien, ahora necesitaremos tener un control sobre el programa, ya que el usuario debe ser capaz de iniciar o finalizar el programa cuando lo desee; para esto usaremos la función “input” y lo transformaremos a entero, para dejarlo en un valor (1 o 0).
menu = int(input("Marque 1 si desea emepezar a jugar 21 BlackJack o 0 si desea salir\n"))
- Para realizar el proceso iniciaremos con un ciclo While, el cual calculará si el usuario ha marcado 1 o 0
whilemenu > 0:
- Para que el jugador tenga un indicio de lo que ha ganado y perdido, vamos a establecer una variable que se llame "dinero =50"
y que de inicio tenga un valor de $50
dinero = 50
- Ahora bien, mientras el valor del dinero del jugador se mantenga por encima de $0, tendrá la oportunidad de seguir jugando, para esto usaremos nuevamente un ciclo While anidado, debe verse algo así:
while menu > 0:
dinero = 50
while dinero > 0:
-
Teniendo esto en cuenta, emepzaremos a escribir la lógica de nuestr porgrama, una para el “crupier” o más conocido como la “casa” y otra para el “jugador”, así que desarrollaremos primero la elección aleatoria de las cartas dentro de nuestro diccionario.
-
Es bueno recordar que, los diccionarios tienen la siguiente estructura {Keys: VALOR}, para nuestro caso usaremos las Keys, y solamente debemos tener dos cartas.
-
Para este caso, es necesario conocer que la función a utilizar es random.sample(datos, 2). Esta función permite obtener una muestra y para nuestro caso, necesitamos dos objetos. Fianlmente, para el caso transformamos estos datos en una lista, para poder trabajar más sencillo.
#Lógica de Crupier
print("Apuesta de $10")
mesa = random.sample(list(cartas.keys()),2)
print(f"Cartas del Crupier: {mesa}")
-
Siguiente, debemos establecer cuánto será la suma de las cartas que tiene la mesa. Pero, tenemos seleccionadas solamente las Keys, para esto debemos acceder a los valores que están ligados a esas Keys. Para esto es debido recordar que, con los corchetes cuadrados podemos acceder a los datos más específicos de un diccionario ejemplo cartas[valor].
-
Para este proceso usaremos el ciclo For, para que recorra toda la lista y sume los datos que se encuentran dentro de ella.
suma_mesa = 0
for carta_m in mesa:
suma_mesa = suma_mesa + cartas[carta_m]
- Al obtener la suma de las cartas debemos comparar si dentro de estos datos se encuentra el “As”, el cual puede valer 1 u 11, y validar si la suma es mayor a 21, ya que este es el tope. En caso de que la suma sea mayor a 21, el valor de “As” debe ser de 1, para esto restaremos - 10.
if"As" in mesa and suma_mesa > 21:
suma_mesa = suma_mesa - 10
print(f"Suma de las cartas del Curpier: {suma_mesa}")
- Ahora, aplicaremos la misma lógica para el Jugador.
#Lógica de Jugador
jugador = random.sample(list(cartas.keys()),2)
print(f"Cartas del Jugador: {jugador}")
suma_Cartas = 0
for carta_j in jugador:
suma_Cartas = suma_Cartas + cartas[carta_j]
if"As"in jugador and suma_Cartas > 21:
suma_Cartas = suma_Cartas - 10
print(f"Suma de las cartas del Jugador: {suma_Cartas}")
- Al final desarrollaremos la comparación si, el jugador o la mesa ha ganado el juego, esto dependerá de la mano que tenga mayor valor en la suma. Si el jugador pierde, se le restará del dinero $10, si gana se le sumarán $10 y tendrá la posibilidad de escoger si retirarse o volver a jugar.
if suma_mesa > suma_Cartas:
print(f"La Casa ha ganado la partida")
dinero = dinero - 10
print(f"Su dinero es: {dinero}")
elif suma_mesa == suma_Cartas:
print(f"Empate")
dinero = 50
print(f"Su dinero es: {dinero}")
else:
print(f"El jugador ha ganado la partida")
dinero = dinero + 10
print(f"Su dinero es: {dinero}")
if dinero <= 0:
print("Te has quedado sin dinero. Gracas por jugar")
break
menu = int(input("Marque 1 si desea emepezar a jugar 21 BlackJack o 0 si desea salir\n"))
Curso de Fundamentos de Python