ステップ16:関数の基礎

🔧 ステップ16: 関数の基礎

コードを部品化して、何度も使えるようにしよう!

今までのプログラムでは、同じような処理を何度も書いていました。関数を使うと、処理をまとめて名前を付け、何度でも呼び出して使えるようになります。

📖 このステップで学ぶこと

・関数とは何か、なぜ必要か

・関数の定義(def)の方法

・引数で関数に値を渡す方法

・戻り値(return)で関数から値を返す方法

・関数の呼び出し方

・関数の中で関数を呼ぶ方法

🎯 1. 関数って何?

まず、関数がなぜ必要なのかを理解しましょう。

🔰 同じ処理を何度も書く問題

例えば、「2つの数の合計を計算して表示」という処理を3回やりたい場合を考えてみましょう。

コード:関数を使わない場合

※スマートフォンでは横スクロールできます

# 1回目の計算
a = 10
b = 20
print(f"合計: {a + b}")

# 2回目の計算
c = 30
d = 40
print(f"合計: {c + d}")

# 3回目の計算
e = 50
f = 60
print(f"合計: {e + f}")

実行結果

合計: 30
合計: 70
合計: 110

同じような処理を3回書いています。これには問題があります。

⚠️ 同じ処理を何度も書く問題点

・コードが長くなる

・書くのが大変

・間違いが起きやすい

・修正する時、全ての箇所を直す必要がある

🔰 関数を使うと…

関数を使うと、処理を「部品」にまとめて、何度でも使い回せます。

コード:関数を使う場合

※スマートフォンでは横スクロールできます

# 関数を定義(処理をまとめる)
def add_and_print(a, b):
    print(f"合計: {a + b}")

# 関数を3回呼び出すだけ
add_and_print(10, 20)
add_and_print(30, 40)
add_and_print(50, 60)

実行結果

合計: 30
合計: 70
合計: 110

結果は同じですが、コードがスッキリしました!

📌 関数のイメージ

関数は「処理をまとめて名前を付けたもの」です。

料理で例えると、「レシピ」のようなものです。

・レシピを一度書いておけば、何度でも同じ料理が作れる

・材料(引数)を変えれば、違う味の料理ができる

・レシピを修正すれば、全ての料理に反映される

🔰 関数のメリット

💡 関数を使うメリット

1. 同じ処理を何度も書かなくていい

 → コードが短くなる

2. コードが読みやすくなる

 → 関数名を見れば何をするか分かる

3. 修正が簡単

 → 関数の中身を1箇所直せばOK

4. 他のプログラムでも使い回せる

 → 一度作った関数は再利用できる

📝 2. 関数の基本的な定義

📘 関数の書き方

📝 関数の基本構文

def 関数名():

  実行する処理

def:「define(定義する)」の略。関数を定義する時に使う

関数名:関数に付ける名前(自由に決められる)

():引数を入れる場所(今は空でOK)

::コロンで終わる(if文やfor文と同じ)

インデント:処理は字下げして書く

📝 最もシンプルな関数

まずは、引数も戻り値もない、一番シンプルな関数を作ってみましょう。

完成コード:挨拶する関数

※スマートフォンでは横スクロールできます

# def greet(): で greet という名前の関数を定義
# 関数の中身は2つのprint文
def greet():
    print("こんにちは!")
    print("今日もいい天気ですね")

# 関数を呼び出す(実行する)
# 関数名() と書くだけで実行できる
greet()

実行結果

こんにちは!
今日もいい天気ですね

💡 関数の「定義」と「呼び出し」

定義def 関数名():で関数を作る(レシピを書く)

呼び出し関数名()で関数を実行する(レシピ通りに作る)

定義しただけでは関数は実行されません。呼び出して初めて動きます。

📝 関数を何度も呼び出す

一度定義した関数は、何度でも呼び出せます。

完成コード:3回挨拶する

※スマートフォンでは横スクロールできます

# 関数を定義
def say_hello():
    print("Hello, World!")

# 同じ関数を3回呼び出す
say_hello()
say_hello()
say_hello()

実行結果

Hello, World!
Hello, World!
Hello, World!

📝 関数名の付け方

📌 良い関数名のルール

1. 何をするか分かる名前を付ける

 ✗ func1test → 何をするか分からない

 ○ calculate_areaget_max → 分かりやすい

