Однако после того, как пользователь нажимает кнопку, старое число по-прежнему отображается для следующего раунда выбора вместо отображения следующего случайного числа. Только после повторного нажатия кнопки появляется новый номер, но в конечном итоге ответ ассоциируется с новым номером, а не со старым. Ниже приведен упрощенный пример кода, который я использую:
Код: Выделить всё
import streamlit as st
import random
import json
# Initialize session state to store numbers and user responses in JSON format
if "data" not in st.session_state:
st.session_state.data = []
# Function to generate the next random number
def get_next_number():
return random.randint(0, 100)
# Initialize the first number when the app starts
if "current_number" not in st.session_state:
st.session_state.current_number = get_next_number()
# Function to handle the user response
def store_response(response):
current_number = st.session_state.current_number
st.session_state.data.append({"Number": current_number, "Response": response})
# Generate the next random number immediately after response
st.session_state.current_number = get_next_number()
st.title("Random Number Preference App")
# Display the current number
st.write(f"Do you like the number **{st.session_state.current_number}**?")
# Layout for the response buttons
col1, col2 = st.columns(2)
# Handling "Yes" button click
with col1:
if st.button("Yes"):
store_response("Yes")
# Handling "No" button click
with col2:
if st.button("No"):
store_response("No")
# Display the stored responses in JSON format
if len(st.session_state.data) > 0:
st.subheader("User Responses (JSON Format)")
st.json(st.session_state.data)
# Allow the user to download the results as a JSON file
json_data = json.dumps(st.session_state.data)
st.download_button(label="Download as JSON", data=json_data, file_name="responses.json", mime="application/json")
- После отображения первого числа, если пользователь выбирает либо «Да» или «Нет», то же число отображается снова.
- Когда в конечном итоге отображается следующее случайное число, ранее записанный ответ (например, «Да» или «Нет») применяется к вновь сгенерированному номеру, а не к номеру, который пользователь видел при выборе.
- Начальный экран:
При запуске приложения он сразу показывает случайное число (например, 65). Пользователю предлагаются две кнопки: «Да» и «Нет», чтобы выбрать, нравится ли ему номер.
[img]https://i.sstatic.net /9QeQ3ziK.png[/img] - После выбора «Да»:
После нажатия кнопки «Да» приложение по-прежнему показывает тот же номер (65). Пользователь может еще раз нажать «Да» или «Нет», но кажется, что новое случайное число еще не появилось.
- Появляется следующее случайное число с неправильным ответом :
После повторного нажатия «Да» наконец отображается новое случайное число (в данном случае 44), но ответ (Да) из предыдущего выбора теперь связан с новый номер, поведение которого отличается от ожидаемого.

- Когда пользователь нажимает кнопку («Да» или «Нет»), должен немедленно появиться следующий номер, и ответ должен быть записан для текущего номера, а не для следующего.
Вопрос:
- Как заставить приложение показывать следующее случайное число сразу после того, как пользователь выбирает свой ответ, при этом правильно связывая записанный ответ с отображаемым номером?
Подробнее здесь: https://stackoverflow.com/questions/790 ... tton-click