· Fuga578 · Python基礎 · 6 min read
Pythonで乱数を扱う — random モジュール完全入門
サイコロ・抽選・シャッフル・確率分岐 — ゲーム作りで頻出の「ランダムな処理」を、Python標準のrandomモジュールで実装する方法をまとめました。

ゲームを作るとき、シミュレーションを書くとき、ちょっとした抽選プログラムを書くとき。「ランダム」が必要になる場面は意外と多いです。
Python には標準で random モジュールが付いていて、乱数まわりはこれだけで十分。この記事では、よく使う関数を実用例つきでまとめます。
random モジュールを読み込む
import randomこれだけ。標準ライブラリなのでインストール不要。
サイコロを振る: random.randint(a, b)
a 以上 b 以下の整数をランダムに返します。両端を含む ことに注意 (b も含まれる)。
import random
dice = random.randint(1, 6)
print(f"サイコロの目: {dice}")サイコロの目: 4
実行するたびに違う数字が出ます。1〜6のサイコロ、1〜100のクジ、なんでもこれで作れます。
0〜1 の小数: random.random()
引数なしで 0.0 以上 1.0 未満の小数を返します。
import random
print(random.random()) # 例: 0.7234951...これ単体では使いどころが少ないですが、確率分岐でよく使います。
# 30% の確率でクリティカルヒット
if random.random() < 0.3:
print("クリティカル!")
else:
print("通常攻撃")random() が 0〜1 の範囲なので、「< 0.3」なら30%の確率で True になる。直感的。
範囲つき小数: random.uniform(a, b)
a 以上 b 以下の小数を返します。
import random
temp = random.uniform(20.0, 30.0)
print(f"今日の気温: {temp:.1f}℃")今日の気温: 24.7℃
randint の小数版だと思えば OK。
リストから1つ選ぶ: random.choice(seq)
リスト・タプル・文字列などから、要素をひとつランダムに取り出します。
import random
drinks = ["コーヒー", "紅茶", "コーラ", "水"]
print(f"今日の飲み物: {random.choice(drinks)}")今日の飲み物: 紅茶
ランダム抽選、ランダムイベントの実装で大活躍。
リストから複数選ぶ: random.sample(seq, k)
k 個を重複なしで取り出します。
import random
numbers = list(range(1, 44)) # 1〜43
lotto = random.sample(numbers, 6)
print(f"ロト6: {sorted(lotto)}")ロト6: [3, 11, 18, 25, 32, 41]
「重複なし」がポイント。同じ数字が出ないので、ロト・くじ・あみだくじ用に使えます。
重複ありで複数取り出したいとき: random.choices
# 重複あり
print(random.choices(["A", "B", "C"], k=5))['A', 'C', 'A', 'B', 'A']
重み付きで取り出す
choices は 確率の重み付け もできます。これがすごく便利。
# Aが50%、Bが30%、Cが20%の確率
result = random.choices(
["A", "B", "C"],
weights=[5, 3, 2],
k=10,
)
print(result)['A', 'A', 'B', 'A', 'C', 'A', 'A', 'B', 'C', 'A']
ガチャの「レア確率」を表現するのにぴったり。
リストをシャッフル: random.shuffle(seq)
リストの順序をランダムに並べ替えます。元のリストが直接書き換わる ので注意。
import random
cards = ["♠A", "♥K", "♦Q", "♣J"]
random.shuffle(cards)
print(cards)['♥K', '♣J', '♠A', '♦Q']
トランプのシャッフル、配列の並べ替えに使えます。
再現性が欲しいとき: random.seed
「毎回同じ乱数列が出てほしい」(テストやデバッグの再現性) ときは、シード値を固定します。
import random
random.seed(42)
print(random.randint(1, 100)) # 81
print(random.randint(1, 100)) # 14
random.seed(42)
print(random.randint(1, 100)) # また 81シードを揃えれば、再実行しても同じ結果が出ます。
実用例: 数当てゲーム
ここまでの知識で書ける、簡単なゲーム。
import random
answer = random.randint(1, 100)
attempts = 0
print("1〜100 の数字を当ててください")
while True:
guess = int(input("> "))
attempts += 1
if guess < answer:
print("もっと大きい!")
elif guess > answer:
print("もっと小さい!")
else:
print(f"正解! {attempts}回で当たりました")
breakこれだけで、十分遊べるゲームになります。
まとめ — どの関数をいつ使う?
| やりたいこと | 使う関数 |
|---|---|
| 整数の乱数 (1〜6など) | random.randint(a, b) |
| 0〜1の小数 (確率分岐) | random.random() |
| 範囲つき小数 | random.uniform(a, b) |
| リストから1つ選ぶ | random.choice(seq) |
| 重複なしで複数選ぶ | random.sample(seq, k) |
| 重複あり/重み付きで選ぶ | random.choices(seq, weights=, k=) |
| 並び替え | random.shuffle(seq) |
| 再現性 | random.seed(値) |
random モジュールはゲーム作りの定番ツール。次は実際にゲームを作る記事も書く予定なので、ぜひ手を動かしながら覚えてみてください。

