ゼロからのPython入門講座関数の定義 関数の定義

関数の定義ローカル変数とグローバル変数関数の呼び出し方

れんしゅうもんだい では、こんな計算問題をやってもらいました。

太郎くんは、一つ100円のももを5つ、一つ40円のみかんを8つ買いました。全部でいくらになったでしょう?

復習を兼ねて、この問題を改造してみましょう。ももを5つ、みかんを8つのように決まった数だけ買うのではなく、個数をキーボードから入力できるようにしてみます。キーボードから文字を入力するときは、input() 関数 を使います。

  1. キーボードから、購入するももの個数を入力します。
  2. キーボードから、購入するみかんの個数を入力します。
  3. ももを一つ100円、みかんを一つ40円として、合計金額を出力します。

この処理は次の手順で実行できます。

  1. まず、ももの個数をinput()関数で入力します。input()関数の戻り値は文字列ですので、そのままでは金額の計算ができません。int()を使って、整数に変換し、変数 num_momo に代入しておきます。
    int() の使い方を忘れてしまった方は、文字列の数値化 を参照してください。

  2. 同様に、input() でみかんの個数を入力し、 int() で整数に変換して変数 num_mikanに代入します。

  3. ももの個数とみかんの個数から合計金額を計算し、変数 total に代入します。

  4. 計算した結果を出力します。

この手順通りに、Pythonの処理を書いてみましょう。

In [22]:
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, "円です")
ももは何個買いますか? 10
みかんは何個買いますか? 20
もも 10 個と、みかん 20 個で、 1800 円です

独自に関数を作る

関数 では、Pythonに標準で用意されている関数の使い方を紹介しました。

例えば、abs() 関数 は、数値を引数 として指定すると、その絶対値を返す関数でした。次の例は、引数に -100 を指定して abs() を呼び出し、結果として -100 の絶対値 100 が返ってきています。

In [1]:
abs(-100)
Out[1]:
100

このような関数は、用意されたものを使うだけではなく、自分でも必要な関数を作れるようになっています。

ここでは、例として、上記の 3. の部分に相当する、「ももとみかんの個数から合計金額を計算する関数」を作ってみましょう。

ももとみかんの個数から合計金額を計算する関数」は、ももとみかんの数を 引数 として指定すると、合計金額を計算して返します。関数の名前は、fruit_price としましょう。

例えば、ももを10個、みかんを20個買うときには、ももの数とみかんの数をそれぞれ指定して

fruit_price(10, 20)

と書くようにしましょう。fruit_price(10, 20) の結果は、もも10個とみかん20個の値段ですから、10*100 + 20*401800 になります。

関数の定義

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_momonumber_of_mikan として参照できます。たとえば、ももを30個、みかんを40個の値段を計算するときは、この関数を

fruit_price(30, 40)

のように指定します。このとき、変数 number_of_momo の値は 30number_of_mikan の値は 40 となります。

これを利用して、まず fruit_price()ももの個数 * ももの値段 を計算する処理を書いてみましょう。

In [2]:
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 に代入しています。

In [3]:
def fruit_price(number_of_momo, number_of_mikan):
    total_momo = number_of_momo * 100
    total_mikan = number_of_mikan * 40    

最後に、計算したももの金額とみかんの金額を加算して、合計金額を求めましょう。合計金額は、変数 total に代入します。

In [5]:
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 に代入しています。

関数の戻り値

ここまでで、必要な計算は全て行いました。実際に関数を呼び出してみましょう。

In [7]:
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() を呼び出したときは、その結果が表示されていました。

In [9]:
abs(200)
Out[9]:
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) が完成しました。つぎのようにして、呼び出してみましょう。

In [3]:
# 関数の定義

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, "円です")
もも 5個と、みかん 10個で、 900 円です

変数とおなじように、定義した関数は別のセルでも利用できます。別の条件で fruit_price() を呼び出してみましょう。

In [24]:
# もも100個、みかん200個の値段を計算
total = fruit_price(100, 200)
print("もも 100個と、みかん 200個で、", total, "円です")
もも 100個と、みかん 200個で、 18000 円です
Copyright © 2001-2023 python.jp Privacy Policy python_japan
Amazon.co.jpアソシエイト
Amazonで他のPython書籍を検索