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の目は出現してこない模様。
いいなと思ったら応援しよう!
サポート、本当にありがとうございます。サポートしていただいた金額は、知的サイドハッスルとして取り組んでいる、個人研究の費用に充てさせていただきますね♪