from flask import Flask, render_template, request, session, redirect, url_for import json import random app = Flask(__name__) app.secret_key = "your_secret_key_here" # JSONファイルから元素と原子番号の対応関係を読み込む with open("element_atomic_numbers.json", "r", encoding="utf-8") as f: element_atomic_numbers = json.load(f) # JSONファイルから首都のデータを読み込む with open("capitals.json", "r", encoding="utf-8") as f: capitals = json.load(f) # element_outer_electrons with open("element_outer_electrons.json", "r", encoding="utf-8") as f: element_outer_electrons = json.load(f) # ランダムな国名とその首都を取得する関数 def get_random_country(): country = random.choice(list(capitals.keys())) return country, capitals[country] # 初期の問題を設定する current_country, current_capital = get_random_country() @app.route('/') def index(): return render_template('quiz_index.html') @app.route('/quiz_capital', methods=['GET', 'POST']) def quiz_capital(): global current_country, current_capital result = None if request.method == 'POST': user_input = request.form['user_input'] if user_input == current_capital: result = '正解です!' else: result = '不正解です。正解は{}です。'.format(current_capital) return render_template('quiz_capital.html', element=current_country, result=result) @app.route('/next_capital', methods=['POST']) def next_question_capital(): global current_country, current_capital current_country, current_capital = get_random_country() return redirect(url_for('quiz_capital')) @app.route('/quiz_element', methods=['GET', 'POST']) def quiz_element(): # セッションに元素がない場合はランダムに選択 if "element" not in session: session["element"] = random.choice(list(element_outer_electrons.keys())) if request.method == "POST": user_input = int(request.form["user_input"]) correct_answer = element_outer_electrons[session["element"]] if user_input == correct_answer: result = "正解です!" else: result = f"残念!正解は {correct_answer} でした。" return render_template("quiz_element.html", element=session["element"], result=result) return render_template("quiz_element.html", element=session["element"], result=None) @app.route("/next_element", methods=["POST"]) def next_question_element(): # 次の問題をセッションに設定し、リダイレクト session["element"] = random.choice(list(element_outer_electrons.keys())) return redirect(url_for("quiz_element")) @app.route('/quiz_element2num', methods=['GET', 'POST']) def quiz_element2num(): # セッションに元素がない場合はランダムに選択 if "element" not in session: session["element"] = random.choice(list(element_atomic_numbers.keys())) if request.method == "POST": user_input = request.form["user_input"] correct_answer = [key for key, value in element_atomic_numbers.items() if value == session["element"]] if correct_answer: correct_answer = correct_answer[0] else: # Handle the case where no correct answer is found correct_answer = "No matching element found" if user_input == correct_answer: result = "正解です!" else: result = f"残念!正解は {correct_answer} でした。" return render_template("quiz_element2num.html", element=session["element"], result=result) return render_template("quiz_element2num.html", element=element_atomic_numbers[session["element"]], result=None) @app.route("/next_element2num", methods=["POST"]) def next_question_element2num(): # 次の問題をセッションに設定し、リダイレクト session["element"] = random.choice(list(element_atomic_numbers.values()))[1] return redirect(url_for("quiz_element2num")) if __name__ == '__main__': app.run(debug=True, port=7860, host="0.0.0.0")