Pythonでじゃんけん
人間のプレイヤーとコンピュータが じゃんけん をして勝敗を表示するプログラムを作ってみましょう。プレイヤーの出す手は「グー, チョキ, パー」の 3 通りです。それぞれの手に対してコンピュータの出す手も「グー, チョキ, パー」の 3 通りなので、その組み合わせは全部で 3 × 3 = 9 通りあります。とはいえ、9 通りの分枝を記述するのは大変なので少し工夫します。そのために、じゃんけんの手のそれぞれに、
グー: 0 点, チョキ: 1 点, パー: 2 点
という数字を割り当てて、次のような判定スコアを定義します。
じゃんけん判定スコア = [プレイヤーの手 - コンピュータの手 + 3] Mod 3
ここで、a Mod b は a を b で割ったときの余りを得る演算を意味します。Python では % が Mod に相当する演算子です。たとえば、プレイヤーがパー、コンピュータがグーを出したとすると、判定スコアは
(2 - 1 + 3) Mod 3 = 1
となります。同じように、すべての手の組み合わせについて判定スコアを計算すると、下の表のようになります。
プレイヤーの手 | コンピュータの手 | スコア | 勝敗 |
---|---|---|---|
グー | グー | 0 | 引き分け |
グー | チョキ | 2 | 勝ち |
グー | パー | 1 | 負け |
チョキ | グー | 1 | 負け |
チョキ | チョキ | 0 | 引き分け |
チョキ | パー | 2 | 勝ち |
パー | グー | 2 | 勝ち |
パー | チョキ | 1 | 負け |
パー | パー | 0 | 引き分け |
表を見ると、判定スコアが 0 のときは引き分け、1 のときはプレイヤーの負け、2 のときはプレイヤーの勝ちとなっていることがわかります。判定スコアを使うと、条件分枝 は 3 通りで済みます。Python での実装は次のようになります。
# じゃんけん
# じゃんけん判定関数
def judge(x, y):
score = (x - y + 3) % 3
if score == 0:
j = "引き分けです"
elif score == 1:
j = "あなたの負けです"
else:
j = "あなたの勝ちです"
print(j)
# じゃんけんの手のリスト
hand = ["グー", "チョキ", "パー"]
# プレイヤーの手を入力
x = input("手を選んでください\n0:グー, 1:チョキ, 2:パー\n\n")
x = int(x)
# コンピュータの手をランダムに決定
y = random.randint(0, 2)
# 双方の出した手を表示
print("\nあなたの手:{}".format(hand[x]))
print("コンピュータの手:{}\n".format(hand[y]))
# 勝敗を表示
judge(x, y)
手を選んでください 0:グー, 1:チョキ, 2:パー 1 あなたの手:チョキ コンピュータの手:パー あなたの勝ちです
コードを実行すると手の入力が促されるので、数値で選択してください。コンピュータの手はランダムに選ばれて、お互いの出した手と勝敗が表示されます。
【技術英語の豆知識】英語で「じゃんけんぽん!」
じゃんけん を英語で rock-paper-scissors といいます。
rock は石、paper は紙、scissors はハサミです。
地域によって、rock の代わりに stone (石) を使うこともあるようです。
「じゃんけんぽん」の掛け声も “Rock, Paper, Scissors” です。
う~ん。「じゃんけんぽん」のリズムに慣れた日本人としては、ちょっと長いなあと思ってしまいますね。世界中に “Janken, Pon!” を流行らせてみてはどうでしょうか。これから海外に行く予定の方、どうかお願いします (←人任せかよ)。とはいえ、ゲームの内容を言い表すなら英語のほうが自然ですよね。どうして日本人は「じゃんけん」と呼ぶのでしょうか。知っている方がいたらぜひ教えてください。ちなみに、関西ではじゃんけんをインジャンといいますが、インジャンの語源もよくわかりません。
ChatGPTに「じゃんけん」について質問しました
[Q] じゃんけんとは、どんなゲームですか?
[A] じゃんけんとは、2人以上でプレイする手を使った勝負ゲームのことです。通常、グー、チョキ、パーの3つの手から1つを選び、相手と同時に手を出して勝敗を決定します。勝敗の決定方法は、以下の通りです。
・グー vs チョキ → グーの勝ち
・チョキ vs パー → チョキの勝ち
・パー vs グー → パーの勝ち
・同じ手を出した場合は引き分け
じゃんけんは、勝った人が次の手番を持ち、ポイントを集めていくという要素があります。一定のポイントを先に取った人が勝利となります。このゲームは、特に子どもたちの間でよくプレイされる遊びのひとつで、簡単なルールであるため誰でも簡単に楽しめます。また、ビジネスなどでも、決断のための手段としてジャンケンが使われることがあります。