Skip to content

Instantly share code, notes, and snippets.

@fernandolopez
Last active May 16, 2024 12:47
Show Gist options
  • Save fernandolopez/2f41e4b36f1811a5e0535525444f94bf to your computer and use it in GitHub Desktop.
Save fernandolopez/2f41e4b36f1811a5e0535525444f94bf to your computer and use it in GitHub Desktop.
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