【再掲】リクエスト:じゃんけんゲームの作成
コンピュータとじゃんけんをするプログラムを作成してください。
レベル1:コンピュータとのタイマン
コンピュータはひとりとして、プレイヤーの手を入力すると、コンピュータとのじゃんけんの結果が返ってくるようにしてください。
(想定外の入力はないものとします)
実装例
import numpy as np
# 定数定義
N_HAND = 3 # じゃんけんの手の種類
ROCK = 0
SCISSORS = 1
PAPER = 2
class Cpu(object):
""" CPUを作成するクラス
Attributes:
hand (int): じゃんけんの手(グー(0)、チョキ(1)、パー(2))
"""
def __init__(self):
self.hand = np.random.randint(N_HAND)
def get_hand(self):
"""
じゃんけんの手を決める。
Args:
None
Returns:
None
"""
self.hand = np.random.randint(N_HAND)
def judge_janken(my_hand, cpu_hand):
"""
じゃんけんの勝敗結果を返す
Args:
my_hand (int): プレイヤーの手
cpu_hand (int): CPUの手
Returns:
result (int): 0:勝ち, 1:負け, 2:引き分け
"""
if my_hand == cpu_hand:
result = 2
else:
if my_hand == ROCK:
if cpu_hand == SCISSORS:
result = 0
elif cpu_hand == PAPER:
result = 1
if my_hand == SCISSORS:
if cpu_hand == PAPER:
result = 0
elif cpu_hand == ROCK:
result = 1
if my_hand == PAPER:
if cpu_hand == ROCK:
result = 0
elif cpu_hand == SCISSORS:
result = 1
return result
def show_result(result):
""" 勝敗結果を表示する
Args:
result (int): 0:勝ち, 1:負け, 2:引き分け
"""
if result == 0:
print("あなたの勝ちです")
elif result == 1:
print("あなたの負けです")
elif result == 2:
print("引き分けです")
def game_start():
"""
じゃんけんを開始するメイン関数
"""
print("じゃんけんをします")
n_player = 2
# cpuインスタンスの作成
cpus = Cpu()
print("あなたの手は? (0:グー、1:チョキ、2:パー)")
my_hand = int(input())
result = judge_janken(my_hand, cpus.hand)
print(f"CPUの手は{cpus.hand}です")
show_result(result)
if __name__ == "__main__":
game_start()
今回のポイント
- 入力インタフェース
- 80行目で標準入力を受け付けて数値に変換しています。
- CPUクラスの作成
- 9〜25行目のコードでCPUクラスを作成しています。
これはCPUをオブジェクトにしておくと考えやすかったのと、CPUが増えた場合の処理が簡単になると見込んだためです。
- 9〜25行目のコードでCPUクラスを作成しています。
- 乱数の使用
- 15行目、25行目でCPUの手は指定した整数範囲をランダムに返すrandom.randint()関数を使用しています。
- DocString
- 各関数やクラスにはGoogle styleのDocStringを記載しています。
- 参考:Example Google Style Python Docstrings
終わりに
実装例を紹介しましたが、例と書いているようにあくまで一例です、
今回のコードはGitHubにも上げていきますのでみなさんのコードもぜひ共有してください。
コメント