【Python】レッスン2-☆3:簡単なじゃんけんゲームを作ろう

記事内に商品プロモーションを含む場合があります

この記事の練習問題で使用する知識:
レッスン1の知識比較演算子と論理演算子条件分岐(if-else文)条件分岐(elif文)条件分岐(match文)繰り返し処理(for文)繰り返し処理(while文)繰り返しの制御エラーメッセージ例外処理の基礎

Pythonのゲームコード一覧はこちら

<<前の問題 問題集Top 次の問題>>

練習問題2-☆3:簡単なじゃんけんゲーム

簡単なじゃんけんゲームを作成しましょう。

プレイヤーが「グー」「チョキ」「パー」のいずれかを選び、コンピュータがランダムに選んだ手と勝負します。勝敗を判定し、その結果を表示するプログラムです。

この問題の要件

以下の要件に従ってコードを完成させてください。

  • random モジュールをインポートして、コンピュータの手をランダムに決定すること。
  • プレイヤーに「グー: 0、チョキ: 1、パー: 2」の中から数字を選んで入力してもらうこと。
  • 入力された数字をもとにプレイヤーの手を表示すること。
  • コンピュータの手もランダムに決定し、表示すること。
  • プレイヤーとコンピュータの手を比較し、勝敗を判定すること(引き分けの場合はその旨を表示する)。
  • 勝敗結果を画面に表示すること。

ただし、以下のような実行結果となるコードを書くこと。

*****↓↓正解コードの実行結果の例↓↓*****

じゃんけんゲームを始めます!
じゃんけんの手を入力してください(グー: 0, チョキ: 1, パー: 2): 0
コンピューターの手: チョキ
あなたの勝ちです!

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)

1:Randomモジュールのインポート
2:「じゃんけんゲームを始めます!」と出力
3:「じゃんけんの手を入力してください(グー: 0, チョキ: 1, パー: 2)」と出力
4:ユーザーに手を入力させ、int型に変換して変数player_choiceに代入
5:randomモジュールで生成した値を変数computer_choiceに代入
6:if文にてplayer_choiceの値が0であるか判定
  □ 真の場合、変数player_handに「グー」を代入
7:elif文にてplayer_choiceの値が1であるか判定
  □ 真の場合、変数player_handに「チョキ」を代入
8:else文
  □ 変数player_handに「パー」を代入
9:if文にてcomputer_choiceの値が0であるか判定
  □ 真の場合、変数computer_handに「グー」を代入
10:elif文にてcomputer_choiceの値が1であるか判定
  □ 真の場合、変数computer_handに「チョキ」を代入
11:else文
  □ 変数computer_handに「パー」を代入
12:コンピュータの手を表示
13:if文にてplayer_choiceとcomputer_choiceが等しいか判定
  □ 真の場合、「引き分けです!」と出力
14:elif文にて勝敗の条件を判定
  □ player_choiceが0かつcomputer_choiceが1、またはplayer_choiceが1かつcomputer_choiceが2、またはplayer_choiceが2かつcomputer_choiceが0である場合、「あなたの勝ちです!」と出力
15:else文
  □ 「あなたの負けです!」と出力

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

import random

# じゃんけんの手を表示
print("じゃんけんゲームを始めます!")
print("じゃんけんの手を入力してください(グー: 0, チョキ: 1, パー: 2)")

# プレイヤーの手を入力
"""【穴埋め問題1】
ここにユーザーからの入力を受け取り、その値をint型に変換して変数player_choiceに格納するコードを書いてください。
"""

# コンピュータの手をランダムに決定
"""【穴埋め問題2】
ここにコンピュータの手をランダムに決定し、変数computer_choiceに格納するコードを書いてください。
"""

# じゃんけんの手の名前
"""【穴埋め問題3】
ここにプレイヤーの選択によって変数player_handに「グー」「チョキ」「パー」を代入するif-elif-else文を書いてください。
"""

"""【穴埋め問題4】
ここにコンピュータの選択によって変数computer_handに「グー」「チョキ」「パー」を代入するif-elif-else文を書いてください。
"""

# コンピュータの手を表示
print("コンピューターの手:", computer_hand)

# 勝敗の判定
"""【穴埋め問題5】
ここに勝敗を判定するif-elif-else文を書いてください。引き分けの場合は「引き分けです!」、プレイヤーが勝った場合は「あなたの勝ちです!」、プレイヤーが負けた場合は「あなたの負けです!」と出力するコードを書いてください。
"""

 

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