2. 動詞で始めると分かりやすい

 例:calculate_(計算する)、get_(取得する)、print_(表示する)

3. 小文字とアンダースコアを使う

 例:calculate_areaget_max_value

📝 複数行の処理をまとめる

関数の中には、複数行の処理を書けます。

完成コード:自己紹介する関数

※スマートフォンでは横スクロールできます

# 自己紹介を表示する関数
def introduce():
    print("========")
    print("私の名前は太郎です")
    print("Pythonを勉強中です")
    print("よろしくお願いします")
    print("========")

# 関数を呼び出す
introduce()

実行結果

========
私の名前は太郎です
Pythonを勉強中です
よろしくお願いします
========

🔑 重要!関数は定義してから呼び出す

関数は、定義(def)したでしか呼び出せません。

定義する前に呼び出すとエラーになります。

※スマートフォンでは横スクロールできます

# ❌ エラーになる例
say_hello()  # まだ定義されていない!

def say_hello():
    print("Hello!")

エラーメッセージ

NameError: name 'say_hello' is not defined

「say_helloは定義されていません」というエラーです。

📥 3. 引数 – 関数に値を渡す

引数(ひきすう)を使うと、関数に値を渡せます。同じ処理でも、違うデータで実行できるようになります。

🔰 引数とは?

先ほどの挨拶関数は、いつも同じ内容を表示していました。でも、名前を変えて挨拶したい時はどうすればいいでしょうか?

そこで使うのが引数です。引数は「関数に渡す値」のことです。

📌 引数のイメージ

料理で例えると:

・関数 = レシピ

・引数 = 材料

同じレシピでも、材料(引数)を変えれば違う料理ができます。

「カレー」のレシピで、材料を「ビーフ」にすればビーフカレー、「チキン」にすればチキンカレーができます。

📘 引数の書き方

📝 引数付き関数の構文

def 関数名(引数名):

  引数を使った処理

引数名:関数の中で使う変数の名前

・呼び出す時に値を渡す

📝 1つの引数を使う

名前を受け取って挨拶する関数を作ってみましょう。

完成コード:名前を受け取って挨拶

※スマートフォンでは横スクロールできます

# def greet(name): の name が引数
# 関数の中で name という名前で値を使える
def greet(name):
    print(f"こんにちは、{name}さん!")

# 関数を呼び出す時に値を渡す
greet("太郎")    # name に "太郎" が入る
greet("花子")    # name に "花子" が入る
greet("次郎")    # name に "次郎" が入る

実行結果

こんにちは、太郎さん!
こんにちは、花子さん!
こんにちは、次郎さん!

💡 処理の流れ

1. greet("太郎")を呼び出す

2. 関数の引数name"太郎"が入る

3. 関数の中でnameを使って処理する

4. "こんにちは、太郎さん!"と表示される

📝 複数の引数を使う

引数は複数指定できます。カンマ(,)で区切ります。

完成コード:2つの数を足す関数

※スマートフォンでは横スクロールできます

# def add(a, b): の a と b が引数
# 複数の引数はカンマで区切る
def add(a, b):
    result = a + b
    print(f"{a} + {b} = {result}")

# 呼び出す時も値をカンマで区切って渡す
add(10, 20)   # a=10, b=20
add(5, 8)     # a=5, b=8
add(100, 200) # a=100, b=200

実行結果

10 + 20 = 30
5 + 8 = 13
100 + 200 = 300

📝 引数を使った計算

長方形の面積を計算する関数を作ってみましょう。

完成コード:長方形の面積を計算

※スマートフォンでは横スクロールできます

# width(幅)と height(高さ)を受け取る
def calculate_area(width, height):
    # 面積を計算
    area = width * height
    print(f"幅{width} × 高さ{height} = 面積{area}")

# いろいろなサイズで計算
calculate_area(5, 10)
calculate_area(3, 7)
calculate_area(100, 50)

実行結果

幅5 × 高さ10 = 面積50
幅3 × 高さ7 = 面積21
幅100 × 高さ50 = 面積5000

📝 3つ以上の引数

引数はいくつでも指定できます。

完成コード:自己紹介関数(3つの引数)

※スマートフォンでは横スクロールできます

