プログラミング

Python超入門⑧ クイズゲームを完成させよう

変数、if文、for文、関数、リスト、辞書を組み合わせ、3問のクイズゲームを作ります。

最終回では、これまでの文法を組み合わせてクイズゲームを作ります。

完成したコード

questions = [
    {"text": "2 + 3 は?", "answer": "5"},
    {"text": "Pythonで文字を表示する関数は?", "answer": "print"},
    {"text": "リストの最初の位置は?", "answer": "0"}
]


def ask_question(question):
    user_answer = input(question["text"] + " ")
    return user_answer == question["answer"]


score = 0

for question in questions:
    if ask_question(question):
        print("正解です")
        score += 1
    else:
        print(f"正解は{question['answer']}です")

print(f"{len(questions)}問中{score}問正解しました")

問題をリストと辞書で保存する

questionsはリストです。その中へ、問題文と答えを持つ辞書を入れています。

問題を増やしたいときは、同じ形の辞書をリストへ追加します。

1問分を関数へ分ける

ask_question関数は、問題を表示して答えを受け取ります。

入力された答えと正解が同じならTrue、違えばFalseを返します。

for文で全問題を出す

for question in questions:

questionsの辞書が一つずつquestionへ入ります。正解した場合だけscoreを1増やします。

改造してみよう

  1. 問題を5問へ増やす
  2. 大文字と小文字を区別しないようにする
  3. 正解率を表示する
  4. 問題をファイルから読み込む

一つ変更したら実行し、正しく動くことを確認してから次へ進みましょう。

模範解答

まず、プログラムと同じフォルダへquestions.jsonを作ります。

[
  {"text": "2 + 3 は?", "answer": "5"},
  {"text": "Pythonで文字を表示する関数は?", "answer": "print"},
  {"text": "リストの最初の位置は?", "answer": "0"},
  {"text": "真を表す値は?", "answer": "true"},
  {"text": "繰り返しに使うキーワードは?", "answer": "for"}
]

次のプログラムでファイルを読み込み、5問を出題します。

import json


with open("questions.json", "r", encoding="utf-8") as file:
    questions = json.load(file)


def ask_question(question):
    user_answer = input(question["text"] + " ").strip().lower()
    correct_answer = question["answer"].strip().lower()
    return user_answer == correct_answer


score = 0

for question in questions:
    if ask_question(question):
        print("正解です")
        score += 1
    else:
        print(f"正解は{question['answer']}です")

rate = score / len(questions) * 100
print(f"{len(questions)}問中{score}問正解しました")
print(f"正解率は{rate:.1f}%です")

解説

json.loadでJSONファイルをPythonのリストと辞書へ変換します。stripは前後の空白を取り除き、lowerは英字を小文字へそろえるため、PRINTprintを同じ答えとして判定できます。正解数を問題数で割って100を掛けると正解率になります。

まとめ

  • リストと辞書で複数の問題を管理できます。
  • 関数へ処理を分けると、流れを読みやすくできます。
  • if文とfor文を組み合わせると、採点処理を作れます。

前の記事:Python超入門⑦ エラー処理とファイル保存

最初から復習する:Python超入門① 最初のプログラムを書いて動かそう

Pythonシリーズの記事をまとめて見る

← 記事一覧へ戻る