Python

【Python】ジャンケンを実装してみよう【サンプルプログラム】

この記事では、Pythonの練習としてジャンケンを実装してみます。

ジャンケンは、if文while文乱数などを組み合わせることで実装できます。また、マジックナンバーを使わないように列挙型を使って定義することもできます。

それでは、ジャンケンを作っていきましょう!

ジャンケンの実装

まずは、ジャンケンについて少し整理してどのように実装するか考えます。

じゃんけんには最低でも以下のような処理が必要となります。

  1. 手を決める(相手のも)
  2. 勝敗判定

それでは、コードを書いていきましょう!

手を決める

ユーザーの手を決めるには、input()関数を使って整数を受け取ります。

hand = int(input('グー(0), チョキ(1), パー(2): '))

しかし、この方法では整数に変換できない場合や0 ~ 2以外の値が入力された際にエラーになってしまう。なので、あらかじめ手をコレクションや列挙型で用意しておいて、例外処理と無限ループで必ず範囲内の値が入力されるようにしましょう。

# 手のタプル
hands = ('グー', 'チョキ', 'パー')

# 自分の手を決める
# 無限ループ
while True:
    # 例外処理
    try:
        # 手を受け取る
        hand = hands[int(input('グー(0), チョキ(1), パー(2): '))]
        # 上で正常に手を受け取ると break が処理されて無限ループを抜ける
        break
    # try文 でエラーが発生した場合の処理
    except:
        print('0 ~ 2 の整数を入力してください!')

相手の手を決める

相手の手は乱数を使ってランダムに決めます。乱数はrandomモジュールから使えます。

任意の範囲の整数を取得する場合は、randint()を使います。第一引数から第二引数までの値をランダムに1つ取得します。

import random

# 相手の手を決める
e_hand = hands[random.randint(0, 2)]

選択した手の出力

自分と相手の手を出力して状況を分かりやすくしておきます。

# 手の出力
print(f'あなた: {p_hand}, 相手: {e_hand}')

勝敗判定

勝敗判定は自分の手が'グー'の時に相手の手が'パー'だったらというようなことをif文を使って判定していきます。

条件が多くなってしまうので長くなってしまいますがやっていることは単純です。

# 勝敗判定
# あいこの場合
if p_hand == e_hand:
    print('あいこです')
# それ以外
else:
    if p_hand == 'グー':
        if e_hand == 'チョキ':
            print('あなたの勝ちです')
        else:
            print('あなたの負けです')
    elif p_hand == 'チョキ':
        if e_hand == 'グー':
            print('あなたの負けです')
        else:
            print('あなたの勝ちです')
    else:
        if e_hand == 'グー':
            print('あなたの勝ちです')
        else:
            print('あなたの負けです')

遊んでみる

では、コードを実行してみましょう!

import random

# 手のタプル
hands = ('グー', 'チョキ', 'パー')

# 自分の手を決める
# 無限ループ
while True:
    # 例外処理
    try:
        # 手を受け取る
        p_hand = hands[int(input('グー(0), チョキ(1), パー(2): '))]
        # 上で正常に手を受け取ると break が処理されて無限ループを抜ける
        break
    # try文 でエラーが発生した場合の処理
    except:
        print('0 ~ 2 の整数を入力してください!')
    

# 相手の手を決める
e_hand = hands[random.randint(0, 2)]

# 手の出力
print(f'あなた: {p_hand}, 相手: {e_hand}')

# 勝敗判定
# あいこの場合
if p_hand == e_hand:
    print('あいこです')
# それ以外
else:
    if p_hand == 'グー':
        if e_hand == 'チョキ':
            print('あなたの勝ちです')
        else:
            print('あなたの負けです')
    elif p_hand == 'チョキ':
        if e_hand == 'グー':
            print('あなたの負けです')
        else:
            print('あなたの勝ちです')
    else:
        if e_hand == 'グー':
            print('あなたの勝ちです')
        else:
            print('あなたの負けです')

実行結果

グー(0), チョキ(1), パー(2): 1
あなた: チョキ, 相手: パー
あなたの勝ちです

簡単なジャンケンを実装して遊ぶことができました。

あいこ

先ほどの実装ではあいこだった場合もジャンケンが終わってしまいます。なので、あいこだった場合はジャンケンを継続させる処理を実装してみましょう!

あいこを実装するには、全体を無限ループで覆ってあいこだった場合にcontinue、それ以外の場合にbreakを呼び出すようにします。

import random

# 手のタプル
hands = ('グー', 'チョキ', 'パー')

# あいこのための無限ループ
while True:                             # 追加

    # 自分の手を決める
    # 無限ループ
    while True:
        # 例外処理
        try:
            # 手を受け取る
            p_hand = hands[int(input('グー(0), チョキ(1), パー(2): '))]
            # 上で正常に手を受け取ると break が処理されて無限ループを抜ける
            break
        # try文 でエラーが発生した場合の処理
        except:
            print('0 ~ 2 の整数を入力してください!')
        

    # 相手の手を決める
    e_hand = hands[random.randint(0, 2)]

    # 掛け声
    print(f'あなた: {p_hand}, 相手: {e_hand}')

    # 勝敗判定
    # あいこの場合
    if p_hand == e_hand:
        print('あいこで..')              # 変更 
        continue                       # 追加
    # それ以外
    else:
        if p_hand == 'グー':
            if e_hand == 'チョキ':
                print('あなたの勝ちです')
            else:
                print('あなたの負けです')
        elif p_hand == 'チョキ':
            if e_hand == 'グー':
                print('あなたの負けです')
            else:
                print('あなたの勝ちです')
        else:
            if e_hand == 'グー':
                print('あなたの勝ちです')
            else:
                print('あなたの負けです')
    break                               # 追加

実行結果

グー(0), チョキ(1), パー(2): 2
あなた: パー, 相手: パー
あいこで..
グー(0), チョキ(1), パー(2): 1
あなた: チョキ, 相手: パー
あなたの勝ちです

これであいこの場合はジャンケンが継続して必ず勝敗がつくようになりました。

まとめ

この記事では、Pythonでじゃんけんを実装してみました!

今回実装したジャンケンはとてもシンプルなものです。色々機能を追加して遊んでみてください。

例えば、

  • プレイヤーの名前を受け取って名前で表示する
  • 連戦できるようにする
  • 勝敗数を記録する

などいろいろ追加できます。

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