見出し画像

randint関数の範囲指定に注意

今日は、『つくってマスターPython』第3章 “ライブラリを活用する”で学んだことのアウトプットです。

サイコロ・ゲーム

乱数の簡単な例として、コンピュータとプレイヤーが交互にサイコロを投げて、先に合計が20になったら勝ち!というゲームを作ってみましょう。

というわけで、本書にある下記のコードを打ち込んで、早速ゲームで遊んでみました。

import random

me = 0
you = 0
end_point = 20

while True:
   input('--push enter or return--')
   rnd = random.randint(1, 7)
   you += rnd
   print('you:' + str(rnd) + ' total:' + str(you))
   if you >= end_point:
       print('*** you win! ***')
       break
   rnd = random.randint(1, 7)
   me += rnd
   print('me:' + str(rnd) + ' total:' + str(me))
   if me >= end_point:
       print('*** I win! ***')
       break
   
print('---end---')

すると…

サイコロの目が7となる事象が発生。

というわけで、randint関数について少し調べてみました。

randint関数

randomモジュールの関数randint(a, b)はa <= n <= bのランダムな整数intを返す。randrange(a, b + 1)と等価。bの値も範囲に含むので注意。

参考にしたのは、こちらの記事です。

本書のコードでは、

randint(1, 7)

となっていて、7の値も範囲に含まれていたため、サイコロを投げて7の目が出たわけですね。

というわけで、randintの部分を修正してみました。

import random

me = 0
you = 0
end_point = 20

while True:
   input('--push enter or return--')
   rnd = random.randint(1, 6)
   you += rnd
   print('you:' + str(rnd) + ' total:' + str(you))
   if you >= end_point:
       print('*** you win! ***')
       break
   rnd = random.randint(1, 6)
   me += rnd
   print('me:' + str(rnd) + ' total:' + str(me))
   if me >= end_point:
       print('*** I win! ***')
       break
   
print('---end---')

実際にプレイしてみると、7の目は出現してこない模様。

サポート、本当にありがとうございます。サポートしていただいた金額は、知的サイドハッスルとして取り組んでいる、個人研究の費用に充てさせていただきますね♪