- 用意された関数を「使う」やり方(
len()max()sum()など) - はじめて見る関数を、説明を読んで使う練習(共通テスト形式)
- 乱数(
random)でサイコロやくじを作るやり方 - 自分で関数を作る
def(さわりだけ)
STEP 1道具を使う ― 組みこみ関数
print() や len() のように、Pythonにはじめから用意されている道具を組みこみ関数と呼びます。カッコに値を渡すと、仕事をして結果を返してくれます。配列と相性のよい道具を4つ覚えましょう。
| 書き方の例 | 結果 | 意味 |
|---|---|---|
len(tokuten) | 4 | 要素の個数 |
max(tokuten) | 95 | いちばん大きい値 |
min(tokuten) | 61 | いちばん小さい値 |
sum(tokuten) | 316 | 全部の合計 |
第5章で自分の手で書いた「合計」や「最大値さがし」が、関数なら1行で済むことを確かめましょう。
sum() と len() を組み合わせて、平均を表示する行を書き加えなさい。
解答例を見る(まず自分で書いてから開きましょう)
tokuten = [72, 95, 88, 61]
print('平均は', sum(tokuten) / len(tokuten), '点')
関数の結果どうしを、そのまま計算に使えるのがポイントです。
STEP 2説明を読んで使う ― 共通テスト形式
共通テストでは、見たことのない関数が突然登場します。ただし必ず問題文に説明の枠がついています。「説明を読んで、その通りに使う」——これ自体が試験で問われる力です。練習してみましょう。次の枠は、本物の試験の説明枠を再現したものです。
round(x, n):数値 x を、小数第 n 位までに四捨五入した値を返す(ちょうど半分のときは、学校で習う四捨五入と結果がちがうことがあります)。例:round(3.14159, 2) は 3.14 を返す。
上の説明だけを頼りに、実行結果を予想してから動かしましょう。
要素数(配列) と 最大値(x, y) が説明枠つきで登場した。知らない関数が出ても、それは全員が初めて見る関数だ。説明を落ち着いて読めた者は解ける!「知らない=解けない」ではないんだ。
次の説明を読んで使ってみましょう。【関数の説明】abs(x):数値 x の符号を取りのぞいた値(絶対値)を返す。例を参考に2人の身長差が表示される行を書き加えなさい。
abs(-5) は 5 を返す。解答例を見る(まず自分で書いてから開きましょう)
shincho_a = 165
shincho_b = 172
print('身長差は', abs(shincho_a - shincho_b), 'cm')
引き算の結果は −7 ですが、abs() が符号を取りのぞいて7にしてくれます。どちらから引いても正しく動くのがこの書き方の良いところです。
STEP 3偶然を作る ― 乱数
サイコロやくじ引きのような「毎回ちがう結果」は、乱数で作ります。最初に import random と1行書いて乱数という道具箱を持ってくると、random.randint(1, 6) で「1以上6以下の整数をランダムに1つ」つくります(rangeと違って、6も含まれます)。
何回か実行して、毎回ちがう目が出ることを確かめましょう。
例題 3
乱数と、これまで学んだforやifの合わせ技です。サイコロを5回ふって、6が出たら「あたり!」と表示します。
おみくじを作ります。kuji が1なら「大吉」、そうでなければ「吉」と表示されるように、乱数を作る行を書き加えなさい(1〜3の整数とします)。
解答例を見る(まず自分で書いてから開きましょう)
import random
kuji = random.randint(1, 3)
if kuji == 1:
print('今日の運勢は 大吉')
else:
print('今日の運勢は 吉')
何回か実行して、だいたい3回に1回くらい大吉が出ることも確かめてみてください。
STEP 4自分で道具を作る ― def(さわりだけ)
関数は自分で作ることもできます。def 名前(引数): で定義しておくと、あとから何度でも呼び出せます。共通テストで定義を書かされることはまずないので、ここは「こういう仕組みなんだ」と読めればOKです。
図1のプログラムです。呼び出しの行の引数を変えると、同じ道具がちがう仕事をすることを確かめましょう。
同じ関数をもう一度、ちがう引数で呼び出す行を書き加えて、2人分の自己紹介が表示されるようにしなさい(2人目の名前と相棒は自由です)。
解答例を見る(まず自分で書いてから開きましょう)
def shokai(namae, aibou):
print('ぼくは', namae, '。相棒は', aibou, 'だ')
shokai('アラン', 'ノイマン')
shokai('サクラ', 'アオイ')
定義は1回、呼び出しは何回でも。「同じ仕事をまとめて、名前をつけて使い回す」のが関数の心です。
エラー例 ― よくあるエラーを知ろう!
関数まわりの定番エラーを2つ。読み方はいつも通り、いちばん最後の行からです。
エラー例 1 import のし忘れ
乱数を使おうとしていますが、1行目がありません。
エラーの読み方を見る(実行してから開くこと)
NameError: name 'random' is not defined と出ます。第1章で見たNameError(その名前は知らない)です。道具箱を持ってくる import random を先頭に書けば直ります。
エラー例 2 関数名の打ちまちがい
要素数を調べる関数の名前が1文字ちがっています。
エラーの読み方を見る(実行してから開くこと)
NameError: name 'lenn' is not defined. Did you mean: 'len'? と出ます。Pythonが「len のまちがいでは?」と提案までしてくれています。エラーメッセージは最後まで読むとお得です。
演習問題
テストの得点の配列から、最高点と最低点の差を、組みこみ関数を使って表示するプログラムを完成させなさい。
解答例を見る(まず自分で書いてから開きましょう)
tokuten = [72, 95, 88, 61]
print('最高点と最低点の差は', max(tokuten) - min(tokuten), '点')
関数の結果どうしを引き算するだけです。ちなみにこの「差」は、データのばらつきを表す「範囲」と呼ばれる統計量で、第4問(データ分析)でもでてきます。
サイコロを2個ふって、それぞれの目と合計を表示するプログラムを完成させなさい。
解答例を見る(まず自分で書いてから開きましょう)
import random
me1 = random.randint(1, 6)
me2 = random.randint(1, 6)
print('1個目:', me1)
print('2個目:', me2)
print('合計:', me1 + me2)
randint を2回呼べば、独立した2個のサイコロになります。
サイコロを100回ふって、6が出た回数を数えるプログラムを自分で考えて作りなさい。第4章のfor、第3章のif、第5章のカウントパターンの総復習です。
解答例を見る(まず自分で書いてから開きましょう)
import random
kaisu = 0
for i in range(1, 101):
me = random.randint(1, 6)
if me == 6:
kaisu = kaisu + 1
print('100回中、6は', kaisu, '回出た')
理論上は約16.7回(6分の1)です。何度か実行して、そのあたりをうろうろすることを確かめてみてください。これが立派なシミュレーションです。
2個のサイコロを10回ふって、ゾロ目(2個とも同じ目)が出るたびに「ゾロ目!」と表示するプログラムを自分で考えて作りなさい。
解答例を見る(まず自分で書いてから開きましょう)
import random
for i in range(1, 11):
me1 = random.randint(1, 6)
me2 = random.randint(1, 6)
if me1 == me2:
print(me1, 'と', me2, 'ゾロ目!')
else:
print(me1, 'と', me2)
forの中で乱数を2つ作り、== で比べる——ここまでの章の道具が全部入った問題でした。これが書けたら、道具は全部そろいました。
自由実行スペース
思いついたことを自由に試すための場所です。サイコロを1万回ふって6の割合を調べたり、自分だけのおみくじを作ったり、これまでの全章の道具で遊んでみましょう。
要素数(Data) や 最大値(x, y) のように日本語の名前で登場し、必ず説明枠がつく。つまりこの章でやった「説明を読んで使う」が、そのまま本番の解き方だ。第1章からここまで——変数・演算・分岐・くり返し・配列・関数。試験に出る道具は、もう全部きみの手の中だ。