練習問題:関数#
Jupyter Notebook ファイルの準備
課題用に「practice9.ipynb」 という名前で Jupyter Notebook のファイルを作成してください。
この練習問題を通して、 Pythonの関数 や組み込み関数で学習した内容を改めて確認してください。
関数定義の基本#
問題1#
マイルを引数で渡すと、メートルに換算した値を返す関数 mile_to_meter
を定義してください。また、その関数を使って 20 マイルが何メートルになるかを求めて。結果を以下の書式で出力してください。
xx,xxx.xxメートル
・・・ 3桁位取り有、小数点以下2桁、メートルを付ける
なお、1 マイルは 1609.344 メートルで計算します。
解答例を見る
f 文字列での書式指定は、3桁位取りの :,
と :.2f
を組み合わせて、:,.2f
と記述します。
def mile_to_meter(mile):
meter = mile * 1609.344
return meter
print(f'{mile_to_meter(20):,.2f}メートル')
問題2#
問題1 で引数を指定せずに、mile_to_meter()
を呼び出した場合には、戻り値として 1 マイルが何メートルになるかを返すようにしてください。
解答例を見る
省略された場合に代わりの値を使う引数は、 引数名=値
の形式で、デフォルト引数として宣言します。
def mile_to_meter(mile=1):
meter = mile * 1609.344
return meter
print(f'{mile_to_meter():,.2f}メートル')
高度な関数定義#
問題1#
出発地、目的地、経由地を引数に受け取り、受け取った地名を「出発地,経由地,到着地
」の順番にカンマ区切りで出力する関数 route()
を定義してください。ただし、経由地は省略可能でかつ数は可変とし、複数指定された場合は、渡された順番に同様の形式で出力するものとします。また、定義した関数が正しく動作することを確認するために、次の 3 通りで呼び出してください。
route('新宿', '本厚木') # 新宿,本厚木
route('新宿', '本厚木', '町田') # 新宿,町田,本厚木
route('新宿', '本厚木', '下北沢', '登戸', '町田') # 新宿,下北沢,登戸,町田,本厚木
解答例を見る
経由地(waypoint)は、可変長な位置引数として最後に宣言します。また、print()
関数で出力するときの区切り文字は、引数 sep
に指定します。
def route(start, destination, *waypoints):
print(start, *waypoints, destination, sep=',')
# ▲ 上の *waypoints はタプルのアンパック
route('新宿', '本厚木')
route('新宿', '本厚木', '町田')
route('新宿', '本厚木', '下北沢', '登戸', '町田')
問題2#
人材登録システムにおいて、1 人の人材情報を登録する関数 entry()
を定義してください。この関数は、名前(name)と年齢(age)の 2 つの引数の指定を必須とし、それ以外の情報は、属性名をキーとするキーワード引数として可変な数を受け取ります。そして、受け取った情報を以下の形式で表示します。
entry('厚木太郎', 40, height=170, weight=76)
で呼び出した場合の表示例以下の情報で新しい人材を登録しました。 name: 厚木太郎 age: 40 height: 170 weight: 76
解答例を見る
可変長なキーワード引数は、辞書(dict)に格納されて渡されます。また、辞書からキーと値の両方を繰り返し取得したい場合は、 items()
メソッドが使えます。
def entry(name, age, **attributes):
print('以下の情報で新しい人材を登録しました。')
print(f'name: {name}')
print(f'age: {age}')
for key, val in attributes.items():
print(f'{key}: {val}')
entry(name='厚木太郎', age=40, height=170, weight=76)
組み込み関数#
問題1#
引数に渡された数値(個数は可変)の合計を返す関数 total()
を、組み込み関数の sum()
を使って定義してください。また、この関数が次の呼び出せることを確認してください。
print(total(1, 2, 3)) # 6
print(total(1, 2, 3, 4, 5)) # 15
解答例を見る
組み込み関数の sum()
はイテラブルなオブジェクトを引数に受け取ります。可変長な位置引数はタプルに格納されて渡されますが、タプルはイテラブルなため、以下のように記述できます。
def total(*nums):
return sum(nums)
print(total(1, 2, 3))
print(total(1, 2, 3, 4, 5))
問題2#
引数に渡された数値(個数は可変)の中から最大値と最小値を求め、そのペアを (最小値, 最大値)
のタプルで返す min_max()
関数を、組み込み関数の min()
と max()
を使って定義してください。また、この関数が次の呼び出せることを確認してください。
print(min_max(1, 2, 3, 4, 5)) # (1, 5)
print(min_max(-1, -2, -3, -4, -5)) # (-5, -1)
解答例を見る
組み込み関数の min()
や max()
は可変長な位置引数を受け取ることができます。そのため、タプルのアンパックを利用して、以下のように記述できます。
def min_max(*nums):
return (min(*nums), max(*nums))
print(min_max(1, 2, 3, 4, 5))
print(min_max(-1, -2, -3, -4, -5))