# 名前、年齢、趣味の3つを受け取る
def introduce(name, age, hobby):
    print(f"私は{name}です")
    print(f"{age}歳です")
    print(f"趣味は{hobby}です")
    print("---")

# 3つの値を渡して呼び出す
introduce("太郎", 15, "サッカー")
introduce("花子", 14, "読書")

実行結果

私は太郎です
15歳です
趣味はサッカーです
---
私は花子です
14歳です
趣味は読書です
---

📌 引数の順番に注意

引数は定義した順番で渡す必要があります。

定義 呼び出し 結果
def func(a, b, c) func(1, 2, 3) a=1, b=2, c=3
def func(a, b, c) func(3, 1, 2) a=3, b=1, c=2

📝 変数を引数として渡す

引数には直接値を書くだけでなく、変数を渡すこともできます。

完成コード:変数を引数として渡す

※スマートフォンでは横スクロールできます

def greet(name):
    print(f"こんにちは、{name}さん!")

# 変数に値を入れておく
user_name = "太郎"

# 変数を引数として渡す
greet(user_name)

# inputで受け取った値も渡せる
input_name = input("名前を入力: ")
greet(input_name)

実行結果

こんにちは、太郎さん!
名前を入力: 花子
こんにちは、花子さん!

📌 引数のまとめ

・引数は「関数に渡す値」

def 関数名(引数1, 引数2, ...):で定義

・呼び出す時に値を渡す

・引数は定義した順番で渡す

・変数も引数として渡せる

📤 4. 戻り値 – 関数から値を返す

戻り値(もどりち)を使うと、関数の処理結果を呼び出し元に返せます。returnを使います。

🔰 戻り値とは?

今までの関数は、処理結果をprintで表示していました。でも、計算結果を使ってさらに計算したい場合はどうすればいいでしょうか?

そこで使うのが戻り値です。戻り値は「関数から返ってくる値」のことです。

📌 戻り値のイメージ

料理で例えると:

・関数 = レシピ

・引数 = 材料

・戻り値 = 完成した料理

レシピ(関数)に材料(引数)を渡すと、完成した料理(戻り値)が返ってきます。

📘 戻り値の書き方

📝 戻り値付き関数の構文

def 関数名(引数):

  処理

  return 戻り値

return:値を返す命令

・returnの後ろに返したい値を書く

・returnが実行されると関数が終了する

📝 基本的な戻り値

2つの数を足して、その結果を返す関数を作ってみましょう。

完成コード:足し算の結果を返す

※スマートフォンでは横スクロールできます

# return で計算結果を返す
def add(a, b):
    result = a + b
    return result  # resultの値を返す

# 関数の戻り値を変数に入れる
answer = add(10, 20)  # add関数が30を返す → answerに30が入る
print(f"答え: {answer}")

実行結果

答え: 30

💡 処理の流れ

1. add(10, 20)を呼び出す

2. 関数の中で10 + 20 = 30を計算

3. return result30を返す

4. 戻り値の30answerに入る

📝 戻り値を直接使う

戻り値は変数に入れなくても、直接使えます。

完成コード:戻り値を直接print

※スマートフォンでは横スクロールできます

def multiply(a, b):
    return a * b  # 計算結果をそのまま返す

# 戻り値を直接printに渡す
print(multiply(5, 6))  # 30
print(multiply(3, 8))  # 24

# 計算に使うこともできる
total = multiply(5, 6) + multiply(3, 8)
print(f"合計: {total}")  # 30 + 24 = 54

実行結果

30
24
合計: 54

📝 printとreturnの違い

printとreturnは似ているようで、全く違います。

📌 printとreturnの違い

比較項目 print return
役割 画面に表示する 値を返す
値を使えるか 使えない(Noneになる) 使える
関数の終了 終了しない 終了する

コード:printとreturnの違いを確認

※スマートフォンでは横スクロールできます

# printを使う関数
def add_print(a, b):
    print(a + b)  # 画面に表示するだけ

# returnを使う関数
def add_return(a, b):
    return a + b  # 値を返す

# printの場合
result1 = add_print(10, 20)  # 画面に30と表示される
print(f"result1の中身: {result1}")  # Noneになる

print("---")

# returnの場合
result2 = add_return(10, 20)  # 何も表示されない
print(f"result2の中身: {result2}")  # 30が入っている

実行結果

