Python(数取りゲーム)

python

今回は受講生(N氏)から届いたお題を解いていこう。
ループを用いるお題だが、Pythonっぽくさくっとシンプルに解きたい

問題

サイコロを振り出た目×25した数から始まり、最後に0になった方が負け。
ただし、取る数もサイコロの出た目で決める

実行例

実行例1

CPUが勝ちの例。4回目、残り2の状態から4を出したが残り数は0と表示されている点に注目(負の数にはならない)

ゲーム開始
始まりの数(25)
1回目
あなたのとった数(4),残りの数(21)
CPUのとった数(1),残りの数(20)

2回目
あなたのとった数(6),残りの数(14)
CPUのとった数(6),残りの数(8)

3回目
あなたのとった数(2),残りの数(6)
CPUのとった数(4),残りの数(2)

4回目
あなたのとった数(4),残りの数(0)
CPUの勝ち

実行例2

以下はあなたの勝ちの例。ターンとターンの間はenterキーを入力することで進む。

ゲーム開始
始まりの数(50)
1回目
あなたのとった数(5),残りの数(45)
CPUのとった数(5),残りの数(40)
(enterキー)
2回目
あなたのとった数(1),残りの数(39)
CPUのとった数(4),残りの数(35)

3回目
あなたのとった数(1),残りの数(34)
CPUのとった数(3),残りの数(31)

4回目
あなたのとった数(2),残りの数(29)
CPUのとった数(4),残りの数(25)

5回目
あなたのとった数(5),残りの数(20)
CPUのとった数(6),残りの数(14)

6回目
あなたのとった数(6),残りの数(8)
CPUのとった数(5),残りの数(3)

7回目
あなたのとった数(1),残りの数(2)
CPUのとった数(6),残りの数(0)
あなたの勝ち

Let’s challenge

ループの問題であることは明らか。回す回数がわからない今回のような場合はwhileを使う。

解答例

import random
print('ゲーム開始')
goal=random.randint(1,6) * 25
print(f'始まりの数({goal})')
count=0
names=['あなた','CPU']
while True:
    count+=1
    print(f'{count}回目')
    for i in range(len(names)):
        num=random.randint(1,6)
        goal=max(goal-num,0)
        print(f'{names[i]}のとった数({num}),残りの数({goal})')
        if goal == 0:
            print(f'{names[(i+1) % 2]}の勝ち')
            exit()
    input()

ポイント解説

goal=max(goal-num,0)

今回は残りの2の状態から5を出した場合-3ではなく0と表示しなければならない。こういったときはmax(値,0)としてやるとよい。こうすれば値が負数になってしまうことを防げる。

exit()

exit()を埋め込むことで処理を終了させることができる。

input()

通常はユーザー入力を受け取るために使うが、今回のようにエンターキーを押すことによって処理を進行させたい場合にも使える。

python
スポンサーリンク
シェアする
mjpurinをフォローする
ジョイタスネット

コメント

タイトルとURLをコピーしました