from flask import Flask, render_template, request, session, redirect, url_for import random app = Flask(__name__) app.secret_key = "your_secret_key_here" # 元素と最外殻電子の数の辞書 element_outer_electrons: dict[str, int] = { "水素": 1, "ヘリウム": 2, "リチウム": 1, "ベリリウム": 2, "ホウ素": 3, "炭素": 4, "窒素": 5, "酸素": 6, "フッ素": 7, "アルゴン": 8, "クリプトン": 8, "キセノン": 8, "ナトリウム": 1, "マグネシウム": 2, "アルミニウム": 3, "ケイ素": 4, "リン": 5, "硫黄": 6, "塩素": 7, "カリウム": 1, "カルシウム": 2, # 他の元素も追加可能 } # 首都のデータを辞書に格納する capitals = { 'アルバニア': 'ティラナ', 'アンドラ': 'アンドラ・ラ・ベリャ', 'オーストリア': 'ウィーン', 'ベラルーシ': 'ミンスク', 'ベルギー': 'ブリュッセル', 'ボスニア・ヘルツェゴビナ': 'サライェヴォ', 'ブルガリア': 'ソフィア', 'クロアチア': 'ザグレブ', 'チェコ': 'プラハ', 'デンマーク': 'コペンハーゲン', 'エストニア': 'タリン', 'フィンランド': 'ヘルシンキ', 'フランス': 'パリ', 'ドイツ': 'ベルリン', 'ギリシャ': 'アテネ', 'ハンガリー': 'ブダペスト', 'アイスランド': 'レイキャヴィーク', 'アイルランド': 'ダブリン', 'イタリア': 'ローマ', 'ラトビア': 'リガ', 'リヒテンシュタイン': 'ファドゥーツ', 'リトアニア': 'ヴィリニュス', 'ルクセンブルク': 'ルクセンブルク', 'マルタ': 'バレッタ', 'モルドバ': 'キシナウ', 'モナコ': 'モナコ', 'モンテネグロ': 'ポドゴリツァ', 'オランダ': 'アムステルダム', '北マケドニア': 'スコピエ', 'ノルウェー': 'オスロ', 'ポーランド': 'ワルシャワ', 'ポルトガル': 'リスボン', 'ルーマニア': 'ブカレスト', 'ロシア': 'モスクワ', 'サンマリノ': 'サンマリノ', 'セルビア': 'ベオグラード', 'スロバキア': 'ブラチスラヴァ', 'スロベニア': 'リュブリャナ', 'スペイン': 'マドリード', 'スウェーデン': 'ストックホルム', 'スイス': 'ベルン', 'ウクライナ': 'キーウ', 'イギリス': 'ロンドン', 'バチカン': 'バチカン', 'アルメニア': 'エレバン', 'アゼルバイジャン': 'バクー', 'キプロス': 'ニコシア', 'ジョージア': 'トビリシ', 'イスラエル': 'エルサレム', 'カザフスタン': 'アスタナ', 'トルコ': 'アンカラ', "エチオピア": "アディスアベバ", } # ランダムな国名とその首都を取得する関数 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 redirect(url_for('quiz_index')) @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")) if __name__ == '__main__': app.run(debug=True, port=7860)