30
result1の中身: None
---
result2の中身: 30

🔑 重要!結果を使い回したいならreturn

関数の結果を他の計算に使いたい時は、returnを使いましょう。

printは画面に表示するだけで、値は返しません(Noneになります)。

📝 戻り値を使った計算

関数の戻り値を使って、さらに計算してみましょう。

完成コード:2乗の合計を計算

※スマートフォンでは横スクロールできます

# 数を2乗して返す関数
def square(x):
    return x * x

# 戻り値を使ってさらに計算
a = square(5)   # 5の2乗 = 25
b = square(3)   # 3の2乗 = 9
total = a + b   # 25 + 9 = 34

print(f"5の2乗: {a}")
print(f"3の2乗: {b}")
print(f"合計: {total}")

実行結果

5の2乗: 25
3の2乗: 9
合計: 34

📝 複数の値を返す

関数から複数の値を返すこともできます。

完成コード:足し算と引き算を両方返す

※スマートフォンでは横スクロールできます

# 足し算と引き算の両方を計算して返す
def calculate(a, b):
    add_result = a + b
    sub_result = a - b
    return add_result, sub_result  # カンマで区切って複数の値を返す

# 2つの戻り値を受け取る
plus, minus = calculate(10, 3)  # plus=13, minus=7

print(f"足し算: {plus}")
print(f"引き算: {minus}")

実行結果

足し算: 13
引き算: 7

💡 複数の戻り値の受け取り方

返す側:return 値1, 値2(カンマで区切る)

受け取る側:変数1, 変数2 = 関数()(同じ数の変数で受け取る)

📝 returnで関数を終了する

returnが実行されると、その時点で関数が終了します。returnより後のコードは実行されません。

完成コード:returnで関数を終了

※スマートフォンでは横スクロールできます

def check_age(age):
    if age < 0:
        return "エラー: 年齢は0以上にしてください"  # ここで関数終了
    
    if age < 18:
        return "未成年です"  # ここで関数終了
    
    return "成人です"  # 上の条件に当てはまらなかった場合

print(check_age(-5))
print(check_age(15))
print(check_age(20))

実行結果

エラー: 年齢は0以上にしてください
未成年です
成人です

📌 戻り値のまとめ

・戻り値は「関数から返ってくる値」

return 値で値を返す

・戻り値は変数に入れたり、直接使ったりできる

・printは画面に表示、returnは値を返す(違いに注意!)

return 値1, 値2で複数の値を返せる

・returnが実行されると関数が終了する

🎯 5. 実践的な関数の例

ここまで学んだ引数と戻り値を使って、実用的な関数を作ってみましょう。

例1: 最大値を返す関数

2つの数のうち、大きい方を返す関数を作ってみましょう。

完成コード:最大値を返す関数

※スマートフォンでは横スクロールできます

# 2つの数のうち大きい方を返す
def get_max(a, b):
    if a > b:
        return a  # aの方が大きい場合
    else:
        return b  # bの方が大きい(または同じ)場合

# テスト
print(get_max(10, 5))   # 10
print(get_max(3, 8))    # 8
print(get_max(7, 7))    # 7

実行結果

10
8
7

💡 Pythonには組み込みの max() 関数がある

実は、Pythonには最大値を求めるmax()関数が最初から用意されています。

max(10, 5)と書くだけで10が返ります。

ただし、仕組みを理解するために自分で作ることも大切です!

例2: 偶数・奇数判定関数

数が偶数かどうかをTrue/Falseで返す関数を作ってみましょう。

完成コード:偶数判定関数

※スマートフォンでは横スクロールできます

# 偶数ならTrue、奇数ならFalseを返す
def is_even(number):
    if number % 2 == 0:
        return True
    else:
        return False

# テスト
print(f"4は偶数? {is_even(4)}")   # True
print(f"7は偶数? {is_even(7)}")   # False
print(f"0は偶数? {is_even(0)}")   # True

実行結果

4は偶数? True
7は偶数? False
0は偶数? True

💡 もっと短く書ける

number % 2 == 0自体がTrue/Falseを返すので、以下のように書けます。

※スマートフォンでは横スクロールできます

# 簡潔版
def is_even(number):
    return number % 2 == 0

例3: 温度変換関数

摂氏温度を華氏温度に変換する関数を作ってみましょう。

