Pythonの学習を始めたばかりの方にとって、「乱数(ランダムな数字)の生成」はとても身近で楽しいテーマのひとつです。中でも、サイコロのようにランダムな数字を出す「疑似サイコロ」は、プログラミングの基本を学ぶのに最適な題材です。
この記事では、Pythonで疑似サイコロを作成する方法について、初心者でもわかりやすく解説していきます。単にコードを紹介するだけではなく、その背景や仕組みにも触れながら丁寧に説明していきます。
この記事の対象
ランダムってどうやって作るの?
Pythonには「乱数(ランダムな数字)」を生成するための便利なライブラリがあります。それが random
モジュールです。これを使えば、プログラムの中で予測できない値を簡単に作り出すことができます。
randomモジュールとは?
Pythonの標準ライブラリに含まれていて、インストール不要です。以下のようにして読み込んで使います。
import random
random
モジュールの中には、いくつかの便利な関数が用意されています。ここでは主に次の2つを紹介します:
random.randrange()
random.randint()
サイコロを作る:random.randrange() の使い方
まずは random.randrange()
を使って、1〜6のランダムな数(サイコロの目)を出力する方法を見てみましょう。
関数の形
random.randrange(start, stop[, step])
start
: 開始値(含む)stop
: 終了値(含まない)step
: 増分(省略可能)
たとえば、 random.randrange(1, 7)
とすると、1から6までの値がランダムに出力されます。ここで注意する点は、stop
は含まれないことです。
実際のプログラム(5回サイコロを振る)
import random
for i in range(5):
print(random.randrange(1, 7))
解説:
for i in range(5)
:ループを5回繰り返します(5回サイコロを振る)。random.randrange(1, 7)
:1〜6の範囲でランダムな整数を生成。
実行結果(例)
3
6
1
5
2
結果は毎回変わります。何度も実行してみましょう!
実際のプログラム(5回サイコロを振る)
import random
for i in range(5):
print(random.randrange(1, 7))
解説:
for i in range(5)
:ループを5回繰り返します(5回サイコロを振る)。random.randrange(1, 7)
:1〜6の範囲でランダムな整数を生成。
実行結果(例)
3
6
1
5
2
結果は毎回変わります。何度も実行してみましょう!
乱数に偏りがある?その理由は?
上記のコードを実行すると、「あれ? 同じ数字がよく出るな…」と思うことがあるかもしれません。
実際には、random
モジュールは完全な乱数ではなく、「疑似乱数」と呼ばれるアルゴリズムで値を生成しています。
これは、初期化時に同じ「シード(種)」から始めているためです。通常は現在の時刻などを基準にしていますが、もっとばらつきを持たせたい場合は、time
モジュールを使って種を設定することもできます。
import random
import time
random.seed(time.time()) # 現在時刻を元にシードを設定
random.randint()を使ってもっと簡単に
1〜6の整数をランダムに出すだけなら、randint()
関数のほうがシンプルに書けます。
使い方
random.randint(a, b)
a
以上、b
以下の整数をランダムに1つ返します。
実例
import random
rand_num = random.randint(1, 6)
print(rand_num)
このように randint()
は、両端の値を含む点で randrange()
より分かりやすく、初心者にはおすすめです。
応用:複数個のサイコロを同時に振る
import random
dice_count = 3 # サイコロの数
for i in range(dice_count):
print(f"{i+1}個目のサイコロ: {random.randint(1, 6)}")
実行結果
1個目のサイコロ: 4
2個目のサイコロ: 2
3個目のサイコロ: 6
このようにして、複数のサイコロを同時に振ることも簡単にできます!
ミニ課題:サイコロゲームを作ってみよう!
あなた自身で、簡単な「サイコロゲーム」を作ってみましょう。
ゲーム仕様
- プレイヤー1とプレイヤー2が1回ずつサイコロを振る
- 出た目が大きい方が勝ち
ヒントコード
import random
player1 = random.randint(1, 6)
player2 = random.randint(1, 6)
print(f"プレイヤー1の目: {player1}")
print(f"プレイヤー2の目: {player2}")
if player1 > player2:
print("プレイヤー1の勝ち!")
elif player1 < player2:
print("プレイヤー2の勝ち!")
else:
print("引き分け!")
ぜひ自分でコードを書いて、色々なバリエーションを考えてみてください。
まとめ
random
モジュールを使えば、簡単にランダムな数を生成できる。randrange(start, stop)
は stop を含まない。randint(a, b)
は a〜bの両端を含む。- サイコロのシミュレーションは、Python学習において最初のステップとして最適!