【レッスン1-6】ランダムな数値を作ろう!乱数生成の基本|Python入門

一つ前のLessonではフォーマット文字列について学習しました。
今回は乱数の生成について見ていきます。
Lesson1:基礎文法編
・Lesson1-1:Pythonの入り口|初めてコードを書いてみよう
・Lesson1-2:変数の基本を理解しよう
・Lesson1-3:四則演算をしよう
・Lesson1-4:文字列を操作しよう
・Lesson1-5:フォーマット文字列を使いこなそう
・Lesson1-6:乱数を生成しよう ◁今回はココ
・練習問題1-1:レッスン1の内容を総復習しよう
Lesson2:制御構造編
Lesson3:関数とスコープ編
Lesson4:データ構造編
Lesson5:オブジェクト指向編
次のステップ:Pythonを用いたアプリ開発
Ramdomモジュールで乱数を生成しよう
ここから乱数生成の説明に入ります。
ページ下部にはこのページで出てくる用語の意味をまとめた 用語集 もありますので、分からない言葉が出てきたらそちらも参考にしてください。
プログラムの中でランダムな数値を扱うことは、ゲームやデータのシミュレーションなど、多くの場面で必要になります。
Pythonでは簡単に乱数を生成する機能が用意されています。この記事では基本的な乱数生成の方法について学んでいきましょう。
「乱数」とは特定の規則に従わない、予測できないランダムな数のことです。
コンピュータで生成される乱数は実際には「疑似乱数」と呼ばれ、特定のアルゴリズムに基づいて計算されていますが、私たちにはランダムに見えるものです。
Pythonでは疑似乱数を簡単に生成するための仕組みが標準で用意されています。
ランダムな数字を生成する方法
Pythonでは乱数を生成するために「モジュール」と呼ばれる機能を使います。
モジュールとはPythonに新しい機能を追加するためのツールのようなものです。現時点ではまだモジュールについて深く理解する必要はありません。
ここでは乱数の生成だけできるようになりましょう。
モジュールについて詳細に解説した記事は↓↓になります。
小数の乱数を生成する
0.0以上1.0未満のランダムな小数を生成したい場合は、次のコードを使います。
import random # Randomモジュールのインポート # 0.0 以上 1.0 未満のランダムな数を生成 n = random.random() # random.random()関数で乱数生成し、変数nに代入 print(n)
このコードを実行すると、0.0から1.0の間でランダムに選ばれた小数が変数nに代入され、printで表示されます。
最初に「import random」と書くことで、このコード内で乱数生成が使用可能になり、その後の「変数 = random.random()」の部分でランダムな数値を生成しています。まずはこの形を丸暗記しましょう。
実行するたびに異なる数値が表示されるので、試してみてください。
整数の乱数を生成する
特定の範囲で整数の乱数を生成することもよくあります。
たとえば1から6までの範囲でランダムに整数を生成したい場合、以下のコードを使います。
import random # Randomモジュールのインポート # 1 から 6 までのランダムな整数を生成 n = random.randint(1, 6) # random.random()関数で乱数生成し、変数nに代入 print(n)
このコードでは1から6までの整数がランダムに選ばれます。
これを何度か実行すると毎回異なる数字が表示されるのが確認できます。サイコロを振るような場面で役立つコードです。
前の例では「変数 = random.random()」だったのが今回は「変数 = random.randint(1, 6)」に変わっている点に注意しましょう。
「import random」は一つのコード内に一つ書いていれば、何度でも使用可能です。
リストをランダムに操作する方法
このサイトの1-1から順番に勉強している人は、まだ「リスト」が何かを知らないはずです。
その場合はこの章は読み飛ばし、リスト学習後にまた戻ってきてください。
Pythonのrandom
モジュールには、リストやその他のシーケンスからランダムに要素を選択するための便利な関数がいくつか用意されています。
ここでは、shuffle
、choice
、choices
、sample
という4つの関数を紹介します。
shuffle()
を使ってリストをシャッフルする
shuffle()
関数 を使うとリスト内の要素をランダムに並べ替えることができます。
import random fruits = ['りんご', 'バナナ', 'みかん', 'ぶどう', 'パイナップル'] random.shuffle(fruits) print(fruits)
このコードを実行すると、例えば以下のように出力されます。
['ぶどう', 'バナナ', 'みかん', 'りんご', 'パイナップル']
choice()
を使って1つの要素を選択する
choice()
関数 はリストやタプルなどのシーケンスから 1つの要素をランダムに選択 するために使います。
例えば、以下のコードでリストから1つの果物をランダムに選んでいます。
import random fruits = ['りんご', 'バナナ', 'みかん', 'ぶどう', 'パイナップル'] selected_fruit = random.choice(fruits) print(selected_fruit)
このコードを実行すると、例えば以下のように出力されます。
バナナ
choices()
を使って複数の要素を選択する
choices()
関数 はリストから 複数の要素をランダムに選択 する場合に使います。
choices()
では選択する数を指定でき、同じ要素が複数回選ばれること(重複選択)が可能です。
import random fruits = ['りんご', 'バナナ', 'みかん', 'ぶどう', 'パイナップル'] selected_fruits = random.choices(fruits, k=3) print(selected_fruits)
このコードを実行すると、例えば以下のように出力されます。
['みかん', 'バナナ', 'バナナ']
sample()
を使って重複しないランダムな要素を選択する
sample()
関数 は、リストの中から 重複しない要素をランダムに選ぶ 方法です。
選んだ要素は元のリスト内で一度しか選ばれません。
import random fruits = ['りんご', 'バナナ', 'みかん', 'ぶどう', 'パイナップル'] selected_fruits = random.sample(fruits, k=3) print(selected_fruits)
このコードを実行すると、例えば以下のように出力されます。
['ぶどう', 'みかん', 'バナナ']
まとめ
Pythonでは簡単に乱数を生成することができます。
今回は「モジュール」を使って乱数を生成しましたが、モジュールについては後で詳しく学ぶ予定です。
今はランダムな数を生成する基本的な方法を覚えて、プログラムに活用してみましょう!
練習問題:1から100までのランダムな数字を表示しよう
プログラムでランダムに1から100までの間の整数を生成し、その数を表示するプログラムを作成しましょう。
さらに、フォーマット文字列を使って「あなたの番号は○○番です」と表示してください。
問題の詳細条件
以下の要件に従ってコードを完成させてください。
- ランダムな数を生成する機能を使って、1から100までの範囲の整数をランダムに生成すること。
- 生成されたランダムな数値を「あなたの番号は○○番です」という形式で表示すること。
- 生成された数値が毎回異なること。
ただし、以下のような実行結果となるコードを書くこと。
あなたの番号は 57 番です
問題の答え合わせ
この問題の一つの正解例とそのコードの解説を以下に示します。
一つの正解例
例えば以下のようなプログラムが考えられます。
- 正解コード
-
import random # 1から100までのランダムな整数を生成 random_number = random.randint(1, 100) # 結果を表示 print(f"あなたの番号は {random_number} 番です")
正解例の詳細解説
非常にシンプルなコードの為解説はありません。
難しいと感じる場合は上記のテキストを読み返してみましょう。
Python用語集|乱数生成編
今回の記事で出てきた用語・関数などを一覧で紹介します。
このサイトに出てくる 全てのPython用語をまとめた用語集 も活用してください。
Python用語 | 定義・使い方の概要 | 解説記事へのリンク |
---|---|---|
乱数 | 予測できないランダムな数値で、シミュレーションやゲームなどに使用される | 本記事 |
モジュール | Pythonで特定の機能をまとめた外部ファイル。import で読み込んで利用する | Lesson5-8 |
random モジュール | 乱数を生成するための標準ライブラリ。数値のランダム取得やリストのシャッフルに使う | 本記事 |
random.random() 関数 | 0以上1未満のランダムな浮動小数点数を返す関数 | 本記事 |
random.randint() 関数 | 指定した範囲内の整数からランダムに1つを返す関数 | 本記事 |
shuffle() 関数 | リストの要素をランダムな順序に並び替える関数 | 本記事 |
choice() 関数 | シーケンスからランダムに1要素を選んで返す関数 | 本記事 |
choices() 関数 | シーケンスから指定数だけ重複を許してランダムに選ぶ関数 | 本記事 |
sample() 関数 | シーケンスから指定数の要素を重複なしでランダムに選ぶ関数 | 本記事 |
リスト | 複数の値を順序付きで格納するデータ構造で、要素の追加や変更が可能 | Lesson4-1 |
タプル | リストに似たデータ構造だが、作成後に要素を変更できない(イミュータブル) | Lesson4-9 |
フォーマット文字列 | 文字列に変数の値を埋め込むための表記方法。f"..." や format() を使う | Lesson1-5 |
FAQ|Python学習の第一歩:乱数編
- Q1. 毎回同じ乱数が出ることがあるのはなぜ?
-
random.seed()
で固定された値が使われているか、実行環境がキャッシュしている可能性があります。seed()
を使わなければ毎回異なる値になります。
- Q2. 特定の範囲内で乱数を生成するには?
-
random.randint(1, 100)
のように指定すると、1~100の範囲で整数の乱数が得られます。
- Q3. ランダムにリストから1つ選ぶには?
-
random.choice(list)
を使えば、リスト内からランダムに1要素を選べます。ゲームや抽選などにも使えます。