プログラムは、順次、分岐、反復などの基本的な処理を組み合わせることで、さまざまな問題を解決できます。
さらに、乱数を利用したり、処理を関数として整理したり、外部のサービスとAPIで連携したりすると、プログラムをより効率よく活用できます。
情報Ⅰでは、プログラムをただ書くだけでなく、目的に応じて構造化し、必要な機能を適切に利用する考え方を学びます。
この記事では、プログラムの応用として、乱数、関数、APIについて学びます。
乱数の利用
乱数とは何か
乱数とは、ある一定の範囲内で、どの値も同じ確率で発生しているように扱える数のことです。
たとえば、サイコロを振ると、1から6までの目のうち、どれか1つが出ます。
十分に多く振れば、それぞれの目が出る回数は近い値になります。
このように、結果があらかじめ決まっていない処理を表現したいときに、乱数を利用します。
乱数は、次のような場面で利用されます。
- じゃんけんの手をランダムに決める。
- サイコロの目をランダムに決める。
- シミュレーションで偶然の要素を表す。
- ゲームで敵の動きやアイテムの出現を変化させる。
ただし、コンピュータは計算によって乱数のような値を作ります。
そのため、厳密には完全な偶然ではなく、乱数に似た値である疑似乱数が使われることがあります。
コンピュータが発生させる乱数は、多くの場合、計算によって作られた疑似乱数です。
学習では、実行するたびに異なる値が得られるものとして利用しますが、仕組みとしては計算によって作られている点に注意します。
Pythonで乱数を使う方法
Pythonで乱数を使うには、乱数を扱うための機能を追加します。
代表的には、randomというモジュールを使います。
モジュールとは、あらかじめ用意された機能をまとめたものです。
乱数を使うときは、import randomによって、randomモジュールを利用できるようにします。
| コマンド | 役割 |
|---|---|
import random | 乱数を利用するための機能を追加する。 |
random.randint(値1,値2) | 値1以上、値2以下の整数の乱数を発生させる。 |
random.randrange(値) | 0以上、値未満の整数の乱数を発生させる。 |
たとえば、random.randint(0,2)を使うと、0、1、2のいずれかの整数を発生させることができます。
また、random.randrange(6)を使うと、0、1、2、3、4、5のいずれかの整数を発生させることができます。
乱数を使ったじゃんけんプログラム
じゃんけんでは、グー、チョキ、パーの3種類の手があります。
これをリストに入れておき、乱数で選ばれた番号の要素を表示すると、実行するたびに違う手を出すプログラムを作れます。
例えば、次のように考えます。
| 番号 | リストの要素 |
|---|---|
| 0 | gu |
| 1 | tyoki |
| 2 | pa |
このとき、0から2までの乱数を発生させます。
その値をリストの添字として使うことで、グー、チョキ、パーのうち1つを表示できます。
ここで大切なのは、乱数そのものがじゃんけんの手ではないという点です。
乱数は、リストのどの要素を選ぶかを決めるために使われます。
Pythonでは、以下のようなプログラムになります。
import random
te = ['グー', 'チョキ', 'パー']
a = random.randint(0, 2)
print(te[a])
リストの要素番号は、多くのプログラミング言語では0から始まります。
そのため、3個の要素がある場合、添字は0、1、2になります。
リストについての復習は、以下の記事を参考にしてください。
乱数を使ったサイコロのシミュレーション
乱数は、シミュレーションにも利用できます。
シミュレーションとは、現実の現象や実験を、コンピュータ上で模擬的に再現することです。
たとえば、サイコロを1000回振る実験を実際に行うのは手間がかかります。
しかし、プログラムを使えば、乱数を利用して1000回分のサイコロの目を発生させ、各目が何回出たかを数えることができます。
サイコロの目は1から6ですが、プログラムでは0から5の乱数を使ってリストの添字として扱うことがあります。
| 乱数の値 | 対応させるサイコロの目 |
|---|---|
| 0 | 1の目 |
| 1 | 2の目 |
| 2 | 3の目 |
| 3 | 4の目 |
| 4 | 5の目 |
| 5 | 6の目 |
このように、乱数をリストの添字として使い、出た回数をリストに記録します。
たとえば、1の目が出たら1の目に対応する場所の値を1増やします。
これを1000回繰り返すと、それぞれの目が何回出たかを調べることができます。
乱数を使うと、偶然の要素を含む現象をプログラムで扱うことができます。
Pythonでは、以下のようなプログラムになります。
import random
count = [0, 0, 0, 0, 0, 0]
i = 0
while i < 1000:
deme = random.randrange(6)
count[deme] = count[deme] + 1
i = i + 1
print(count)
関数の作成と利用
関数とは何か
関数とは、ある処理をするための命令をまとめたものです。
同じ処理を何度も使う場合、その処理を関数としてまとめておくと、プログラムが読みやすくなります。
また、必要なときに関数を呼び出すことで、同じ処理を再利用できます。
たとえば、円の面積を求める処理を考えます。
円の面積は、半径×半径×円周率で求められます。
この計算を何度も行う場合、毎回同じ式を書くよりも、関数としてまとめた方が効率的です。
関数名、引数、戻り値の考え方
プログラムの関数は、数学の関数のように考えることができます。
数学では、y=f(x)のように表すことがあります。
このとき、fが関数名、xが引数、yが戻り値に対応します。
| 用語 | 意味 |
|---|---|
| 関数名 | 関数につける名前です。 |
| 引数 | 関数に渡す値です。 |
| 戻り値 | 関数が処理した結果として返す値です。 |
たとえば、半径を受け取り、円の面積を返す関数では、半径が引数になり、計算された面積が戻り値になります。
関数を使うときには、関数を定義するだけではなく、必要な場所で関数を呼び出す必要があります。
関数を作っただけでは、その処理は実行されません。
関数を使うには、プログラムの中で関数を呼び出す必要があります。
円の面積を求める関数の例
円の面積を求める関数では、半径を引数として受け取り、半径×半径×3.14の計算結果を戻り値として返します。
処理の流れは、次のようになります。
- 半径を入力する。
- 入力された文字を数値に変換する。
- 半径を関数に渡す。
- 関数の中で円の面積を計算する。
- 計算結果を戻り値として返す。
- 戻り値を表示する。
このように、関数を使うと、面積を求める処理を1つのまとまりとして扱えます。
円の面積を求める場合、Pythonでは、以下のようなプログラムになります。
def menseki_en(r):
menseki = r * r * 3.14
return menseki
r = input('半径を入力してください。')
r = int(r)
kekka = menseki_en(r)
print('円の面積は', kekka, 'です。')
menseki_enという名前の関数を定義しています。
rは、関数に渡される値で、ここでは円の半径を表します。
defは、関数を作るときに使う命令です。
intとfloatについて
intとfloatは、入力された文字列を数値に変換するときに使います。
Pythonのinput()で入力された値は、見た目が数字でも、プログラムの中では文字列として扱われます。
そのため、計算に使う場合は、int()やfloat()を使って数値に変換する必要があります。
int()は、文字列を整数に変換する関数です。
たとえば、'5'を5に変換します。
小数を含まない値を扱うときに使います。
float()は、文字列を小数を扱える数値に変換する関数です。
たとえば、'2.5'を2.5に変換します。
小数を含む値を扱う可能性があるときに使います。
| 関数 | 変換後の型 | 使う場面 |
|---|---|---|
int() | 整数 | 回数、個数、番号などを扱うとき。 |
float() | 小数を扱える数値 | 長さ、重さ、面積など、小数になる可能性がある値を扱うとき。 |
上に記載した円の面積を求めるプログラムでは、intを用いた例を記載しました。しかし、円の面積を求めるプログラムでは、半径に小数を入力する場合もあるため、float()を使うほうが自然です。
関数を使う利点
関数を使う利点は、大きく分けて3つあります。
- プログラムの構造が分かりやすくなる。
- 同じ処理を何度も書かずに済む。
- 作成した処理を再利用できる。
プログラムが長くなると、すべての処理を1つの場所に書くと読みにくくなります。
そこで、機能ごとに関数として分けることで、どこで何をしているのかが分かりやすくなります。
また、同じ処理を何度も書くと、修正が必要になったときにすべての場所を直さなければなりません。
関数にまとめておけば、関数の中身を修正するだけで済む場合があります。
関数は、プログラムを機能ごとに整理し、再利用しやすくするための重要な仕組みです。
外部のプログラムとの連携
APIとは何か
APIとは、Application Programming Interfaceの略で、プログラムからソフトウェアやサービスを操作するためのインタフェースです。
インタフェースとは、異なるもの同士をつなぐための接点や仕組みのことです。
APIを使うと、自分で一からすべての機能を作らなくても、すでに用意されている機能やデータを利用できます。
たとえば、地図の情報、天気の情報、統計データなどを、外部のサービスから取得してプログラムで利用することがあります。
WebAPIとは何か
プログラムがWeb上に公開され、外部から呼び出して利用できるAPIをWebAPIといいます。
WebAPIを利用すると、Webサービスやビッグデータを使ったプログラムを作ることができます。
たとえば、次のようなサービスでAPIが利用されることがあります。
| 例 | 利用できる内容 |
|---|---|
| 統計情報のサービス | 人口や産業などの統計データ。 |
| 地図情報のサービス | 位置情報や地図上の情報。 |
| 地域情報のサービス | 地域に関するデータ。 |
APIは、関数と似た考え方で理解できます。
必要なデータを引数のように送ると、サービスやデータが戻り値のように返されます。
ただし、APIは外部のプログラムやサービスと連携するための仕組みであり、自分のプログラム内だけで使う関数とは扱う範囲が異なります。
APIは、外部の機能やデータを利用するための入り口のような役割を持ちます。
情報Ⅰでは、APIを使うことで、プログラムが外部サービスと連携できることを理解することが大切です。
APIを利用する場面
APIは、複数のプログラムを連携させたいときに利用されます。
たとえば、地図に観光地や店舗の情報を表示するサービスでは、地図の表示機能と、地域のデータを組み合わせている場合があります。
また、統計データを取得してグラフにしたり、地域の人口や産業の特徴を調べたりするプログラムでもAPIが活用されます。
APIを利用すると、次のような利点があります。
- 外部のデータを利用できる。
- すでに用意された機能を利用できる。
- 複数のサービスを組み合わせられる。
- プログラムで扱える情報の範囲を広げられる。
APIを利用するときの注意点
APIは便利ですが、利用するときには注意が必要です。
まず、APIには利用条件が定められていることがあります。
利用回数の制限、利用できるデータの範囲、商用利用の可否などを確認する必要があります。
また、APIを利用すると外部のサービスに接続するため、ネットワークの状態やサービスの停止によって、プログラムが正しく動作しないことがあります。
さらに、個人情報や位置情報などを扱う場合には、情報の取り扱いにも注意しなければなりません。
APIを使うときは、利用規約、データの扱い、セキュリティ、接続先の信頼性を確認することが大切です。
用語ミニ解説
| 用語 | 説明 |
|---|---|
| 乱数 | 一定の範囲内で、どの値も同じ確率で発生しているように扱える数。 |
| 疑似乱数 | コンピュータが計算によって作る、乱数に似た値。 |
| シミュレーション | 現実の現象や実験を、コンピュータ上で模擬的に再現すること。 |
| 関数 | ある処理をするための命令をまとめたもの。 |
| 引数 | 関数に渡す値。 |
| 戻り値 | 関数の処理結果として返される値。 |
| モジュール | あらかじめ用意された機能をまとめたもの。 |
| API | プログラムからソフトウェアやサービスを操作するためのインタフェース。 |
| WebAPI | Web上に公開され、外部から呼び出して利用できるAPI。 |
確認問題
問題1
乱数を使うと、どのような処理をプログラムで表現できますか。
解答例
実行するたびに結果が変わる処理や、偶然の要素を含む処理を表現できます。
たとえば、じゃんけんの手を決めたり、サイコロの目を発生させたりできます。
問題2
関数を使う利点を2つ答えなさい。
解答例
プログラムの構造が分かりやすくなります。
また、同じ処理を何度も書かずに再利用できます。
問題3
APIとは何ですか。
解答例
APIとは、プログラムからソフトウェアやサービスを操作するためのインタフェースです。
外部の機能やデータを利用するときに使われます。
問題4
WebAPIを利用するときに注意すべきことを1つ答えなさい。
解答例
利用規約や利用回数の制限を確認することです。
また、個人情報や位置情報などを扱う場合は、情報の取り扱いに注意する必要があります。
問題5
次のプログラムは、半径を入力し、円の面積を求めるプログラムです。空欄AからDに入る語句や式を答えなさい。
def menseki_en(r):
menseki = r * r * 3.14
return A
r = input('半径を入力してください。')
r = B(r)
kekka = C(r)
print('円の面積は', D, 'です。')
解答例
A menseki
B float
C menseki_en
D kekka
解説
return mensekiは、計算した円の面積を戻り値として返す処理です。
float(r)は、入力された文字列を数値に変換する処理です。
menseki_en(r)は、半径rを関数に渡して、円の面積を計算する処理です。
kekkaには、関数から返された面積が入っています。
まとめ
プログラムの応用では、乱数、関数、APIを利用することで、プログラムの活用範囲を広げることができます。
乱数を使うと、実行するたびに異なる値を発生させることができ、じゃんけんやサイコロのシミュレーションなどに利用できます。
関数を使うと、処理を機能ごとにまとめることができ、プログラムの構造を分かりやすくし、再利用しやすくできます。
APIを使うと、外部のプログラムやWebサービスと連携し、外部のデータや機能を利用できます。
乱数は偶然の要素を扱うため、関数は処理を整理して再利用するため、APIは外部の機能やデータを利用するための仕組みです。
情報Ⅰでは、これらを単なる操作方法として覚えるだけでなく、問題解決の目的に合わせて、どの仕組みをどのように使うかを考えることが大切です。