Pythonでプログラムを作ってみよう!初心者向けじゃんけんゲームの作り方

プログラミング基礎

プログラミングの基本を学んだら、次は自分でプログラムを作ってみましょう。

「変数やif文は勉強したけれど、何を作ればよいか分からない」「Pythonで簡単なゲームを作ってみたい」と思っている人も多いのではないでしょうか。

今回は、Pythonを使ってコンピュータと対戦できるじゃんけんゲームを作成します。

じゃんけんゲームには、これまでに学習した変数、条件分岐、繰り返し処理、リスト、関数といった基本的な仕組みが使われています。

この記事では、高校の情報Ⅰを学習する人やPython初心者に向けて、実際にプログラムを書きながら、ゲームを完成させる方法をわかりやすく解説します。

1. 今回作成するプログラム

今回作成するのは、次のようなじゃんけんゲームです。

じゃんけんゲーム

グー・チョキ・パーを選んで遊んでみよう!

あなた
❔
手を選ぼう
コンピュータ
❔
待機中
あなたの手を選んでください
勝ち:0 負け:0 あいこ:0

ゲームの流れは次のとおりです。

  1. プレイヤーがグー・チョキ・パーのいずれかを選ぶ。
  2. コンピュータがランダムに手を選ぶ。
  3. 2人の手を比較して勝敗を判定する。
  4. 結果を表示し、続けて遊べるようにする。

最初は簡単なプログラムから作成し、少しずつ機能を追加していきます。

2. プログラムを作る前に必要なもの

今回使用するプログラミング言語はPythonです。

Pythonがパソコンにインストールされていれば、特別な外部ライブラリを追加する必要はありません。

WindowsやmacOSでPythonを使える状態にして、任意のフォルダーに janken.py というファイルを作成しましょう。

Pythonのインストールがまだの場合は、

Python公式サイトから入手できます。

コードの入力には、Visual Studio Codeなどのエディターを使うと便利です。

3.最初のプログラムを書いてみよう

まずは、ゲームの開始メッセージを表示する簡単なプログラムを作成します。

janken.py に次のコードを入力してください。

print("じゃんけんゲームへようこそ!")print("グー・チョキ・パーから選んでください")

実行結果:

じゃんけんゲームへようこそ!
グー・チョキ・パーから選んでください

print() は、文字列や数値を画面に表示するための関数です。

この段階では、決められた文章を表示するだけですが、ここからプレイヤーの入力を受け取れるようにしていきます。

4. input()でプレイヤーの手を受け取る

プレイヤーが自分の手を入力できるようにするには、input() を使います。

player = input("グー・チョキ・パーを入力してください:")

print("あなたの手は", player, "です")

例えば「グー」と入力すると、次のようになります。

グー・チョキ・パーを入力してください:グー
あなたの手は グー です

input() で受け取った文字列は、変数 player に保存されます。

このように、変数を使うことで、入力された値を後から利用できます。

5. リストを使ってじゃんけんの手を管理する

じゃんけんには、グー・チョキ・パーの3つの手があります。

これらをリストにまとめて管理しましょう。

hands = ["グー", "チョキ", "パー"]

リストを使えば、複数のデータを1つの変数にまとめて保存できます。

例えば、最初の手を表示するには、次のように書きます。

print(hands[0])

実行結果:

グー

Pythonのリストでは、最初の要素のインデックスは0です。

したがって、hands[0] はグー、hands[1] はチョキ、hands[2] はパーになります。

6. randomを使ってコンピュータの手を決める

コンピュータの手は、ランダムに決める必要があります。

Pythonでは、標準ライブラリの random モジュールを利用できます。

import random

hands = ["グー", "チョキ", "パー"]

computer = random.choice(hands)

print("コンピュータの手:", computer)

random.choice() は、リストなどからランダムに1つの要素を選択する関数です。

例えば、次のように表示されます。

コンピュータの手:チョキ

実行するたびに、選ばれる手が変わる可能性があります。

このように、プログラムにランダムな要素を追加すると、毎回異なる結果を楽しめるゲームを作れます。

7. if文でじゃんけんの勝敗を判定する

次に、プレイヤーとコンピュータの手を比較し、勝敗を判定する処理を追加しましょう。

じゃんけんには、次のルールがあります。

あなたの手コンピュータの手結果
グーチョキ勝ち
チョキパー勝ち
パーグー勝ち
同じ手同じ手あいこ

