【ITニュース解説】Building a Harry Potter Quiz in Python
2025年09月15日に「Dev.to」が公開したITニュース「Building a Harry Potter Quiz in Python」について初心者にもわかりやすく解説しています。
ITニュース概要
CS101プロジェクトでPythonを使い、ハリーポッターのCLIクイズゲームを開発。クラス、ループ、入力検証といったPythonの基本を実践し、OOPやデバッグの重要性を学んだ。小規模な開発が、SEを目指す上での貴重なステップとなることを伝えている。
ITニュース解説
開発の第一歩は、自分が好きなものを題材にコードを書くことから始まることが多い。この記事では、ハリーポッターの世界を題材にしたシンプルなクイズゲームをPythonというプログラミング言語で作成した経験が語られている。このプロジェクトは、大学のCS101という基礎的なプログラミングコースのポートフォリオとして作られ、コマンドラインインターフェース(CLI)を通じて、ユーザーがターミナル上で対話的に遊べるゲームを目指したものだ。ゲームを開発する過程で、Pythonの『クラス』機能、処理を繰り返す『ループ』、そしてユーザーからの情報を受け取る『入力検証』といった重要なプログラミングの概念を実践的に学んだ。数あるゲームの中からハリーポッターのクイズを選んだのは、個人的な愛情と、楽しさと達成感のバランスが取れていると感じたからだ。ゲームにハウスポイントを加えることで、より魔法の世界観に没入できるような工夫も凝らされている。
このクイズゲームの中核をなすのは、Pythonの『クラス』という強力な機能で定義されたQuestionという設計図である。このQuestionクラスは、それぞれの質問が持つべき情報、つまり『質問の本文』『複数の選択肢』『正しい答え』を一つにまとめて管理する役割を担う。このように、現実世界にあるモノや概念をプログラム内で表現し、関連するデータと機能をカプセル化する考え方を『オブジェクト指向プログラミング(OOP)』と呼ぶ。ゲームが始まると、このQuestionクラスから作られたたくさんの質問オブジェクトがリストとして用意され、プログラムはそのリストを一つずつ順番に処理していく。これは、特定の処理を繰り返す『ループ』というプログラミングの基本要素だ。各質問が表示されるたびに、プログラムはinput()という命令を使ってユーザーからの回答を受け取る。受け取った回答が、あらかじめ設定された正しい答えと一致するかどうかを判断し、正解であれば決められたハウスポイントをプレイヤーに付与する仕組みだ。この一連の処理を通じて、プログラムはユーザーと対話し、ゲームの進行状況やスコアを適切に管理している。オブジェクト指向プログラミングの考え方は、プログラムの構造をより整理し、変更や拡張がしやすくする上で非常に有効な手法である。
開発の過程では、いくつかの実践的な課題に直面し、それを解決することで多くのことを学んだ。一つは『二重入力』という予期せぬ問題だ。プログラムが質問ごとにユーザーからの回答を2回求めてしまうというバグが発生した。原因を詳しく調べると、回答を受け取るためのinput()命令が、プログラムの意図しない箇所で重複して記述されていたことが判明した。このような問題は、慌てずにコードを上から下まで注意深く見直すことで発見できる。プログラミングでは、意図しない動作の原因を突き止めるための論理的な思考が非常に重要となる。もう一つは『入力検証』の重要性だ。ユーザーが選択肢として提示された数字以外、例えば『lol』のような無効な文字を入力した場合に、プログラムが予期せず停止してしまう可能性があった。これを防ぐために、isdigit()というPythonの機能を使って、入力された文字が数字であるかをチェックし、数字でなければ再入力を促すループを導入した。これにより、プログラムの堅牢性とユーザーフレンドリーさが大幅に向上した。
このプロジェクトを通じて得られた学びは多岐にわたる。まず、Pythonのクラスシステムを使うことで、複数の質問データのように、形が同じで繰り返される情報を効率的に管理できることを実感した。クラスのおかげで、一つ一つの質問が独立したまとまりとして扱え、コードがすっきりとしてメンテナンスしやすくなる。これは、大規模なプログラムを構築する上で不可欠な考え方だ。次に、コマンドラインインターフェース(CLI)のデザイン、つまりターミナルに表示されるテキストの見栄えも重要だという点だ。例えば、print("=" * 40)のように区切り線を表示するだけでも、質問と回答の境目が明確になり、ユーザーにとって読みやすい、使いやすいプログラムになる。単に機能するだけでなく、使う人が快適に操作できるような工夫が大切だと理解した。そして何より、プログラミングにおける『デバッグ』、つまりバグを見つけて修正する作業の重要性を痛感した。デバッグは、単にプログラミング言語の文法を理解するだけでなく、自分が書いたコードの論理的な流れや意図しない副作用を深く読み解く能力が求められることを示している。これは開発者にとって不可欠なスキルだ。
このクイズゲームには、さらに改善できる点がいくつか挙げられている。例えば、質問の順番を毎回ランダムに入れ替える機能や、『本のみ』『映画』『ハードコアルール』といったように、質問をカテゴリー別に分ける機能の追加が検討されている。これらの改善は、ゲームの繰り返しプレイを促し、より幅広いユーザーに楽しんでもらうための工夫だ。このような機能追加のアイデアを考えることも、開発者としての重要なスキルとなる。このプロジェクトは、Pythonを使って何かインタラクティブで楽しいものを作る最初の実践的な経験となった。見た目は派手ではないものの、基本的な機能は十分に満たしており、オブジェクト指向プログラミングの基礎、ユーザーからの入力処理、そしてGitと呼ばれるバージョン管理システムを使った基本的なワークフローを実践的に学ぶ貴重な機会となった。Gitワークフローは、複数人での開発や、過去のコードの状態に戻したりする際に非常に役立つ。小さなプロジェクトであっても、このような基礎的なスキルを実践的に習得することは、それが次のより大きく複雑なプロジェクトへとつながる重要な足がかりとなることを、この経験は示している。