NumPyライブラリの乱数を利用してPythonサイコロを作ってみる

プログラミングの基礎

こんにちは。IT/経済ジャーナリストで投資家の渡辺です。

Pythonでは、プログラムの土台となる仕組み、たとえばwhileforの繰り返しとかif文とか、基本的な機能だけがPythonプログラムの本体にあります。

それ以外は、拡張ライブラリというさまざまな機能を持った「部品」を、使いたいときに物置から引っ張り出してきて使う、という感じです。

実際は、いくつもの関連する「部品」が集まった「部品群」なので、「パッケージ」と呼ばれることがあります。

 

ところがPythonでは科学計算、統計処理、Webネットワーキング、果てはAI(人工知能)のベースとなる機械学習まで、さまざまな強力なパッケージが「物置」に置かれています。

この強力なライブラリが用意されていて、けっこう複雑なことがわりと手軽に実現できることが、最近Pythonの人気が急上昇している理由でもあります。

 

数学ライブラリを使ってみよう

ライブラリにはいろいろな種類がありますが、すでにPyCharmをインストールした時に、主要なものは一緒にインストールされています。

PyCharmの画面左上の「File」メニューから「Default Settings」を選択します。

設定用のウィンドウが出てくるので、そこで「Project Interpretter」を選びます。

以下の画面のように、PyCharmにインストールされているライブラリ(部品)が山ほど出てきます。

プログラミングの基本的な作り方やお作法を学んだあとは、1)どこにどういうライブラリがあるのか、2)どういう機能があるのか、3)どういう手順でその機能を利用できるのかを学んでいくと、だんだん本格的なアプリを作っていくことが可能になってきます。

数値計算ライブラリNumPyを使ってみる

統計処理やゲーム、科学技術などのプログラミングでよく使われる、数値計算ライブラリNumPyを使ってみましょう。

まず物置にある部品、つまりライブラリを使いたい場合は、import文を使って取り込みます。

import numpy as np

これはそのままで、「ライブラリnumpynpという名前で取り込む」という意味です。

プログラムの中では、このnpに対して、参照したり指示することで、必要な機能を引き出していきます。

たとえば、数値計算ということで、円周率π(パイ)が、このライブラリにはあらかじめ設定されています。

この部品にはすでに “np” という名前を付けています。

円周率πについては、”pi” という名前で登録されています。

ということで、以下のように “.”(ピリオド)で区切って表現します。

np.pi

このままでは人間には分からないので、print文で出力させます。

print(np.pi)

上のimport文とこのprint文の2行だけで、円周率πが表示されます。

これで半径から円周の長さ、円の面積、球の表面積や体積が計算できます。

NumPyの乱数関数でサイコロを作ってみる

これだけでは物足りないので、次はNumPy乱数関数を使ってみます。

乱数(ランダム)とは規則性のない数字のことで、クジとかサイコロ、占いとかゲームの敵キャラの動きとか、いろいろなアプリで利用されています。

Numpyライブラリの中に、randomという部品があります。

これが乱数機能を持っています。

rand()関数で0以上1未満の乱数を発生させる

いくつか関数がありますが、まずはrand()関数を覚えてください。

この関数は、0以上から1未満までの範囲で、つまり小数として0.xxxxという数字をランダムに発生させてくれます。

先ほど、このプログラムではNumPyライブラリは、npという名前で扱うことを決めました。

また乱数を使うには、NumPyライブラリ群の中にあるrandomというモジュールに中に用意されているrand()関数を使います。

先ほどのpiと同じように、”.”(ピリオド)で区切って以下のように指定します。

np.random.rand()

これを先ほどのπの表示と同様に、print文で表示させてみてください。

print(np.random.rand())

ついでに、1回だけの表示だと乱数の様子が分かりにくいので、for文で10回繰り返して、それぞれランダムな小数が出ているか確認してみてください。

for i in range(10):
    print(np.random.rand())

乱数なんで毎回結果は変わるものですが、小さくて0.00xxx、大きいと0.8xxxとか0.9xxxということで、確かに0以上1未満の範囲でランダムに数字が作られています。

int()関数で整数化してサイコロに

とはいえ、この小数のままではサイコロになりません。

サイコロにするには、1)1から6までの範囲で乱数を発生させること、2)整数にすることが必要です。

まず1から6の範囲ですが、rand()関数のままだと0から1未満なので、6倍します。

そうすると、0.00xxxの場合は6倍してもあまり大きくならないので0.0xxxくらいの数字になります。

次に一番大きくても0.99xxxなので、6倍すると5.9xxxくらいになります。

小数部分は切り捨てたいので、小数以下のケタを切り捨てて整数化するint()関数を使います。

その場合、少ない場合、たとえば0.00xxxの時には0になります

逆に大きい場合、5.9xxxの時には、小数部分が切り取られて、5になります

つまり6倍してint()関数に入れると、0〜5の数字が得られるわけです。

ということは、この結果に+1すれば、1〜6の数字が得られ、電子サイコロになりました

最後にコードで表記してみます。

np.random.rand()

これを6倍して、int()関数で小数を切り捨て、+1すると、こうなります。

int(np.random.rand())+1

先ほどの10回繰り返すコードに置き換えてみてください。

for i in range(10):
    print(int(np.random.rand()*6)+1)

ちゃんとサイコロになっていますね。

 

<今日の要約ノート>

Pythonには、便利な機能を提供する部品群=ライブラリが用意されていて、いろいろなアプリがわりと短いコードで作れる。数値計算にはNumPyというモジュールが用意されている。この中のrandomモジュールにあるrand()関数を使えば、乱数が得られる。この関数だけでは0から1の間の小数だが、何倍かしてint()関数で小数部分を切り捨てれば、サイコロができる。

 

コメント

  1. […] ・ライブラリの乱数を利用してサイコロを作ってみる […]

タイトルとURLをコピーしました