これをPythonの条件分岐で表現します。

player = "グー"
computer = "チョキ"

if player == computer:    
    print("あいこです")
elif (    
    (player == "グー" and computer == "チョキ")    
     or (player == "チョキ" and computer == "パー")    
     or (player == "パー" and computer == "グー")):    
     print("あなたの勝ちです")
else:    
     print("コンピュータの勝ちです")

実行結果:

あなたの勝ちです

if は、条件が成立するかどうかを調べるために使います。elif は別の条件を調べ、else はそれまでの条件が成立しなかった場合に実行されます。

ここでは、比較演算子の == と、論理演算子の and、or を組み合わせています。

8. 間違った入力への対応

ゲームでは、プレイヤーが「グー」「チョキ」「パー」以外の文字を入力する可能性があります。

そこで、入力された文字列が正しいかどうかを確認しましょう。

hands = ["グー", "チョキ", "パー"]

player = input("手を入力してください:")
if player not in hands:    
   print("グー・チョキ・パーから選んでください")
else:    
   print("あなたの手:", player)

not in は、指定した値がリストに含まれていないかどうかを調べるときに使用します。

このように入力内容を確認することで、想定外の値によってゲームが正しく動作しなくなることを防げます。

9. while文で何度も遊べるようにする

ここまでのプログラムでは、1回じゃんけんをすると処理が終了します。

何度も遊べるゲームにするために、while 文を使って処理を繰り返してみましょう。

while True:    
   player = input("グー・チョキ・パーを入力(終了はq):") 
   
   if player == "q":        
     print("ゲームを終了します")        
     break
    
   print("あなたの手:", player)

while True は、終了条件が指定されるまで処理を繰り返すための書き方です。

ここでは、プレイヤーが q を入力すると break が実行され、繰り返し処理が終了します。

実際のゲームでは、この中にコンピュータの手を選ぶ処理と勝敗を判定する処理を追加します。

10. 関数を使ってプログラムを整理する

これまで学んだ関数を使えば、じゃんけんの勝敗判定を独立した処理としてまとめられます。

def judge(player, computer):    
  if player == computer:        
     return "あいこ"    

  if (        
    (player == "グー" and computer == "チョキ")        
    or (player == "チョキ" and computer == "パー")        
    or (player == "パー" and computer == "グー")    
   ):        
    return "勝ち"   
   return "負け"

この関数には、プレイヤーとコンピュータの手を引数として渡します。

result = judge("グー", "チョキ")

print(result)

実行結果:

勝ち

関数を作成すると、同じ勝敗判定のコードを何度も書く必要がなくなります。

また、勝敗の判定方法を変更したい場合も、judge() 関数だけを修正すれば済みます。

11. 完成版:Pythonじゃんけんゲーム

ここまで学んだ内容を組み合わせて、じゃんけんゲームを完成させましょう。

次のコードを janken.py にコピーすれば、コマンドラインで遊べるゲームになります。

じゃんけんゲーム


import random

HANDS = ["グー", "チョキ", "パー"]


def judge(player, computer):
    """じゃんけんの勝敗を判定する"""
    if player == computer:
        return "あいこ"

    if (
        (player == "グー" and computer == "チョキ")
        or (player == "チョキ" and computer == "パー")
        or (player == "パー" and computer == "グー")
    ):
        return "勝ち"

    return "負け"


def main():
    """じゃんけんゲームを実行する"""
    win = 0
    lose = 0
    draw = 0

    print("じゃんけんゲームへようこそ!")

    while True:
        player = input(
            "グー・チョキ・パーを入力(終了はq):"
        ).strip()

        if player.lower() == "q":
            break

        if player not in HANDS:
            print("正しい手を入力してください")
            continue

        computer = random.choice(HANDS)

        print("あなた:", player)
        print("コンピュータ:", computer)

        result = judge(player, computer)

        if result == "勝ち":
            win += 1
            print("あなたの勝ち!")
        elif result == "負け":
            lose += 1
            print("コンピュータの勝ち!")
        else:
            draw += 1
            print("あいこ!")

        print(
            f"現在の成績:{win}勝 {lose}敗 {draw}分"
        )
        print("--------------------")

    print("ゲームを終了します")
    print(f"最終成績:{win}勝 {lose}敗 {draw}分")


