|
from flask import Flask, render_template, request, session, redirect, url_for |
|
import random |
|
|
|
app = Flask(__name__) |
|
app.secret_key = "your_secret_key_here" |
|
|
|
element_atomic_numbers = { |
|
1: ['H', '水素 (Hydrogen)'], |
|
2: ['He', 'ヘリウム (Helium)'], |
|
3: ['Li', 'リチウム (Lithium)'], |
|
4: ['Be', 'ベリリウム (Beryllium)'], |
|
5: ['B', 'ホウ素 (Boron)'], |
|
6: ['C', '炭素 (Carbon)'], |
|
7: ['N', '窒素 (Nitrogen)'], |
|
8: ['O', '酸素 (Oxygen)'], |
|
9: ['F', 'フッ素 (Fluorine)'], |
|
10: ['Na', 'ナトリウム (Sodium)'], |
|
11: ['Al', 'アルミニウム (Aluminium)'], |
|
12: ['Si', 'ケイ素 (Silicon)'], |
|
13: ['P', 'リン (Phosphorus)'], |
|
14: ['S', '硫黄 (Sulfur)'], |
|
15: ['Cl', '塩素 (Chlorine)'], |
|
16: ['K', 'カリウム (Potassium)'], |
|
17: ['Ti', 'チタン (Titanium)'], |
|
18: ['Cr', 'クロム (Chromium)'], |
|
19: ['Mn', 'マンガン (Manganese)'], |
|
20: ['Fe', '鉄 (Iron)'], |
|
21: ['Cu', '銅 (Copper)'], |
|
22: ['Zn', '亜鉛 (Zinc)'], |
|
23: ['As', 'ヒ素 (Arsenic)'], |
|
24: ['Se', 'セレン (Selenium)'], |
|
25: ['Br', '臭素 (Bromine)'], |
|
26: ['Nb', 'ニオブ (Niobium)'], |
|
27: ['Mo', 'モリブデン (Molybdenum)'], |
|
28: ['Ag', '銀 (Silver)'], |
|
29: ['Sn', 'スズ (Tin)'], |
|
30: ['Sb', 'アンチモン (Antimony)'] |
|
} |
|
|
|
|
|
capitals = { |
|
'アルバニア': 'ティラナ', |
|
'アンドラ': 'アンドラ・ラ・ベリャ', |
|
'オーストリア': 'ウィーン', |
|
'ベラルーシ': 'ミンスク', |
|
'ベルギー': 'ブリュッセル', |
|
'ボスニア・ヘルツェゴビナ': 'サライェヴォ', |
|
'ブルガリア': 'ソフィア', |
|
'クロアチア': 'ザグレブ', |
|
'チェコ': 'プラハ', |
|
'デンマーク': 'コペンハーゲン', |
|
'エストニア': 'タリン', |
|
'フィンランド': 'ヘルシンキ', |
|
'フランス': 'パリ', |
|
'ドイツ': 'ベルリン', |
|
'ギリシャ': 'アテネ', |
|
'ハンガリー': 'ブダペスト', |
|
'アイスランド': 'レイキャヴィーク', |
|
'アイルランド': 'ダブリン', |
|
'イタリア': 'ローマ', |
|
'ラトビア': 'リガ', |
|
'リヒテンシュタイン': 'ファドゥーツ', |
|
'リトアニア': 'ヴィリニュス', |
|
'ルクセンブルク': 'ルクセンブルク', |
|
'マルタ': 'バレッタ', |
|
'モルドバ': 'キシナウ', |
|
'モナコ': 'モナコ', |
|
'モンテネグロ': 'ポドゴリツァ', |
|
'オランダ': 'アムステルダム', |
|
'北マケドニア': 'スコピエ', |
|
'ノルウェー': 'オスロ', |
|
'ポーランド': 'ワルシャワ', |
|
'ポルトガル': 'リスボン', |
|
'ルーマニア': 'ブカレスト', |
|
'ロシア': 'モスクワ', |
|
'サンマリノ': 'サンマリノ', |
|
'セルビア': 'ベオグラード', |
|
'スロバキア': 'ブラチスラヴァ', |
|
'スロベニア': 'リュブリャナ', |
|
'スペイン': 'マドリード', |
|
'スウェーデン': 'ストックホルム', |
|
'スイス': 'ベルン', |
|
'ウクライナ': 'キーウ', |
|
'イギリス': 'ロンドン', |
|
'バチカン': 'バチカン', |
|
'アルメニア': 'エレバン', |
|
'アゼルバイジャン': 'バクー', |
|
'キプロス': 'ニコシア', |
|
'ジョージア': 'トビリシ', |
|
'イスラエル': 'エルサレム', |
|
'カザフスタン': 'アスタナ', |
|
'トルコ': 'アンカラ', |
|
"エチオピア": "アディスアベバ", |
|
} |
|
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, |
|
|
|
} |
|
|
|
|
|
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') |
|
|
|
@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.values()))[1] |
|
|
|
if request.method == "POST": |
|
user_input = int(request.form["user_input"]) |
|
correct_answer = [key for key, value in element_atomic_numbers.items() if value[1] == session["element"]][0] |
|
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=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) |
|
|