【基礎編③】プログラム作成(自作関数)

コードが少し長くなってきたので、自作関数を使って整理してみます。
プログラム自体が入力→処理→出力になっていますが、
その中にさらに小さな入力→処理→出力を自分で定義するものが、自作関数になります。

自作関数の基本

# 関数を定義するには[def]を使用します。
# 関数名の後ろに()と[:]を忘れずに。
# 関数の中身となる行にはインデント(文頭の空白)を付けます。
# Spyderの場合、Tabキーでインデントが付けられます。
def sample1():
    print("サンプル1関数を呼び出しました。")

# 関数を使用するときは関数名と()を書きます。
# 以下のように書くと、関数sample1の中身が実行されます。
sample1()


# 次は関数に対して入力と出力を設定します。
# 入力は、関数を定義するときに()内に入力となる変数を定義します。
# 出力は、関数の中で[return]を使って定義します。(以下の場合、numが出力)
def sample2(num1, num2):
    print("サンプル2関数を呼び出しました。")
    num = num1 + num2
    return num

# 使用するときは()内に入力したい値を書きます。
# 以下のように書くと、num1=3, num2=5として、関数sample2が実行されます。
# 出力される値を別の変数に格納するパターンがよく使われます。
out = sample2(3, 5)
print("出力は" + str(out) + "です。")

# print関数で直接出力することも可能です。
print(sample2(10, 20))

# 関数のルールとして、使用する前に定義する(コードとしては上に書く)というものがあります。

自作関数の活用

簡易レジに対して自作関数を活用してみます。

appleCount = input("りんごの個数を入力してください: ")
orangeCount = input("みかんの個数を入力してください: ")

appleCount = int(appleCount)
orangeCount = int(orangeCount)

applePrice = 200
orangePrice = 100

appleSetcount, appleSetprice = 3, 500
orangeSetcount, orangeSetprice = 5, 450

# りんごとみかん、それぞれの合計金額を計算する部分を関数にします。
def calc(count, price, setCount, setPrice):
    totalprice = count // setCount * setPrice + count % setCount* price
    return totalprice

# 関数の出力を別の変数に代入します。
appleTotalprice = calc(appleCount, applePrice, appleSetcount, appleSetprice)
orangeTotalprice = calc(orangeCount, orangePrice, orangeSetcount, orangeSetprice)

totalprice = appleTotalprice + orangeTotalprice
print("合計金額は" + str(totalprice) + "円です。")

関数は使用する前に定義する必要がありますが、
コードの本体とは分けてあったほうが見やすいので、少し工夫します。

# まず本体の部分をmainという関数にします。
def main():
    appleCount = input("りんごの個数を入力してください: ")
    orangeCount = input("みかんの個数を入力してください: ")
    
    appleCount = int(appleCount)
    orangeCount = int(orangeCount)
    
    applePrice = 200
    orangePrice = 100
    
    appleSetcount, appleSetprice = 3, 500
    orangeSetcount, orangeSetprice = 5, 450
    
    appleTotalprice = calc(appleCount, applePrice, appleSetcount, appleSetprice)
    orangeTotalprice = calc(orangeCount, orangePrice, orangeSetcount, orangeSetprice)
    
    totalprice = appleTotalprice + orangeTotalprice
    print("合計金額は" + str(totalprice) + "円です。")


# りんごとみかん、それぞれの合計金額を計算する部分をmain関数の外に出します。
def calc(count, price, setCount, setPrice):
    totalprice = count // setCount * setPrice + count % setCount* price
    return totalprice

# main関数を実行します。
main()

上のコードはまずmainとcalcの2つの関数を定義します。その後でmain関数を実行しています。
calcPrice関数を定義するよりも上で使っているように見えますが、
実際に実行されるのは最後のmain()であり、それよりも上で定義しているので、問題ありません。

ところで、短くスマートに書くために関数を使ったはずなのに、結局長くなってしまいました。
次回は自作関数とも相性のよいリストとループ処理を使って、少しスマートにしてみます。

【基礎編④】プログラム作成(for文、if文)