完成コード:摂氏→華氏変換関数

※スマートフォンでは横スクロールできます

# 摂氏を華氏に変換する
# 変換式: 華氏 = 摂氏 × 1.8 + 32
def celsius_to_fahrenheit(celsius):
    fahrenheit = celsius * 1.8 + 32
    return fahrenheit

# テスト
print(f"0℃ = {celsius_to_fahrenheit(0)}℉")
print(f"20℃ = {celsius_to_fahrenheit(20)}℉")
print(f"100℃ = {celsius_to_fahrenheit(100)}℉")

実行結果

0℃ = 32.0℉
20℃ = 68.0℉
100℃ = 212.0℉

例4: 合否判定関数

点数を受け取り、60点以上なら「合格」、未満なら「不合格」を返す関数を作ってみましょう。

完成コード:合否判定関数

※スマートフォンでは横スクロールできます

# 点数を受け取り、合否を返す
def judge_pass(score):
    if score >= 60:
        return "合格"
    else:
        return "不合格"

# テスト
scores = [75, 45, 88, 55, 60]

for score in scores:
    result = judge_pass(score)
    print(f"{score}点: {result}")

実行結果

75点: 合格
45点: 不合格
88点: 合格
55点: 不合格
60点: 合格

例5: 挨拶を作る関数

名前と年齢を受け取り、挨拶文を作って返す関数を作ってみましょう。

完成コード:挨拶文を作る関数

※スマートフォンでは横スクロールできます

# 名前と年齢から挨拶文を作る
def create_greeting(name, age):
    greeting = f"私は{name}です。{age}歳です。"
    return greeting

# 戻り値を変数に入れる
message1 = create_greeting("太郎", 15)
message2 = create_greeting("花子", 14)

print(message1)
print(message2)

# 戻り値を直接使う
print(create_greeting("次郎", 16))

実行結果

私は太郎です。15歳です。
私は花子です。14歳です。
私は次郎です。16歳です。

例6: リストの合計を計算する関数

数値のリストを受け取り、合計を返す関数を作ってみましょう。

完成コード:リストの合計を計算

※スマートフォンでは横スクロールできます

# リストの合計を計算する
def sum_list(numbers):
    total = 0
    for num in numbers:
        total += num
    return total

# テスト
list1 = [1, 2, 3, 4, 5]
list2 = [10, 20, 30]

print(f"リスト1の合計: {sum_list(list1)}")
print(f"リスト2の合計: {sum_list(list2)}")

実行結果

リスト1の合計: 15
リスト2の合計: 60

🔗 6. 関数の中で関数を呼ぶ

関数の中から、別の関数を呼び出すこともできます。

📝 基本的な例

完成コード:関数の中で関数を呼ぶ

※スマートフォンでは横スクロールできます

# 数を2倍にする関数
def double(x):
    return x * 2

# 数を4倍にする関数(doubleを2回使う)
def quadruple(x):
    result = double(double(x))  # 2倍の2倍 = 4倍
    return result

# テスト
print(quadruple(5))   # 5 → 10 → 20
print(quadruple(3))   # 3 → 6 → 12

実行結果

20
12

💡 処理の流れ(quadruple(5)の場合)

1. quadruple(5)を呼び出す

2. double(5)を呼び出す → 10が返る

3. double(10)を呼び出す → 20が返る

4. quadrupleが20を返す

📝 複雑な計算を分ける

2つの数の2乗の合計を計算する関数を作ってみましょう。

完成コード:2乗の合計

※スマートフォンでは横スクロールできます

# 数を2乗する関数
def square(x):
    return x * x

# 2つの数の2乗の合計を計算する関数
def sum_of_squares(a, b):
    return square(a) + square(b)

# テスト
print(sum_of_squares(3, 4))   # 3² + 4² = 9 + 16 = 25
print(sum_of_squares(5, 12))  # 5² + 12² = 25 + 144 = 169

実行結果

25
169

📌 関数を分けるメリット

・小さな部品(関数)に分けると、コードが分かりやすい

・各関数を個別にテストできる

・同じ部品を他の場所でも使い回せる

・バグを見つけやすい

📝 実用例:成績処理

複数の関数を組み合わせて、成績処理システムを作ってみましょう。

完成コード:成績処理システム

※スマートフォンでは横スクロールできます

