Pythonを勉強し始めたけれど、
「文法は少し分かってきたけど、実際に何か作ってみたい」
という人も多いのではないでしょうか。
Pythonは、WebサイトやAI、データ分析、自動化など、さまざまな用途に使われているプログラミング言語です。
しかし、最初から難しいプログラムを作る必要はありません。
まずは簡単なゲームを作りながらPythonの基本を使ってみると、プログラムの仕組みを理解しやすくなります。
この記事では、Python初心者向けに、**「数当てゲーム」**を作ってみます。
さらに、数字以外を入力した場合でもゲームが終了しないように、入力エラーへの対処方法も紹介します。
- Python初心者には簡単なゲーム作りがおすすめ
- 今回作る「数当てゲーム」
- 完成したプログラム
- 1.ランダムな数字を作る
- 2.変数に答えを保存する
- 3.プレイヤーから数字を入力してもらう
- 4.なぜint()を使うの?
- 5.数字以外を入力するとどうなる?
- 6.tryとexceptで入力エラーに対応する
- 7.実際に間違った入力をしてみる
- 8.1~10以外の数字にも対応する
- 9.continueとは?
- 10.正解かどうかを判定する
- 11.「==」は「=」とは違う
- 12.数字が小さかった場合
- 13.数字が大きかった場合
- 14.何度も挑戦できるようにする
- 15.正解したらゲームを終了する
- 16.入力エラーも含めたゲームの流れ
- 17.ゲームでは入力エラーへの対処が重要
- 18.Scratchで考えるとどうなる?
- 19.Pythonでは「コードを書く」ことでゲームを作る
- 20.ゲームを改造してみよう
- Python初心者は「小さなゲーム」から作ってみよう
- Pythonでゲームを作ると何が学べる?
- まとめ
Python初心者には簡単なゲーム作りがおすすめ
Pythonの勉強では、文法を覚えるだけでなく、実際にプログラムを動かしてみることが大切です。
例えば、
- 変数
- 条件分岐
- 繰り返し
- 入力
- 数値の比較
- エラー処理
などを組み合わせることで、簡単なゲームを作ることができます。
ゲームといっても、最初からグラフィックのある本格的なゲームを作る必要はありません。
まずは、
「コンピューターが考えた数字を当てる」
というシンプルなゲームを作ってみましょう。
プログラムを動かすにはPythonの実行環境が必要です。実行環境の構築方法はこちらの記事で詳しく解説しています。
今回作る「数当てゲーム」
今回作るのは、コンピューターが1~10の中から数字を1つ選び、プレイヤーがその数字を当てるゲームです。
例えば、コンピューターが「7」を選んだとします。
プレイヤーが、
3
と入力すると、
もっと大きい数字です
と表示します。
「9」と入力すると、
もっと小さい数字です
と表示します。
そして「7」を入力すると、
正解!
と表示されます。
非常にシンプルですが、Pythonの基本をたくさん使える教材になります。
完成したプログラム
まずは完成したコードを見てみましょう。
import random
answer = random.randint(1, 10)
print("1 から 10 までの中から、私が選んだ数字を当ててください!")
while True:
try:
number = int(input("答えの数字を入力してください:"))
if number < 1 or number > 10:
print("1~10の数字を入力してください")
continue
if number == answer:
print("正解!")
break
elif number < answer:
print("もっと大きい数字です")
else:
print("もっと小さい数字です")
except ValueError:
print("有効な数字を入力してください")
一見すると難しく感じるかもしれません。
しかし、1つずつ分解していけば、それほど難しくありません。
順番に見ていきましょう。
1.ランダムな数字を作る
最初に、この部分を見てみましょう。
import random
これはPythonのrandomという機能を利用するための記述です。
randomは、ランダムな数字を作るときなどに利用できます。
次に、
answer = random.randint(1, 10)
と書いています。
これは、
1~10の中からランダムに整数を1つ選ぶ
という意味です。
例えば実行するたびに、
3
になったり、
8
になったり、
10
になったりします。
2.変数に答えを保存する
ここで、
answer = random.randint(1, 10)
のanswerに注目してみましょう。
answerは変数です。
変数は、データを一時的に保存しておくためのものです。
例えば、
score = 100
と書けば、scoreという変数に100を保存できます。
今回の場合は、
answer = random.randint(1, 10)
として、コンピューターが選んだ数字をanswerに保存しています。
つまり、
answer
↓
コンピューターが選んだ数字
という状態です。
3.プレイヤーから数字を入力してもらう
次に、この部分です。
number = int(input("答えの数字を入力してください:"))
input()は、キーボードから文字を入力してもらうための機能です。
例えば、
input("名前を入力してください:")
とすると、
名前を入力してください:
と表示され、ユーザーが入力できます。
今回はこちらです。
input("答えの数字を入力してください:")
プレイヤーに数字を入力してもらいます。
4.なぜint()を使うの?
Python初心者には少し分かりにくいところです。
今回のコードでは、
int(input("答えの数字を入力してください:"))
としています。
input()で入力したものは、基本的に文字列として扱われます。
例えば、
10
と入力しても、そのままでは数値の10として扱われません。
そこで、
int()
を使って整数に変換します。
つまり、
input()
で入力を受け取り、
int()
で整数に変換しています。
その結果、
number = int(input("答えの数字を入力してください:"))
によって、プレイヤーが入力した数字をnumberという変数に保存できます。
5.数字以外を入力するとどうなる?
ここで問題があります。
例えばプレイヤーが、
abc
と入力したとします。
すると、
int("abc")
を実行することになります。
しかし、abcは整数に変換できません。
そのため、Pythonでは**ValueErrorというエラー**が発生します。
例えば、
ValueError: invalid literal for int()
のようなエラーメッセージが表示され、通常はプログラムがそこで終了してしまいます。
ゲームとしては、少し困りますね。
プレイヤーが間違った入力をしただけで、ゲームそのものが終了してしまうからです。
そこで使うのが、tryとexceptです。
6.tryとexceptで入力エラーに対応する
今回のコードでは、
try:
number = int(input("答えの数字を入力してください:"))
としています。
tryは、
「この処理を実行してみる」
という意味で使われます。
そして、その処理でエラーが発生した場合、
except ValueError:
print("有効な数字を入力してください")
が実行されます。
つまり、
数字を入力
↓
int()で整数に変換
↓
成功?
├─ YES → ゲームを続ける
└─ NO → exceptを実行
↓
「有効な数字を入力してください」
という流れになります。
7.実際に間違った入力をしてみる
例えばゲーム中に、
答えの数字を入力してください:abc
と入力したとします。
すると、
有効な数字を入力してください
と表示されます。
そしてゲームは終了せず、もう一度入力できます。
答えの数字を入力してください:abc
有効な数字を入力してください
答えの数字を入力してください:7
正解!
このように、ユーザーが間違った入力をしてもプログラムを正常に動かし続けることができます。
8.1~10以外の数字にも対応する
数字以外の入力だけでなく、
50
のように、ゲームの範囲外の数字を入力する場合もあります。
今回のゲームは1~10なので、
50
を入力されても困ります。
そこで、
if number < 1 or number > 10:
print("1~10の数字を入力してください")
continue
としています。
これは、
numberが1より小さい、または10より大きい場合
という条件です。
例えば、
0
や、
11
を入力すると、
1~10の数字を入力してください
と表示されます。
9.continueとは?
continueは、現在の繰り返しをそこで終了して、次の繰り返しに進むために使います。
今回の場合、
if number < 1 or number > 10:
print("1~10の数字を入力してください")
continue
なので、
11を入力
↓
範囲外と判定
↓
メッセージを表示
↓
continue
↓
もう一度入力
となります。
breakが「繰り返しを終了する」のに対して、
break
→ 繰り返しを終了
continue
→ 今回の処理を飛ばして、次の繰り返しへ
という違いがあります。
10.正解かどうかを判定する
次はゲームの中心部分です。
if number == answer:
print("正解!")
ifは、条件によって処理を分けるための機能です。
今回の場合、
number == answer
は、
プレイヤーが入力した数字と、コンピューターが選んだ数字が同じか?
を確認しています。
同じだった場合、
print("正解!")
を実行します。
11.「==」は「=」とは違う
Python初心者が混乱しやすいポイントです。
=
と、
==
は意味が違います。
=は、変数に値を入れるときに使います。
score = 100
これは、
scoreに100を入れる
という意味です。
一方、
score == 100
は、
scoreは100と同じか?
を確認しています。
ゲームを作るときには、この違いが重要になります。
12.数字が小さかった場合
次はこちらです。
elif number < answer:
print("もっと大きい数字です")
elifは、
先ほどの条件が成立しなかった場合に、別の条件を確認する
ために使います。
今回の場合、
number < answer
なので、
プレイヤーが入力した数字のほうが答えより小さいか?
を確認しています。
例えば答えが「7」で、プレイヤーが「3」と入力した場合、
3 < 7
なので、
もっと大きい数字です
と表示されます。
13.数字が大きかった場合
最後に、
else:
print("もっと小さい数字です")
があります。
elseは、それまでの条件に当てはまらなかった場合に実行されます。
今回の場合、
- 正解ではない
- 入力した数字が答えより小さくもない
という場合です。
つまり、答えより大きい数字を入力した場合になります。
例えば答えが「7」で、
9
と入力すると、
もっと小さい数字です
と表示されます。
14.何度も挑戦できるようにする
ここで、
while True:
を見てみましょう。
whileは、条件が成立している間、処理を繰り返すために使います。
今回は、
while True:
となっています。
これは簡単に言えば、
「Trueである間、ずっと繰り返す」
という意味です。
そのため、プレイヤーが間違えてもゲームを終了せず、もう一度数字を入力できます。
15.正解したらゲームを終了する
では、どうやって繰り返しを終了するのでしょうか?
ここで登場するのが、
break
です。
コードでは、
if number == answer:
print("正解!")
break
となっています。
正解したらbreakを実行します。
breakには、
繰り返しを途中で終了する
という役割があります。
つまり、
間違える
↓
もう一度入力
間違える
↓
もう一度入力
正解!
↓
break
↓
ゲーム終了
という流れです。
16.入力エラーも含めたゲームの流れ
今回のゲームでは、入力ミスにも対応しています。
全体の流れを整理すると、次のようになります。
ゲーム開始
↓
1~10の数字をランダムに決める
↓
プレイヤーが入力
↓
数字に変換できる?
┌─┴─┐
NO YES
↓ ↓
エラー 1~10の範囲内?
表示 ┌─┴─┐
↓ NO YES
再入力 ↓ ↓
エラー 正解?
表示 ┌─┴─┐
↓ YES NO
再入力 ↓ ↓
正解 ヒント
↓ ↓
終了 再入力
このように、実際のプログラムでは、
「ユーザーが正しい操作をするとは限らない」
ということを考える必要があります。
17.ゲームでは入力エラーへの対処が重要
今回の例では数字以外の入力だけですが、実際のプログラムではさまざまな入力ミスが考えられます。
例えば、
- 数字を入力するところに文字を入力する
- 範囲外の数字を入力する
- 空欄のままEnterキーを押す
- 想定していない形式のデータを入力する
などです。
プログラムを作る側は、
「ユーザーが間違った入力をしたらどうなる?」
と考える必要があります。
これはゲームに限った話ではありません。
Webサイトや業務システム、スマートフォンアプリなどでも重要な考え方です。
18.Scratchで考えるとどうなる?
Scratchを使ったことがある人なら、このゲームの仕組みをイメージしやすいと思います。
例えばScratchでは、
もし <答えと入力した数字が同じ> なら
「正解!」と言う
のようなブロックを使って処理できます。
Pythonでは、それをコードで、
if number == answer:
print("正解!")
と書いているわけです。
同じプログラミングの考え方でも、表現方法が違います。
Scratchで学んだ、
- 条件分岐
- 繰り返し
- 変数
- 入力
- 比較
などの考え方は、Pythonでも役立ちます。
19.Pythonでは「コードを書く」ことでゲームを作る
Scratchでは、ブロックを組み合わせてプログラムを作ります。
一方、Pythonではコードを書きます。
例えばScratchの、
もし~なら
に近い処理は、
if
を使います。
また、繰り返し処理では、
while
や、
for
などを使います。
つまり、ScratchとPythonでは見た目は大きく違いますが、プログラミングの基本的な考え方には共通する部分があります。
20.ゲームを改造してみよう
数当てゲームが動いたら、そのまま終わりにする必要はありません。
むしろ、ここからがプログラミングの面白いところです。
例えば、次のような改造ができます。
1~100の数字にする
現在は、
answer = random.randint(1, 10)
ですが、
answer = random.randint(1, 100)
に変更すると、1~100の数当てゲームになります。
その場合は、入力チェックも、
if number < 1 or number > 100:
に変更しましょう。
回数制限を付ける
例えば、
5回以内に正解しなければゲームオーバー
というルールにすることもできます。
ここでは、試行回数を変数で管理する必要があります。
attempts = 0
のような変数を使って、数字を入力するたびに回数を増やしていきます。
これは変数と条件分岐、繰り返しを組み合わせる練習になります。
難易度を作る
例えば、
EASY
1~10
NORMAL
1~50
HARD
1~100
のように、難易度を選択できるようにすることもできます。
こうすると、単純な数当てゲームから少しずつ本格的なゲームらしくなっていきます。
Python初心者は「小さなゲーム」から作ってみよう
Pythonを勉強するとき、
「全部の文法を覚えてからプログラムを作ろう」
と考える必要はありません。
むしろ、
少し覚える
↓
簡単なプログラムを作る
↓
エラーが出る
↓
調べる
↓
修正する
↓
また作る
という流れのほうが、実際のプログラミングに近い学習になります。
今回の数当てゲームも、最初からすべて理解する必要はありません。
まずはコードを動かして、
- 数字の範囲を変えてみる
- 入力エラーを確認してみる
- 回数制限を付けてみる
- 難易度を作ってみる
など、自分で改造してみましょう。
エラーが出ても、それは失敗ではありません。
エラーの原因を調べて、コードを修正すること自体がプログラミングの勉強になります。
Pythonでゲームを作ると何が学べる?
今回のゲームでは、Pythonの基本的な仕組みを実際に使いました。
| 学んだこと | ゲームでの役割 |
|---|---|
| 変数 | 答えや入力した数字を保存 |
random | 答えをランダムに決める |
input() | プレイヤーから入力を受け取る |
int() | 入力を整数に変換 |
if | 正解・不正解を判定 |
elif | 数字が小さいか判定 |
else | 数字が大きい場合の処理 |
while | 何度も挑戦できるようにする |
break | 正解したらゲームを終了 |
continue | 範囲外の入力をやり直す |
try / except | 入力によるエラーに対処する |
まとめ
今回はPythonを使って、簡単な数当てゲームを作りました。
ゲーム自体はシンプルですが、
- 変数
- 入力
- 条件分岐
- 比較
- 繰り返し
breakcontinue- ランダム処理
- エラー処理
など、Python初心者が覚えておきたい基本的な仕組みをたくさん使っています。
特に重要なのが、ユーザーが必ず正しい入力をするとは限らないということです。
数字を入力するところで文字が入力された場合には、
try:
...
except ValueError:
...
を使うことで、エラーを処理してゲームを続けることができます。
プログラミングは、文法を覚えることだけが目的ではありません。
覚えた知識を使って、
「自分で何かを作ってみる」
ことが重要です。
最初は数当てゲームのような小さなプログラムでも構いません。
そこから、
数当てゲーム
↓
簡単なツール
↓
自動化プログラム
↓
画像処理
↓
AIを使ったプログラム
というように、少しずつ作れるものを増やしていくことができます。
Pythonを勉強しているなら、まずは今回の数当てゲームを実際に動かして、自分なりにルールを改造してみるところから始めてみましょう。