解答例と解説

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

import random

# じゃんけんの手を表示
print("じゃんけんゲームを始めます!")
print("じゃんけんの手を入力してください(グー: 0, チョキ: 1, パー: 2)")

# プレイヤーの手を入力
player_choice = int(input("あなたの選択: "))

# コンピュータの手をランダムに決定
computer_choice = random.randint(0, 2)

# じゃんけんの手の名前
if player_choice == 0:
    player_hand = "グー"
elif player_choice == 1:
    player_hand = "チョキ"
else:
    player_hand = "パー"

if computer_choice == 0:
    computer_hand = "グー"
elif computer_choice == 1:
    computer_hand = "チョキ"
else:
    computer_hand = "パー"

# コンピュータの手を表示
print("コンピューターの手:", computer_hand)

# 勝敗の判定
if player_choice == computer_choice:
    print("引き分けです!")
elif (player_choice == 0 and computer_choice == 1) or \
     (player_choice == 1 and computer_choice == 2) or \
     (player_choice == 2 and computer_choice == 0):
    print("あなたの勝ちです!")
else:
    print("あなたの負けです!")

正解コードの解説

今回のPythonコードはプレイヤーとコンピュータがじゃんけんを行うシンプルなゲームです。

それではコードの各ブロックを詳しく解説していきます。

ライブラリのインポート

import random

ここではrandom モジュールをインポートしています。

このモジュールはコンピュータの手をランダムに選ぶために使います。

ゲームの開始メッセージの表示

print("じゃんけんゲームを始めます!")
print("じゃんけんの手を入力してください(グー: 0, チョキ: 1, パー: 2)")

この部分ではゲームの開始メッセージを表示しています。

またプレイヤーが入力する選択肢として、「グー: 0」「チョキ: 1」「パー: 2」を伝えています。

プレイヤーの入力を取得

player_choice = int(input("あなたの選択: "))

input 関数を使ってプレイヤーからの入力を取得します。

取得した値は文字列なのでint() で整数に変換しています。

コンピュータの手をランダムに決定

computer_choice = random.randint(0, 2)

random.randint(0, 2) を使って、コンピュータが「0(グー)」「1(チョキ)」「2(パー)」のいずれかをランダムに選びます。

プレイヤーの選んだ手の名前を設定

if player_choice == 0:
    player_hand = "グー"
elif player_choice == 1:
    player_hand = "チョキ"
else:
    player_hand = "パー"

プレイヤーが選んだ手(0, 1, 2)に応じて、player_hand に「グー」「チョキ」「パー」の文字列を代入しています。

このif-elif-else文で条件分岐を行い、対応する手の名前を決定します。

コンピュータの選んだ手の名前を設定

if computer_choice == 0:
    computer_hand = "グー"
elif computer_choice == 1:
    computer_hand = "チョキ"
else:
    computer_hand = "パー"

コンピュータが選んだ手(0, 1, 2)に応じてcomputer_hand に「グー」「チョキ」「パー」の文字列を代入しています。

この部分もif-elif-else文を使っています。

コンピュータの手を表示

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

ここではコンピュータが選んだ手を表示しています。

勝敗の判定

if player_choice == computer_choice:
    print("引き分けです!")
elif (player_choice == 0 and computer_choice == 1) or \
     (player_choice == 1 and computer_choice == 2) or \
     (player_choice == 2 and computer_choice == 0):
    print("あなたの勝ちです!")
else:
    print("あなたの負けです!")

この部分ではif-elif-else文を使ってプレイヤーの手とコンピュータの手を比較し、勝敗を判定しています。

  • プレイヤーとコンピュータの手が同じなら「引き分けです!」を表示します。
  • プレイヤーが勝つパターン(グー vs チョキ、チョキ vs パー、パー vs グー)なら「あなたの勝ちです!」を表示します。
  • それ以外のケースでは「あなたの負けです!」と表示します。

まとめ

今回のコードでは条件分岐(if-elif-else文)やユーザーからの入力、コンピュータのランダムな選択など、Pythonの基本的な機能を学びました。

このシンプルなじゃんけんゲームを通じて、ゲームロジックの実装方法も体験できたと思います。

Pythonのゲームコード一覧はこちら

<<前の問題 問題集Top 次の問題>>

この記事への質問・コメント

この記事を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Python記事トップへ戻る
    トップページへ戻る