A lo largo de este curso de fundamentos de python se nos enseñaron algunos tipos y estructuras de datos. Ademas de esto, se nos enseño algo de lógica y se hizo un juego de piedra, papel o tijera, lo cual normalmente se usa logica sencilla para que podamos irnos familiarizando con la sintaxis, etc.
<h1>Codigo del juego</h1>Yo desarrolle mi codigo y mi logica (que por cierto es parecida a la vista en clase), pero lo hice por mi cuenta y te voy a explicar como se desarrollo este codigo:
import random
finalResults = []
options = ("scissors", "paper", "stone")
results = {
f"{options[0]} {options[1]}": "win",
f"{options[0]} {options[2]}": "lose",
f"{options[1]} {options[0]}": "lose",
f"{options[1]} {options[2]}": "win",
f"{options[2]} {options[0]}": "win",
f"{options[2]} {options[1]}": "lose"
}
inputMsg = ""for option in options:
inputMsg += f"{option.capitalize()} "
results[f"{option} {option}"] = "tie"
inputMsg += ": "
rounds = len(options)
i = 0
userOption = ""
computerOption = ""while i < rounds ornot userOption in options:
userOption = input(inputMsg).lower()
if userOption in options:
i += 1
computerOption = random.choice(options)
result = results[f"{userOption} {computerOption}"]
finalResults.append(result)
print(result)
if i == rounds:
print("Your final results:", finalResults)
Si tu corres este codigo en python, veras que funciona. Sin embargo, no sirve de nada estar bien y haber solucionado el problema si no lo entiendes y no lo puedes replicar, por lo que te voy a explicar cada fragmento del codigo.
<h1>Explicacion</h1>Aunque la primera parte del codigo puede verse muy compleja, la verdad es que no, es de hecho lo mas sencillo y es un setup para hacer la verdadera logica del juego
import random
finalResults = []
options = ("scissors", "paper", "stone")
results = {
f"{options[0]} {options[1]}": "win",
f"{options[0]} {options[2]}": "lose",
f"{options[1]} {options[0]}": "lose",
f"{options[1]} {options[2]}": "win",
f"{options[2]} {options[0]}": "win",
f"{options[2]} {options[1]}": "lose"
}
inputMsg = ""
for option in options:
inputMsg += f"{option.capitalize()} "
results[f"{option} {option}"] = "tie"
inputMsg += ": "rounds = len(options)
Primero se importa un modulo de random
que se ocupa en una ocacion dentro de la logica, despues se crean 3 listas (en realidad, es una lista, una tupla y un dictionary), donde se almacena o se almacenara informacion importante:
Esta es una lista vacia donde se van a ir guardando los resultados del usuario
Una tupla donde se guardan en minusculas cada una de las opciones de las que se puede elegir, que en este caso son Piedra, Papel o Tijeras.
Este es un dictionary donde se estan guardando los resultados de cada posible output. Por ejemplo, si el usuario elige Tijeras y la computadora elige Papel, el usuario gana. Todos estos posibles resultados estan dentro del dictionary
Despues en el codigo, tenemos un inputMsg
, que es el mensaje que sale en el codigo para que nosotros ingresemos un input, en este caso luciria de la siguiente manera:
Scissors Paper Stone :
Este mensaje empieza como un string vacio, ya que se va a ir creando a traves de la logica que se usa en el juego.
Este es un for loop para que se agreguen los empates en el dictionary de results
, ya que cada vez que el usuario y la computadora eliguieran lo mismo, tendre un empate. Esto se hizo para que no se tuvieran que agregar tres opciones de manera manual en el dictionary de results
, ademas de que ahi aproveche para llenar el inputMsg
Esta variable nos da la cantidad de veces que se va a ejecutar el juego. En este caso son tres, porque es la longitud que tiene la tupla de options, pero puede ser 2 o 5.
<h1>Segunda parte del codigo</h1>En esta segunda parte del codigo es donde empieza a haber logica mas interesante. Podria decirse que en esta segunda parte es donde hacemos que el juego funcione de manera correcta:
i = 0
userOption = ""
computerOption = ""while i < rounds ornot userOption in options:
userOption = input(inputMsg).lower()
if userOption in options:
i += 1
computerOption = random.choice(options)
result = results[f"{userOption} {computerOption}"]
finalResults.append(result)
print(result)
if i == rounds:
print("Your final results:", finalResults)
Primero, se utiliza una variable de control (i
), para que esta nos vaya indicando cuando ya se terminaron los rounds, ademas de esto, se tienen las variables para la opcion que eligieron tanto el usuario como la computadora.
Despues, se tiene un while loop, porque no se sabe si el usuario va a agregar un input valido o no. Si agrega algo que no este dentro de las opciones, entonces el programa le vuelve a pedir que ingrese un input, hasta que alla ingresado algo valido.
Dentro de este while loop, se transforma el input del usuario a lowerCase, para que no haya problema si el input lo agrega en mayusculas, minusculas o una combinacion de ambas.
Se hace la validacion de que si el input coincide con alguna de las opciones validas, entonces aumenta la variable de control (i
), ya que se estaria disminuyendo la cantidad de rounds que quedan y se estaria eliguiendo de manera aleatoria una opcion para la computadora.
Posteriormente, teniendo la opcion de la computadora y la del usuario, se ve cual fue el resultado (win, lose or tie). Y ese resultado se agrega a la lista de finalResults
y se pinta en la consola.
Al final, la ultima validacion es en relacion de que si se ha llegado al maximo de rounds posibles y si sí, entonces se pinta en pantalla el historial de todos los resultados del usuario