れんしゅうもんだい では、こんな計算問題をやってもらいました。
復習を兼ねて、この問題を改造してみましょう。ももを5つ、みかんを8つのように決まった数だけ買うのではなく、個数をキーボードから入力できるようにしてみます。キーボードから文字を入力するときは、input() 関数 を使います。
- キーボードから、購入するももの個数を入力します。
- キーボードから、購入するみかんの個数を入力します。
- ももを一つ100円、みかんを一つ40円として、合計金額を出力します。
この処理は次の手順で実行できます。
まず、ももの個数を
input()関数で入力します。input()関数の戻り値は文字列ですので、そのままでは金額の計算ができません。int()を使って、整数に変換し、変数num_momoに代入しておきます。
int()の使い方を忘れてしまった方は、文字列の数値化 を参照してください。同様に、
input()でみかんの個数を入力し、int()で整数に変換して変数num_mikanに代入します。ももの個数とみかんの個数から合計金額を計算し、変数
totalに代入します。計算した結果を出力します。
この手順通りに、Pythonの処理を書いてみましょう。
momo = input("ももは何個買いますか?") # ももの個数を入力する
num_momo = int(momo) # 入力した文字列を、整数値に変換する
mikan = input("みかんは何個買いますか?") # みかんの個数を入力する
num_mikan = int(mikan) # 入力した文字列を、整数値に変換する
total_momo = num_momo * 100
total_mikan = num_mikan * 40
total = total_momo + total_mikan
print("もも", num_momo, "個と、みかん", num_mikan, "個で、", total, "円です")
abs(-100)
このような関数は、用意されたものを使うだけではなく、自分でも必要な関数を作れるようになっています。
ここでは、例として、上記の 3. の部分に相当する、「ももとみかんの個数から合計金額を計算する関数」を作ってみましょう。
「ももとみかんの個数から合計金額を計算する関数」は、ももとみかんの数を 引数 として指定すると、合計金額を計算して返します。関数の名前は、fruit_price としましょう。
例えば、ももを10個、みかんを20個買うときには、ももの数とみかんの数をそれぞれ指定して
fruit_price(10, 20)
と書くようにしましょう。fruit_price(10, 20) の結果は、もも10個とみかん20個の値段ですから、10*100 + 20*40 で 1800 になります。
関数の定義¶
fruit_price() のような関数を作ることを、プログラミング用語ではよく「関数を 定義する」といいます。
関数の定義は、次の形式で記述します。
def 関数名(引数名1, 引数名2, ...):
処理1
処理2
...
関数定義は def 関数名(引数名1, 引数名2, ...): という行ではじまります。def という単語は、英語の define (定義) の略です。
関数名 には関数の名前を指定します。ここで作る関数の名前は、関数の名前は、fruit_price でしたね。
引数名1、引数名2、... には、関数に指定する引数の名前を指定します。
この関数には、引数として もも と みかん の数を指定しますから、ももの数は number_of_momo、みかんの数は number_of_mikan という名前にしましょう。
この関数の最初の一行は、次のようになります。
def fruit_price(number_of_momo, number_of_mikan):
...
関数本体¶
def 文に続いて、関数が呼び出されたときに実行する処理を記述します。この処理は、行の先頭にスペース4文字で インデント して記述します。
def 関数名(引数名1, 引数名2, ...):
処理
^^^^
スペースを4文字入力
関数の処理として、ももとみかんの値段を計算する処理を書きましょう。
引数として指定されたももの数と、みかんの数は、それぞれ変数 number_of_momo と number_of_mikan として参照できます。たとえば、ももを30個、みかんを40個の値段を計算するときは、この関数を
fruit_price(30, 40)
のように指定します。このとき、変数 number_of_momo の値は 30、number_of_mikan の値は 40 となります。
これを利用して、まず fruit_price() に ももの個数 * ももの値段 を計算する処理を書いてみましょう。
def fruit_price(number_of_momo, number_of_mikan):
total_momo = number_of_momo * 100
number_of_momo がももの個数ですから、ももの個数 * ももの値段 は number_of_momo * 100 となります。その結果を、変数 total_momo に代入しています。
同様に、引数として指定されたみかんの個数 number_of_mikan を使って、みかんの個数 * みかんの値段 を計算する処理を追加しましょう。結果は、変数 total_mikan に代入しています。
def fruit_price(number_of_momo, number_of_mikan):
total_momo = number_of_momo * 100
total_mikan = number_of_mikan * 40
最後に、計算したももの金額とみかんの金額を加算して、合計金額を求めましょう。合計金額は、変数 total に代入します。
def fruit_price(number_of_momo, number_of_mikan):
total_momo = number_of_momo * 100
total_mikan = number_of_mikan * 40
total = total_momo + total_mikan
関数の中で、ももの個数 * ももの値段 と みかんの個数 * みかんの値段 を計算し、その和を変数 total に代入しています。
関数の戻り値¶
ここまでで、必要な計算は全て行いました。実際に関数を呼び出してみましょう。
def fruit_price(number_of_momo, number_of_mikan):
total_momo = number_of_momo * 100
total_mikan = number_of_mikan * 40
total = total_momo + total_mikan
fruit_price(10, 20)
関数 fruit_price(10, 20) を呼び出して、計算は正常に行われましたが、結果がなにも表示されませんね。abs() を呼び出したときは、その結果が表示されていました。
abs(200)
fruit_price() で値段を計算した結果は、変数 total に代入されています。これで値段の計算はできましたが、このままではせっかく計算した値段はそのまま捨てられてしまいます。
abs() のように、関数で計算した結果を返すには、return 文を使って、結果となる値を指定します。
return文¶
関数を実行し、結果として返す値のことを、戻り値 や 返り値 などと呼びます。
関数の戻り値は、return 文で指定します。次の例では、計算したももとみかんの値段である変数 total を戻り値として、return 文に指定しています。
def fruit_price(number_of_momo, number_of_mikan):
# ももとみかんの合計金額を計算する
total_momo = number_of_momo * 100
total_mikan = number_of_mikan * 40
total = total_momo + total_mikan
return total
return 文は、次の形式で記述します。
return 値
return 文を実行すると、指定した 値 を関数の戻り値に設定して、関数の実行を終了します。return 文より後ろの処理は、実行されません。
関数の呼び出し¶
これで関数 fruit_price(number_of_momo, number_of_mikan) が完成しました。つぎのようにして、呼び出してみましょう。
# 関数の定義
def fruit_price(number_of_momo, number_of_mikan):
# ももとみかんの合計金額を計算する
total_momo = number_of_momo * 100
total_mikan = number_of_mikan * 40
total = total_momo + total_mikan
return total
# もも5個、みかん10個の値段を計算
total = fruit_price(5, 10)
print("もも 5個と、みかん 10個で、", total, "円です")
変数とおなじように、定義した関数は別のセルでも利用できます。別の条件で fruit_price() を呼び出してみましょう。
# もも100個、みかん200個の値段を計算
total = fruit_price(100, 200)
print("もも 100個と、みかん 200個で、", total, "円です")