#48 サイコロ even-odd
● 問題
サイコロ2つの目の和がeven偶数かodd奇数かを当てて,コインを増やしましょう。Player1とPlayer2とあなたの3人で最終的にだれが一番コインの数が多いかを競います。
あなたが正解したのにコインが増えませんよ。
あなたのコインがたとえば3枚しかないとき,それより多くのコインをBetできてしまいます。
3人のコインが全く同じだったとき,WINと表示されるより,DRAWと表示されたほうがよさそうです。
import random
even_odd = ['even偶数','odd奇数 ']
p1_coin = 20
p2_coin = 20
you_coin = 20
print(f'Player1 coin:{p1_coin}')
print(f'Player2 coin:{p2_coin}')
print(f'You coin:{you_coin}')
print('')
p1_rate = 2
p2_rate = 2
you_rate = 2
times = 0
while True:
times += 1
if times > 10:
break
print(f'{times}回目')
print('===================================================')
dice1 = random.randint(1,6)
dice2 = random.randint(1,6)
dice_sum = dice1+dice2
p1_choice = random.randint(0,1)
p2_choice = random.randint(0,1)
p1_bet = random.randint(1,3)
if p1_coin < p1_bet:
p1_bet = p1_coin
p2_bet = random.randint(5,9)
if p2_coin < p2_bet:
p2_bet = p2_coin
print(f'Player1 Choice:{even_odd[p1_choice]} BET:{p1_bet} Rate:x{p1_rate}')
print(f'Player2 Choice:{even_odd[p2_choice]} BET:{p2_bet} Rate:x{p2_rate}')
print('===================================================')
print(f'Your Rate:x{you_rate}')
while True:
you_choice = input('Your Choice?:even偶数(0) or odd奇数(1) ')
if you_choice in ['0','1']:
break
while True:
you_bet = input('Your BET(1-10)? ')
if you_bet in [str(i+1) for i in range(10)]:
break
print('===================================================')
print(f'Dice:{even_odd[dice_sum % 2]}')
print('===================================================')
if dice_sum % 2 == p1_choice:
p1_coin += p1_bet*p1_rate
p1_rate += 1
else:
p1_coin -= p1_bet
p1_rate = 2
if dice_sum % 2 == p2_choice:
p2_coin += p2_bet*p2_rate
p2_rate += 1
else:
p2_coin -= p2_bet
p2_rate = 2
if dice_sum % 2 == you_choice:
you_coin += int(you_bet)*you_rate
you_rate += 1
else:
you_coin -= int(you_bet)
you_rate = 2
print(f'Player1 coin:{p1_coin}')
print(f'Player2 coin:{p2_coin}')
print(f'You coin:{you_coin}')
print('')
if p1_coin*p2_coin*you_coin == 0:
break
max_coin = max(p1_coin,p2_coin,you_coin)
if p1_coin == max_coin:
print('Player1 :WIN')
else:
print('Player1 :LOSE')
if p2_coin == max_coin:
print('Player2 :WIN')
else:
print('Player2 :LOSE')
if you_coin == max_coin:
print('You :WIN')
else:
print('You :LOSE')
● 解答
正解したのに,コインが増えないのは,あたなの正解を判定している部分が間違っているためです。
if dice_sum % 2 == you_choice: があなたの入力値(0 か 1)と2つのサイコロの合計を2で割った余りが等しいかを判定しています。
dice_sum % 2 = 0 ならば偶数,dice_sum % 2 = 1 ならば奇数 ということです。
if dice_sum % 2 == p1_choice: はPlayer1の判定をしている部分です。ここでは正しい判定がされているのに,なぜ,あなたの部分の判定は正しくないのでしょうか。
それは,p1_choice = random.randint(0,1)なので,p1_choiceには整数の0か1が入ります。
それに対して,you_choice = input('Your Choice?:even偶数(0) or odd奇数(1) ')なので,you_choiceには文字の'0'か'1'が入ります。
dice_sum % 2 の結果は整数0か1なので,p1_choiceとは等しくなることがあいりますが,you_choiceの'0'と'1'とは等しくなることはありません。
つまり,0 ≠ '0' です。
もう一つ,所有しているコインの枚数より多くの枚数をBetできてしまう点です。
・所持している枚数より少ない枚数の入力しか受け付けない
・所持している枚数より多い枚数を入力した場合には,所持している枚数が自動的にBetされる など,いくつかの方法が考えられます。
今回は,所持している枚数より少ない枚数の入力しか受け付けないを採用しました。所持している枚数より多い枚数が入力された場合には再度入力が求められます。入力値を判定している部分に条件を追加しました。
勝ち負けの判定のところに,3人のコインが全く同じ枚数のとき,DRAWと表示するようにしました。
if p1_coin == p2_coin == you_coin: という書き方ができるのは,Pythonならではですね。
Python以外のプログラミング言語では,以下のように and を使って書くことになるでしょう。
if p1_coin == p2_coin and p2_coin == you_coin:
import random
even_odd = ['even偶数','odd奇数 ']
p1_coin = 20
p2_coin = 20
you_coin = 20
print(f'Player1 coin:{p1_coin}')
print(f'Player2 coin:{p2_coin}')
print(f'You coin:{you_coin}')
print('')
p1_rate = 2
p2_rate = 2
you_rate = 2
times = 0
while True:
times += 1
if times > 10:
break
print(f'{times}回目')
print('===================================================')
dice1 = random.randint(1,6)
dice2 = random.randint(1,6)
dice_sum = dice1+dice2
p1_choice = random.randint(0,1)
p2_choice = random.randint(0,1)
p1_bet = random.randint(1,3)
if p1_coin < p1_bet:
p1_bet = p1_coin
p2_bet = random.randint(5,9)
if p2_coin < p2_bet:
p2_bet = p2_coin
print(f'Player1 Choice:{even_odd[p1_choice]} BET:{p1_bet} Rate:x{p1_rate}')
print(f'Player2 Choice:{even_odd[p2_choice]} BET:{p2_bet} Rate:x{p2_rate}')
print('===================================================')
print(f'Your Rate:x{you_rate}')
while True:
you_choice = input('Your Choice?:even偶数(0) or odd奇数(1) ')
if you_choice in ['0','1']:
break
while True:
you_bet = input('Your BET(1-10)? ')
if you_bet in [str(i+1) for i in range(10)] and you_coin >= int(you_bet): # 変更
break
print('===================================================')
print(f'Dice:{even_odd[dice_sum % 2]}')
print('===================================================')
if dice_sum % 2 == p1_choice:
p1_coin += p1_bet*p1_rate
p1_rate += 1
else:
p1_coin -= p1_bet
p1_rate = 2
if dice_sum % 2 == p2_choice:
p2_coin += p2_bet*p2_rate
p2_rate += 1
else:
p2_coin -= p2_bet
p2_rate = 2
if dice_sum % 2 == int(you_choice): # 変更
you_coin += int(you_bet)*you_rate
you_rate += 1
else:
you_coin -= int(you_bet)
you_rate = 2
print(f'Player1 coin:{p1_coin}')
print(f'Player2 coin:{p2_coin}')
print(f'You coin:{you_coin}')
print('')
if p1_coin*p2_coin*you_coin == 0:
break
max_coin = max(p1_coin,p2_coin,you_coin)
if p1_coin == p2_coin == you_coin:
print('DRAW')
else:
if p1_coin == max_coin:
print('Player1 :WIN')
else:
print('Player1 :LOSE')
if p2_coin == max_coin:
print('Player2 :WIN')
else:
print('Player2 :LOSE')
if you_coin == max_coin:
print('You :WIN')
else:
print('You :LOSE')
#Python #プログラミング
この記事が気に入ったらサポートをしてみませんか?