↓ メインコンテンツへスキップ
  1. 第03講 関数(2/2; 関数の応用)/

第03講 週次課題

課題03-1 デフォルト引数を持つ Hello World
#

難易度 ⭐

以下の条件を満たす関数 hello を作成してください。

  • 引数に何も与えられなければ "Hello World" を返す。
  • 引数に文字列が与えられれば、"Hello " + 文字列 を返す。
  • 引数に与えられた文字列が "Python" であれば、"Hi! Python" を返す。

以下のコードを含む hello2.py を作成してください。 このコードを実行すると、正しく hello 関数が作成できていれば、何も出力されずに終了します。

# ここに hello 関数を定義してください。

# 以下のテストコードは変更しないでください。
assert hello() == "Hello World",          "Error: hello() が 'Hello World' を返しません。"
assert hello("Python") == "Hi! Python",   "Error: hello('Python') が 'Hi Python' を返しません。"
assert hello("Tamada") == "Hello Tamada", "Error: hello('Tamada') が 'Hello Tamada' を返しません。"

課題03-2 引数により挙動が変わる Hello World
#

難易度 ⭐

以下の条件を満たす関数 hello を作成してください。

  • 引数に何も与えられなければ "Hello World" を返す。
  • 引数に文字列が与えられれば、"Hello " + 文字列 を返す。
  • 引数に与えられた文字列が "World" であれば、"Hi! World" を返す。

以下のコードを含む hello3.py を作成してください。 このコードを実行すると、正しく hello 関数が作成できていれば、何も出力されずに終了します。

デフォルト引数は、何も指定されなかった場合と、指定された値がデフォルトのものであったときとを区別できません。 そのため、可変長引数で引数の数によって挙動を変えることで、上記の条件を満たせるようになります。

# ここに hello 関数を定義してください。

# 以下のテストコードは変更しないでください。
assert hello() == "Hello World",          "Error: hello() が 'Hello World' を返しません。"
assert hello("Python") == "Hello Python", "Error: hello('Python') が 'Hello Python' を返しません。"
assert hello("World") == "Hi! World",     "Error: hello('World') が 'Hi! World' を返しません。"

課題03-3 四則演算を行う関数を作成し、テストする
#

難易度 ⭐⭐⭐

3つの値(数値、演算子、数値)を受け取り、計算結果を返す関数 calc を作成し、assert 文でテストしてください。 calc 内の処理は、演算子に応じて、足し算(+)、引き算(-)、掛け算(*)、割り算(/)を行い、計算結果を返すようにしてください。 ファイル名は、calc.py としてください。

calc の条件分岐のすべてを網羅できるよう、演算子ごとに少なくとも 1 つずつテストケースを用意してください。 正しく作成できていれば、実行しても何も出力されずに終了します。

def calc(value1, operator, value2):
    # ここに関数を実装してください
    # operator の値に応じて、value1 と value2 の演算結果を返します。
    pass

# 以下に assert 文でテストを書いてください。
assert calc(1, "+", 2) == 3, "1 + 2 は 3 であるべき"
# 引き算、掛け算、割り算のテストも追加してください。

なお、コマンドライン引数から値を受け取って計算結果を表示したい場合は、テストの後に次のようなコードを追加します。 * はシェルの特殊文字なので、コマンドラインで指定するときは \* のようにエスケープします。

import sys

if len(sys.argv) == 4:
    value1 = int(sys.argv[1])
    operator = sys.argv[2]
    value2 = int(sys.argv[3])
    print(calc(value1, operator, value2))
$ python3 calc.py 1 + 2
3
$ python3 calc.py 5 \* 6
30

課題03-4 可変長引数で統計をとる
#

難易度 ⭐⭐

いくつでも数値を受け取り、その最小値、最大値、平均値の 3 つを返す関数 stats を作成し、assert 文でテストしてください。 ファイル名は、stats.py としてください。

  • stats は可変長引数で数値を受け取ります(stats(3, 1, 2) のように呼び出せる)。
  • 返り値は (最小値, 最大値, 平均値) のタプルです(複数の返り値)。
  • 引数が 0 個のときは None を返します。
  • 最小値と最大値は、組み込み関数の min、max を使わずに、for 文で求めてください。
  • 雛形の assert に加えて、自分でもテストを 2 つ以上追加してください(例: 負の数を含む場合、同じ値ばかりの場合)。
def stats(*values):
    # ここに関数を実装してください。
    pass

assert stats(3, 1, 2) == (1, 3, 2.0), "最小値 1、最大値 3、平均値 2.0"
assert stats(5) == (5, 5, 5.0), "引数が 1 つなら、最小値も最大値も平均値もその値"
assert stats(1, 2, 3, 4) == (1, 4, 2.5), "平均値は 2.5"
assert stats() == None, "引数がなければ None"
# 自分でテストを 2 つ以上追加する。

low, high, mean = stats(10, 20, 30, 40)
print(f"最小値: {low}, 最大値: {high}, 平均値: {mean}")

実行例
#

$ python3 stats.py
最小値: 10, 最大値: 40, 平均値: 25.0