今回やること
ゲームやくじ引きでは、ランダムな値が必要になります。
randomを使うと、サイコロやランダム選択を簡単に作れます。
今回は、整数の乱数、リストからの選択、シャッフルを練習します。
randint()は範囲内の整数、choice()はリスト内の1要素、shuffle()はリスト自体の並び順を変えます。標準ライブラリを使う仕組みはimportの基本、リストの変更はリスト操作で確認できます。
サイコロを作る
import random
dice = random.randint(1, 6)
print(dice)
randint(1, 6) は、1から6までの整数をランダムに返します。
リストから選ぶ
import random
subjects = ["英語", "数学", "Python"]
selected = random.choice(subjects)
print(selected)
choice() は、リストから1つ選びます。
順番を混ぜる
import random
cards = ["A", "B", "C", "D"]
random.shuffle(cards)
print(cards)
shuffle() は、リストの順番をその場で混ぜます。
動作確認
3つのコードをそれぞれ保存して実行し、サイコロは1〜6、科目はリスト内のいずれか、cardsは4要素を保ったまま順番が変われば成功です。値が毎回違うのは正常です。
同じ結果で確認したいテストでは、random.seed(1)を乱数生成前に置きます。本番のくじ引きでシードを固定すると毎回同じ結果になるため、検証時だけ使います。
他の乱数処理へ影響させたくない場合は、専用の生成器を作れます。
import random
rng = random.Random(1)
print(rng.randint(1, 6))
print(rng.choice(["英語", "数学", "Python"]))
よくあるエラー
| エラー | 原因 | 修正 |
|---|---|---|
NameError | import random がない | 先頭にimport文を書く |
IndexError | 空のリストから選んだ | リストに値を入れる |
| 結果が毎回違う | 乱数の仕様 | テストではシードを使う |
random.shuffle(cards)の返り値はNoneです。shuffled = random.shuffle(cards)ではなく、実行後のcardsを表示します。パスワードやトークンのような秘密値には通常のrandomではなく、用途に合う安全な仕組みが必要です。
練習
- サイコロを1回振る
- 1から100の乱数を出す
- 科目リストから1つ選ぶ
- じゃんけんの手をランダムに選ぶ
次のステップ
データと処理をまとめる考え方は Pythonのクラス入門 で扱います。
乱数を制作へつなげるなら計算ドリルやじゃんけんゲームへ進みます。