# 平均点を計算する関数
def calculate_average(scores):
    total = sum(scores)
    return total / len(scores)

# 合否を判定する関数
def judge_pass(score):
    if score >= 60:
        return "合格"
    else:
        return "不合格"

# 成績を評価する関数(上の2つの関数を使う)
def evaluate_student(name, scores):
    avg = calculate_average(scores)
    result = judge_pass(avg)
    return f"{name}さん: 平均{avg:.1f}点 → {result}"

# テスト
print(evaluate_student("太郎", [80, 75, 90]))
print(evaluate_student("花子", [50, 55, 45]))
print(evaluate_student("次郎", [60, 65, 55]))

実行結果

太郎さん: 平均81.7点 → 合格
花子さん: 平均50.0点 → 不合格
次郎さん: 平均60.0点 → 合格

📝 練習問題(12問)

ここまで学んだことを実際に手を動かして確認しましょう。

問題1:名前を表示する関数(初級)

📋 問題

名前を引数に取り、「私の名前は〇〇です」と表示する関数を作りましょう。

解答を見る

コード

※スマートフォンでは横スクロールできます

# name を引数に取る関数
def print_name(name):
    print(f"私の名前は{name}です")

# 関数を呼び出す
print_name("太郎")
print_name("花子")

実行結果

私の名前は太郎です
私の名前は花子です

問題2:2つの数の合計を返す(初級)

📋 問題

2つの数を引数に取り、その合計を返す関数を作りましょう。

解答を見る

コード

※スマートフォンでは横スクロールできます

# 2つの引数 a, b を取り、合計を返す
def add(a, b):
    return a + b

# 戻り値を変数に入れて表示
result = add(10, 20)
print(result)

実行結果

30

問題3:3回挨拶する関数(初級)

📋 問題

「こんにちは!」を3回表示する関数を作りましょう。

解答を見る

コード

※スマートフォンでは横スクロールできます

# 3回挨拶する関数
def greet_three_times():
    for i in range(3):
        print("こんにちは!")

# 関数を呼び出す
greet_three_times()

実行結果

こんにちは!
こんにちは!
こんにちは!

問題4:数を2倍にする関数(初級)

📋 問題

数を引数に取り、その2倍の値を返す関数を作りましょう。

解答を見る

コード

※スマートフォンでは横スクロールできます

# 数を2倍にして返す関数
def double(x):
    return x * 2

# テスト
print(double(5))
print(double(10))

実行結果

10
20

問題5:長方形の面積(中級)

📋 問題

幅と高さを引数に取り、長方形の面積を返す関数を作りましょう。

解答を見る

コード

※スマートフォンでは横スクロールできます

# 幅と高さから面積を計算して返す
def rectangle_area(width, height):
    return width * height

# テスト
area = rectangle_area(5, 10)
print(f"面積: {area}")

実行結果

面積: 50

問題6:3つの数の最大値(中級)

📋 問題

3つの数を引数に取り、最大値を返す関数を作りましょう。

解答を見る

コード

※スマートフォンでは横スクロールできます

# 3つの数の最大値を返す
def max_of_three(a, b, c):
    if a >= b and a >= c:
        return a
    elif b >= a and b >= c:
        return b
    else:
        return c

# テスト
print(max_of_three(5, 10, 3))

実行結果

10

💡 別解(max関数を使用)

※スマートフォンでは横スクロールできます

def max_of_three(a, b, c):
    return max(a, b, c)

問題7:合格判定関数(中級)

📋 問題

点数を引数に取り、60点以上なら「合格」、未満なら「不合格」を返す関数を作りましょう。

解答を見る

コード

※スマートフォンでは横スクロールできます

# 合否を判定する関数
def judge(score):
    if score >= 60:
        return "合格"
    else:
        return "不合格"

# テスト
print(judge(75))
print(judge(45))

実行結果

合格
不合格

問題8:絶対値を返す関数(中級)

📋 問題

数を引数に取り、その絶対値を返す関数を作りましょう。

解答を見る

コード

※スマートフォンでは横スクロールできます

# 絶対値を返す関数
def absolute(x):
    if x < 0:
        return -x  # 負の数なら符号を反転
    else:
        return x   # 正の数ならそのまま

# テスト
print(absolute(-5))
print(absolute(10))

実行結果

