【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文)を組み合わせるだけで、インタラクティブなじゃんけんゲームが簡単に作れます。あいこ(引き分け)の処理を追加したり、勝敗スコアを記録したりと、独自に機能を拡張してみると、より深い学習につながるでしょう。
-
PythonでMin-maxゲーム木を埋めるプログラムの書き方
二人対戦ゲームの局面を表す二分木を考えてみましょう。すべての内部ノードは 0 で初期化されており、葉ノードの値がその局面の最終スコアを表しています。プレイヤー1は最終スコアを最大化することを目指し、プレイヤー2は最小化することを目指します。プレイヤー1は必ず偶数レベル(ルートをレベル0とする)のノードで手を打ち、プレイヤー2は奇数レベルのノードで手を打つものとします。このとき、両プレイヤーが最適な手を打った場合の結果スコアで、二分木の各ノードを埋めていく必要があります。たとえば、次のような入力が与えられた場合:出力は次のようになります:解決のアプローチこの問題は、Min-max法として知られる
-
Pythonで作るハングマンゲーム:初心者向けコード解説
ハングマン(Hangman)は、制限回数内に隠された単語を一文字ずつ推測して当てていく、世界的に有名な古典的な言葉遊びゲームです。レターをひとつずつ推理しながら新しい単語を学べるため、語彙力アップにも最適なゲームとして親しまれてきました。この記事では、Pythonを使ってこの定番ゲーム「ハングマン」を実装する方法を、初心者の方にもわかりやすく解説します。ハングマンゲームのコード全体 0: # ゼロから始まるカウンターを作成 failed = 0 # 秘密の単語の各文字について for char in word: # その文字がプレイヤーの推