Last active
May 16, 2024 12:47
-
-
Save fernandolopez/2f41e4b36f1811a5e0535525444f94bf to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import streamlit as st | |
import random | |
import string | |
# NO_CREADO -> GENERAR_PREGUNTA -> NUEVO -> MOSTRAR_PUNTAJE | |
# ^---------------------------v | |
# 1. El juego tiene estados. | |
# 2. Los datos que quiero persistir los guardo en el session_state. | |
# 3. Cada vez que cambio de estado ejecuto rerun() para volver a ejecutar | |
# el script. | |
# Si no existe el estado, lo creo | |
if "game_state" not in st.session_state: | |
st.session_state["game_state"] = { | |
"state": "NO_CREADO", | |
"user": None, | |
"score": 0, | |
"ultima_respuesta": None, | |
"ultima_pregunta": "", | |
"ultimas_opciones": "", | |
} | |
if st.session_state.game_state["state"] == "NO_CREADO": | |
with st.form("user_selection"): | |
nombre = st.text_input('Nombre usuario') | |
jugar = st.form_submit_button("Jugar") | |
if jugar: | |
st.session_state.game_state["state"] = "GENERAR_PREGUNTA" | |
st.session_state.game_state["user"] = nombre | |
st.rerun() | |
elif st.session_state.game_state["state"] == "GENERAR_PREGUNTA": | |
st.session_state.game_state["state"] = "NUEVO" | |
st.session_state.game_state["ultima_pregunta"] = f"Pregunta {random.choice(string.ascii_letters)}" | |
st.session_state.game_state["ultimas_opciones"] = [random.choice(string.ascii_letters) for _ in range(5)] | |
st.rerun() | |
elif st.session_state.game_state["state"] == "NUEVO": | |
with st.form("questions"): | |
pregunta = st.session_state.game_state["ultima_pregunta"] | |
respuestas = st.session_state.game_state["ultimas_opciones"] | |
respuesta = st.radio(pregunta, respuestas) | |
responder = st.form_submit_button("Submit") | |
if responder: | |
st.session_state.game_state["state"] = "MOSTRAR_PUNTAJE" | |
st.session_state.game_state["score"] += 1 | |
st.session_state.game_state["ultima_respuesta"] = respuesta | |
st.rerun() | |
elif st.session_state.game_state["state"] == "MOSTRAR_PUNTAJE": | |
st.write(f"Respondió {st.session_state.game_state['ultima_respuesta']}") | |
st.write(f"El puntaje de {st.session_state.game_state['user']} es {st.session_state.game_state['score']}") | |
if st.button("Próxima pregunta"): | |
st.session_state.game_state["state"] = "GENERAR_PREGUNTA" | |
st.rerun() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment