Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python入門】randint()関数でじゃんけんゲームを実装する方法

Pythonを使えば、手軽に面白いミニゲームを開発できます。その代表例のひとつが「じゃんけんゲーム」です。本記事では、標準ライブラリのrandomモジュールが提供するrandint()関数を使って、コンピュータと対戦できるじゃんけんゲームを実装する方法を解説します。

実際のじゃんけんでは、プレイヤーは掛け声に合わせて拳(グー)を振り下ろしながら、グー・チョキ・パーのいずれかの手を出します。このプログラムではその流れを再現し、ユーザーの入力とコンピュータのランダムな選択を比較して勝敗を判定します。

じゃんけんゲームの基本ルール

まず、じゃんけんの勝敗ルールをおさらいしておきましょう。

  • グー vs パー → パーの勝ち
  • グー vs チョキ → グーの勝ち
  • パー vs チョキ → チョキの勝ち
  • 同じ手同士の場合はあいこ(引き分け)

サンプルコード

以下が、じゃんけんゲームの完全なPythonコードです。ターミナルやコマンドプロンプトからそのまま実行できます。

# 必要なrandomモジュールをインポート
import random

print("じゃんけんゲームのルールは以下の通りです:\n"
      "グー vs パー → パーの勝ち\n"
      "グー vs チョキ → グーの勝ち\n"
      "パー vs チョキ → チョキの勝ち\n")

while True:
    print("自分の手を番号で選んでください:\n 1. グー \n 2. パー \n 3. チョキ \n")

    # ユーザーからの入力を受け取る
    ch = int(input("あなたの番です:"))
    while ch > 3 or ch < 1:
        ch = int(input("有効な番号を入力してください:"))

    if ch == 1:
        choice_name = 'グー'
    elif ch == 2:
        choice_name = 'パー'
    else:
        choice_name = 'チョキ'

    # ユーザーの選択を表示
    print("あなたの選択:" + choice_name)

    print("\n次はコンピュータの番です……")
    # randomモジュールのrandint()メソッドにより、
    # コンピュータが1〜3の中からランダムに数値を選ぶ
    comp_choice = random.randint(1, 3)

    # 選ばれた数値に対応する手の名前を設定
    if comp_choice == 1:
        comp_choice_name = 'グー'
    elif comp_choice == 2:
        comp_choice_name = 'パー'
    else:
        comp_choice_name = 'チョキ'

    print("コンピュータの選択:" + comp_choice_name)
    print(choice_name + " 対 " + comp_choice_name)

    # 勝敗を判定する条件分岐
    if ((ch == 1 and comp_choice == 2) or
            (ch == 2 and comp_choice == 1)):
        print("パーの勝ち => ", end="")
        final_result = "パー"
    elif ((ch == 1 and comp_choice == 3) or
          (ch == 3 and comp_choice == 1)):
        print("グーの勝ち =>", end="")
        final_result = "グー"
    else:
        print("チョキの勝ち =>", end="")
        final_result = "チョキ"

    # ユーザーとコンピュータ、どちらが勝ったかを表示
    if final_result == choice_name:
        print("<== あなたの勝ち! ==>")
    else:
        print("<== コンピュータの勝ち ==>")

    print("もう一度遊びますか?(Y/N)")
    ans = input()
    # nまたはNが入力された場合はループを抜ける
    if ans == 'n' or ans == 'N':
        break

# whileループを抜けた後に実行される
print("\nお付き合いいただきありがとうございました……")

実行結果の出力例

じゃんけんゲームのルールは以下の通りです:
グー vs パー → パーの勝ち
グー vs チョキ → グーの勝ち
パー vs チョキ → チョキの勝ち

自分の手を番号で選んでください:
 1. グー 
 2. パー 
 3. チョキ 

あなたの番です:1
あなたの選択:グー

次はコンピュータの番です……
コンピュータの選択:パー
グー 対 パー
パーの勝ち => <== コンピュータの勝ち ==>
もう一度遊びますか?(Y/N)
y
自分の手を番号で選んでください:
 1. グー 
 2. パー 
 3. チョキ 

あなたの番です:2
あなたの選択:パー

次はコンピュータの番です……
コンピュータの選択:グー
パー 対 グー
パーの勝ち => <== あなたの勝ち! ==>
もう一度遊びますか?(Y/N)
n

お付き合いいただきありがとうございました……

プログラムのポイント解説

1. random.randint()によるランダム選択

random.randint(1, 3)は、1以上3以下の整数をランダムに返す関数です。これにより、コンピュータは毎回予測不能な手を選びます。人間相手のじゃんけんと同じように、ゲームに偶然性が生まれるのがポイントです。

2. 入力値のバリデーション

ユーザーが1〜3以外の数値を入力した場合、while文によって再度入力を促します。これにより、不正な入力によるプログラムの誤動作を防いでいます。

3. 勝敗判定のロジック

if〜elif〜else文を使い、「グー対パー」「グー対チョキ」「パー対チョキ」の組み合わせごとに勝つ手を判定しています。最終的にfinal_resultがユーザーの手と一致すればプレイヤーの勝利、そうでなければコンピュータの勝利として表示されます。

4. 繰り返し遊べる設計

外側のwhile Trueループにより、ゲームは「N」が入力されるまで何度でも繰り返せます。break文でループを抜けると、感謝のメッセージを表示してプログラムが終了します。

まとめ

このように、Pythonのrandomモジュールと基本的な制御構文(while文・if文)を組み合わせるだけで、インタラクティブなじゃんけんゲームが簡単に作れます。あいこ(引き分け)の処理を追加したり、勝敗スコアを記録したりと、独自に機能を拡張してみると、より深い学習につながるでしょう。

  1. PythonでMin-maxゲーム木を埋めるプログラムの書き方

    二人対戦ゲームの局面を表す二分木を考えてみましょう。すべての内部ノードは 0 で初期化されており、葉ノードの値がその局面の最終スコアを表しています。プレイヤー1は最終スコアを最大化することを目指し、プレイヤー2は最小化することを目指します。プレイヤー1は必ず偶数レベル(ルートをレベル0とする)のノードで手を打ち、プレイヤー2は奇数レベルのノードで手を打つものとします。このとき、両プレイヤーが最適な手を打った場合の結果スコアで、二分木の各ノードを埋めていく必要があります。たとえば、次のような入力が与えられた場合:出力は次のようになります:解決のアプローチこの問題は、Min-max法として知られる

  2. Pythonで作るハングマンゲーム:初心者向けコード解説

    ハングマン(Hangman)は、制限回数内に隠された単語を一文字ずつ推測して当てていく、世界的に有名な古典的な言葉遊びゲームです。レターをひとつずつ推理しながら新しい単語を学べるため、語彙力アップにも最適なゲームとして親しまれてきました。この記事では、Pythonを使ってこの定番ゲーム「ハングマン」を実装する方法を、初心者の方にもわかりやすく解説します。ハングマンゲームのコード全体 0: # ゼロから始まるカウンターを作成 failed = 0 # 秘密の単語の各文字について for char in word: # その文字がプレイヤーの推