5
10

問題9:リストの平均(中級)

📋 問題

数値のリストを引数に取り、平均値を返す関数を作りましょう。

解答を見る

コード

※スマートフォンでは横スクロールできます

# リストの平均を計算する関数
def average(numbers):
    total = sum(numbers)
    return total / len(numbers)

# テスト
scores = [80, 75, 90, 85]
avg = average(scores)
print(f"平均点: {avg}")

実行結果

平均点: 82.5

問題10:円の面積と円周(上級)

📋 問題

半径を引数に取り、円の面積と円周を返す関数を作りましょう。(円周率は3.14)

解答を見る

コード

※スマートフォンでは横スクロールできます

# 円の面積と円周を返す関数(複数の戻り値)
def circle_info(radius):
    pi = 3.14
    area = pi * radius ** 2          # 面積 = π × r²
    circumference = 2 * pi * radius  # 円周 = 2 × π × r
    return area, circumference

# 2つの戻り値を受け取る
area, circum = circle_info(5)
print(f"面積: {area}")
print(f"円周: {circum}")

実行結果

面積: 78.5
円周: 31.400000000000002

問題11:階乗を計算する関数(上級)

📋 問題

数nを引数に取り、n!(階乗)を返す関数を作りましょう。

例: 5! = 5 × 4 × 3 × 2 × 1 = 120

解答を見る

コード

※スマートフォンでは横スクロールできます

# 階乗を計算する関数
def factorial(n):
    result = 1
    for i in range(1, n + 1):
        result *= i  # resultにiを掛ける
    return result

# テスト
print(f"5! = {factorial(5)}")
print(f"3! = {factorial(3)}")

実行結果

5! = 120
3! = 6

問題12:素数判定関数(上級)

📋 問題

数を引数に取り、素数ならTrue、そうでなければFalseを返す関数を作りましょう。

解答を見る

コード

※スマートフォンでは横スクロールできます

# 素数かどうか判定する関数
def is_prime(n):
    # 2未満は素数ではない
    if n < 2:
        return False
    
    # 2からn-1までの数で割り切れるか調べる
    for i in range(2, n):
        if n % i == 0:
            return False  # 割り切れたら素数ではない
    
    return True  # 割り切れなかったら素数

# テスト
print(f"7は素数? {is_prime(7)}")
print(f"10は素数? {is_prime(10)}")
print(f"2は素数? {is_prime(2)}")

実行結果

7は素数? True
10は素数? False
2は素数? True

❓ よくある質問

Q1: 関数名はどう付ければいい?

動詞を使って、何をする関数か分かる名前を付けましょう。

例:calculate_area(面積を計算)、get_max(最大値を取得)

小文字とアンダースコア(_)を使うのが一般的です。

Q2: printとreturnはどう使い分ける?

print:画面に表示するだけ(値を使い回せない)

return:値を返す(計算結果を他の処理で使える)

関数の結果を他の計算に使いたい時はreturnを使いましょう。

Q3: returnの後ろのコードは実行される?

いいえ。returnが実行されると、その時点で関数が終了します。

returnの後ろに書いたコードは実行されません。

Q4: 引数の数に制限はある?

技術的には制限はありませんが、多すぎると使いにくくなります。

3〜4個までに抑えるのがおすすめです。

引数が多い場合は、辞書やクラスを使う方法もあります(応用編で学びます)。

Q5: 関数の中で定義した変数は外で使える?

いいえ。関数の中で定義した変数は、その関数の中でしか使えません。

これを「ローカル変数」といいます。

次のステップで「スコープ」について詳しく学びます。

🎉 ステップ16のまとめ

✅ このステップで学んだこと

✓ 関数は「処理をまとめて名前を付けたもの」

def 関数名():で関数を定義する

引数で関数に値を渡せる

returnで値を返せる

✓ printは画面に表示、returnは値を返す(違いに注意!)

✓ 関数を使うとコードが整理できる

✓ 関数の中で別の関数を呼び出せる

💪 次のステップへ

関数の基礎をマスターしました!

これで、コードを部品化して再利用できるようになりました。

次のステップでは、関数の応用を学びます。

デフォルト引数、キーワード引数、スコープなど、より高度な機能を身につけましょう!

📝

学習メモ

Pythonプログラミング基礎 - Step 16

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE