見出し画像

#46 サイコロ 36

● 問題

サイコロを振って,36になるべく近づけるゲームです。
判定が間違っているようです。

<ルール>
・先攻はPC,後攻はあなた
・最初に先攻PCの合計が表示される
・あなたは,サイコロを振るか振らないかを選択する
・振らない選択ができるのは,合計が33以上になったとき
・合計が33~36の範囲で大きな値の方が勝ち,同じならドロー
・合計が36を越えたら負け,どちらも越えたらドロー

import random

pc = 0
you = 0

print('PC:')
while pc <= 33:
    dice = random.randint(1,6)
    print(f'{dice}',end=' ')
    pc += dice

print('',end='\n')
print(f'合計 = {pc}')
print('=========================')
print('You:')
while True:
    dice = random.randint(1,6)
    result =input('サイコロを振りますか?:はい(1),いいえ(0)')
    if result in ['0','1']:
        if result == '1':
            you += dice
            print(f'サイコロの目 = {dice},合計 = {you}')
            if you > 36:
                break
        elif result == '0':
            if you < 33:
                print('合計が33以上でストップできます')
            else:
                break

if pc > 36 and you > 36:
    print('ドロー')
elif pc == you:
    print('ドロー')
elif pc < you:
    print('あなたの勝ち')
elif pc > you:
    print('PCの勝ち')
PC:
2 1 6 2 1 5 5 5 6 6 
合計 = 39
=========================
You:
サイコロを振りますか?:はい(1),いいえ(0)1
サイコロの目 = 5,合計 = 5
サイコロを振りますか?:はい(1),いいえ(0)1
サイコロの目 = 3,合計 = 8
サイコロを振りますか?:はい(1),いいえ(0)1
サイコロの目 = 3,合計 = 11
サイコロを振りますか?:はい(1),いいえ(0)1
サイコロの目 = 6,合計 = 17
サイコロを振りますか?:はい(1),いいえ(0)1
サイコロの目 = 5,合計 = 22
サイコロを振りますか?:はい(1),いいえ(0)1
サイコロの目 = 6,合計 = 28
サイコロを振りますか?:はい(1),いいえ(0)1
サイコロの目 = 1,合計 = 29
サイコロを振りますか?:はい(1),いいえ(0)1
サイコロの目 = 5,合計 = 34
サイコロを振りますか?:はい(1),いいえ(0)0
PCの勝ち

● 解答

勝ち・負け・ドローの場合分けを確認しましょう。
このような場合には,コンピュータでいきなりコードを打ち込むより,紙に場合分けを書いて,すべての場合がつくされているかを確認するとよいでしょう。
そのとき,最初はわかりやすい場合分けを考えてif文にすると,あとから見直したときにわかりやすいコードになるでしょう。

今回の場合は,まず,大きく3つの場合に分けて整理しました。
 (1)どちらも36を超える場合
 (2)どちらか一方が36を超える場合
 (3)どちらも33以上36以下の場合
さらに(3)の場合を,3つの場合に分けます。
 ①等しい場合
 ②あなたが大きい場合
 ②PCが大きい場合

import random

pc = 0
you = 0

print('PC:')
while pc <= 33:
    dice = random.randint(1,6)
    print(f'{dice}',end=' ')
    pc += dice

print('',end='\n')
print(f'合計 = {pc}')
print('=========================')
print('You:')
while True:
    dice = random.randint(1,6)
    result =input('サイコロを振りますか?:はい(1),いいえ(0)')
    if result in ['0','1']:
        if result == '1':
            you += dice
            print(f'サイコロの目 = {dice},合計 = {you}')
            if you > 36:
                break
        elif result == '0':
            if you < 33:
                print('合計が33以上でストップできます')
            else:
                break

if pc > 36 and you > 36:
    print('ドロー')

if pc > 36 and you <= 36:
    print('あなたの勝ち')
if pc <= 36 and you > 36:
    print('PCの勝ち')

if pc <= 36 and you <= 36:
    if pc == you:
        print('ドロー')
    elif pc < you:
        print('あなたの勝ち')
    elif pc > you:
        print('PCの勝ち')

#Python  #プログラミング


この記事が気に入ったらサポートをしてみませんか?