if __name__ == "__main__":
    main()
  

完成したプログラムの実行例

コンピュータがチョキを選んだ場合の実行例です。

じゃんけんゲームへようこそ!

グー・チョキ・パーを入力(終了はq):グー
あなた: グー
コンピュータ: チョキ
あなたの勝ち!
現在の成績:1勝 0敗 0分
--------------------

グー・チョキ・パーを入力(終了はq):q
ゲームを終了します
最終成績:1勝 0敗 0分

これで、ランダムに手を選ぶコンピュータと何度も対戦でき、勝敗の記録も確認できるゲームが完成しました。

12. プログラムが完成したら動作確認をしよう

プログラムを書き終えたら、正しく動作するか確認します。

特に、勝敗判定の関数が正しい結果を返すかどうかは重要です。

例えば、次のように確認できます。

print(judge("グー", "チョキ"))
print(judge("チョキ", "グー"))
print(judge("パー", "パー"))

期待する実行結果:

勝ち
負け
あいこ

また、想定外の入力に対しても動作を確認しましょう。入力欄に「りんご」などを入力した場合、エラーメッセージを表示して再入力を求められるか確認します。

プログラムが期待した結果にならない場合は、原因を調べて修正します。この作業を「デバッグ」といいます。

13. 練習問題:じゃんけんゲームを改造しよう

完成したプログラムを少しずつ変更して、理解を深めてみましょう。

問題1:3回勝ったら終了

プレイヤーが3回勝ったら、自動的にゲームが 終了するように変更してください。

ヒント: 勝った回数を保存している変数winを使います。 3以上になったらbreakで終了しましょう。
解答例を見る

勝敗判定の「勝ち」の処理を変更します。

if result == "勝ち":
    win += 1
    print("あなたの勝ち!")

    if win >= 3:
        print("3勝達成!")
        break

winが3以上になるとbreakが実行され、 while文の繰り返し処理が終了します。

問題2:勝率を計算する

ゲーム終了時に、あいこを除いた対戦の 勝率を表示するように変更してください。

ヒント: 勝率 = 勝った回数 ÷ (勝った回数 + 負けた回数)× 100
解答例を見る

main関数の最後に、次のコードを追加します。

games = win + lose

if games > 0:
    rate = win / games * 100
    print(f"勝率:{rate:.1f}%")
else:
    print("勝敗のついた対戦はありません")

勝率を小数点以下1桁まで表示します。 0で割るエラーを防ぐため、 gamesが0より大きい場合だけ計算します。

問題3:数字でじゃんけんの手を選ぶ

グーを1、チョキを2、パーを3として、 数字で入力できるように変更してください。

ヒント: 辞書を使って、入力された数字と じゃんけんの手を対応させます。
解答例を見る

プレイヤーの入力部分を次のように変更します。

hand_map = {
    "1": "グー",
    "2": "チョキ",
    "3": "パー"
}

while True:
    choice = input(
        "1:グー 2:チョキ 3:パー(終了はq):"
    ).strip()

    if choice.lower() == "q":
        break

    if choice not in hand_map:
        print("1〜3を入力してください")
        continue

    player = hand_map[choice]

    print("あなたの手:", player)

    # ここにコンピュータの手を選ぶ処理や
    # 勝敗を判定する処理を追加します。

辞書のキーに数字の文字列を使用することで、 入力された数字をじゃんけんの手に変換できます。

14. まとめ

今回は、Pythonでじゃんけんゲームを作成しました。

これまで個別に学んできた変数、条件分岐、繰り返し処理、リスト、関数を組み合わせることで、実際に遊べるプログラムを作ることができました。

プログラミングを上達させるためには、完成コードをコピーするだけでなく、自分でコードを変更し、その結果を確認することが大切です。

まずは勝率の計算や3勝したら終了する機能を追加するなど、今回のじゃんけんゲームを少しずつ改造してみましょう。

現役のフリーランスWebエンジニアです。仕事ではWebサイトや業務アプリをつくっています。
学生のころの自分に「これがあれば分かったのに」と思う教材を目指して、LIST LEARNを書いています。じゃんけんゲームなどの小さな作品を一緒につくりながら、情報Ⅰ・Pythonの基礎を身につけましょう。
取得資格: 応用情報技術者試験/第二種情報処理技術者

木下 | 現役Webエンジニアをフォローする
プログラミング基礎情報I