Python | レベル別練習問題:関数

Python
スポンサーリンク

では、先ほどの「関数の基本」をもとに、
レベル別(基礎 → 中級 → 上級)で練習問題+解答+詳しい解説 をセットでまとめます。

初心者でも無理なく「なぜそう書くのか」まで理解できるように、
1問ずつ 考え方 → コード → 実行結果 → 解説 の順で進めます。


基礎レベル(関数の書き方に慣れる)


Q1:2乗を計算する関数

問題:
数値 n を受け取って、その2乗(n × n)を返す関数 square(n) を作りましょう。

解答:

def square(n):
    return n * n

print(square(3))  # → 9
Python

解説:

  • def で関数を定義。
  • return は「結果を返す」命令。
  • print() のように関数を呼び出して結果を確認できます。

💡 ポイントreturn の代わりに print() だけだと、呼び出し側で値を使えません。


Q2:偶数かどうかを判定する関数

問題:
n が偶数なら True、奇数なら False を返す関数 is_even(n) を作りましょう。

解答:

def is_even(n):
    return n % 2 == 0

print(is_even(4))  # → True
print(is_even(5))  # → False
Python

解説:

  • % は余りを求める演算子。
    偶数なら n % 2 == 0True になります。
  • 比較式の結果はそのまま True / False として返せます。

Q3:文字列を3回表示する関数

問題:
文字列を受け取って、3回繰り返して出力する関数 repeat3(text) を作ってください。

解答:

def repeat3(text):
    print(text * 3)

repeat3("Hi!")  # → Hi!Hi!Hi!
Python

解説:

  • 文字列の繰り返しは 文字列 * 回数 でできます。
  • return ではなく print() で「表示だけ」することも可能です。

中級レベル(条件分岐・リスト処理など)


Q4:平均値を求める関数

問題:
リスト nums を受け取り、平均値を返す関数 average(nums) を作りましょう。
ただし、空リストなら 0 を返してください。

解答:

def average(nums):
    if len(nums) == 0:
        return 0
    return sum(nums) / len(nums)

print(average([10, 20, 30]))  # → 20.0
print(average([]))             # → 0
Python

解説:

  • len() で要素数を調べます。
  • sum() で合計を出せます。
  • 空リストを渡すと ZeroDivisionError になるため、最初にチェックするのが安全です。

Q5:偶数だけを抽出する関数

問題:
リストから偶数だけを取り出して新しいリストにして返す関数 filter_even(nums) を作りましょう。

解答:

def filter_even(nums):
    result = []
    for n in nums:
        if n % 2 == 0:
            result.append(n)
    return result

print(filter_even([1,2,3,4,5,6]))  # → [2, 4, 6]
Python

解説:

  • 空のリストを作って .append() で要素を追加。
  • 条件に合うものだけを選びます。
  • リスト内包表記でも書けます: return [n for n in nums if n % 2 == 0]

Q6:指定回数だけ文字列を繰り返す関数

問題:
repeat(text, times) を作成し、文字列を times 回繰り返して返すようにしてください。

解答:

def repeat(text, times=1):
    return text * times

print(repeat("Hi", 3))  # → HiHiHi
print(repeat("Hi"))     # → Hi
Python

解説:

  • デフォルト引数 times=1 を設定すれば、省略しても1回になる。
  • 関数をより柔軟にできます。

上級レベル(再帰・辞書・文字列操作)


Q7:階乗(factorial)を計算する関数

問題:
n!(階乗)を返す関数 factorial(n) を作ってください。
例:factorial(5)120

解答:

def factorial(n):
    if n == 0 or n == 1:
        return 1
    return n * factorial(n - 1)

print(factorial(5))  # → 120
Python

解説:

  • 再帰(関数が自分自身を呼ぶ)で書く。
  • 終了条件(ベースケース)を忘れると無限ループに陥ります。
  • 例:5 * factorial(4)5 * 4 * 3 * 2 * 1

Q8:回文判定関数

問題:
文字列が前から読んでも後ろから読んでも同じなら True を返す is_palindrome(s) を作りましょう。
例:「level」「たけやぶやけた」など。

解答:

def is_palindrome(s):
    s = s.lower().replace(" ", "")
    return s == s[::-1]

print(is_palindrome("Level"))      # → True
print(is_palindrome("Hello"))      # → False
Python

解説:

  • [::-1] は文字列を逆順にするスライス構文。
  • lower() で大文字・小文字を無視。
  • replace(" ", "") で空白を削除。

Q9:単語の出現回数を数える関数

問題:
文字列を受け取り、各単語の出現回数を辞書で返す word_count(text) を作ってください。

解答:

def word_count(text):
    words = text.lower().split()
    freq = {}
    for w in words:
        freq[w] = freq.get(w, 0) + 1
    return freq

print(word_count("Apple banana apple orange Banana"))
# → {'apple': 2, 'banana': 2, 'orange': 1}
Python

解説:

  • split() で空白区切りに分割。
  • dict.get(key, 初期値) を使うと便利。
  • 同じ単語が出るたびにカウントを増やしています。

Q10:最大値と最小値を返す関数

問題:
複数の数を受け取り、最小値と最大値の両方を返す関数 minmax(*args) を作りましょう。

解答:

def minmax(*args):
    if not args:
        return None, None
    return min(args), max(args)

mi, ma = minmax(3, 7, 1, 9)
print(mi, ma)  # → 1 9
Python

解説:

  • *args は可変長引数(複数の引数をまとめて受け取る)。
  • 結果をタプルで返し、呼び出し側でアンパックできます。

まとめ表

レベル学べるテーマ例題
基礎関数定義、引数、returnQ1〜Q3
中級条件分岐、リスト操作、デフォルト引数Q4〜Q6
上級再帰、文字列操作、辞書、可変長引数Q7〜Q10

さらにステップアップしたい人へ

  • チャレンジ問題
    「上級Q7〜Q10」をもとに、自動採点スクリプトを作る(assert でテスト)。
  • 学習テーマ例
    • 関数の中で関数を定義(ネスト関数)
    • 関数を引数に取る(高階関数)
    • デコレーターでログ出力を追加

Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました