st.text_inputはst.writeの中に組み込むことは可能?
出力した問題の後ろに解答欄を設置したい
希望としては出題された式の「=」の後ろに回答入力欄を設置したいのですが、下記のようにダメ元で問題を出力する時にst.text_inputを組み込んでみましたがエラーとなりました。
for idx, question in enumerate(st.session_state.questions, 1):
st.write(f'<p style="font-size: 20px;">問{idx}) {question} {st.text_input")}</p>', unsafe_allow_html=True)
ネット上で検索を行ってみましたが知識不足も否めず、そもそも可能なのかどうかも判断がつかない状態です。
ご教授のほどよろしくお願いします。
以下は現在のコードになります。
※元のコードは他の計算問題もあ流溜め足し算と問題、正解の出力関連の部分のみ抜粋しております。情報に不足があれば指摘頂ければと思います。
from fractions import Fraction
import requests
import streamlit as st
if 'questions' not in st.session_state:
st.session_state.questions = []
if 'answers' not in st.session_state:
st.session_state.answers = []
if 'show_answers' not in st.session_state:
st.session_state.show_answers = False
st.title('算数の勉強部屋')
st.write('')
st.sidebar.write("注意:半角小文字の数字を入力してください。")
a = st.sidebar.text_input("問題数", value='5')
b = st.sidebar.text_input("桁数", value='2')
# 足し算
if st.sidebar.button(" + (足し算)"):
try:
num_questions = int(a)
num_digits = int(b)
except ValueError:
st.sidebar.error("問題数と桁数には整数を入力してください。")
else:
st.session_state.questions = []
st.session_state.answers = []
st.session_state.show_answers = False
for i in range(num_questions):
url = 'http://127.0.0.1:8000/page_add'
response = requests.post(url, json={"num_times": 2, "num_range": num_digits})
if response.status_code == 200:
data = response.json()
question_list = data["question_list"]
answer = data["answer"]
question = f"{question_list[0]} + {question_list[1]} = "
st.session_state.questions.append(question)
st.session_state.answers.append(int(answer))
else:
st.error(f"{response.status_code}エラーが発生しました。詳細は以下を参照ください")
st.json(response.json())
break
# 各計算問題の出力
if st.session_state.questions:
answer_list = []
st.write("### 問題一覧")
for idx, question in enumerate(st.session_state.questions, 1):
st.write(f'<p style="font-size: 20px;">問{idx}) {question}</p>', unsafe_allow_html=True)
answer_list.append(st.text_input(f"回答{idx}"))
if st.button('正解表示'):
st.session_state.show_answers = True
if st.session_state.show_answers:
st.write("### 正解一覧")
for idx, answer in enumerate(st.session_state.answers, 1):
st.write(f'<p style="font-size: 20px;">問{idx}){answer}</p>', unsafe_allow_html=True)
list_idx = idx - 1
if int(answer_list[list_idx]) == int(answer):
st.write("○")
else:
st.write("×")
0