プログラミングでは, 多くの処理を一つにまとめて 関数 というものを実装できます. 以下のプログラムを見てみましょう. プログラミング応用の演習では, 関数を書いて提出せよという課題を出題していますので, 関数定義は必ずマスターしなければなりません.
s1 = 0
s2 = 0
s3 = 0
for i in range(101):
if i%2 == 0:
s1+=i
for i in range(101):
if i%3 == 0:
s2+=i
for i in range(101):
if i%4 == 0:
s3+=i
print(s1,s2,s3)
上のコードはそれぞれ0から100に含まれる2の倍数, 3の倍数, 4の倍数の総和を計算しています. しかしこれは似たような処理を3回書いています. そこで, 「$k$が与えられた時に0から100に含まれる $k$ の倍数の和」を計算する関数$f$を定義します. そうすれば$f(2),f(3),f(4)$がそれぞれの答えになります. 具体的には以下のようなコードになります.
def f(k):
s = 0
for i in range(101):
if i%k==0:
s+=i
return s
print(f(2), f(3), f(4))
1行目に
def f(k):
として関数$f$を定義します. f
には $k$ が与えられるとしています. f
の計算方法は上のコードの i%2==0
などの部分を i%k==0
と置き換えただけです. 和は変数s
に格納されています. 最後に
return s
で s を返しています. つまり$f(k)$ の値をreturnすれば良いです.
<aside> 💡 関数の定義内容の記述はインデント (行の先頭に空白を挿入) が必要です.
</aside>
文字列を受け取る関数も定義できる. 以下の関数は文字列s
を受け取って奇数番目の文字を抜き出す関数である.
def odd_str(s):
n = len(s)
t=""
for i in range(n):
if i%2==0:
t+=s[i]
return t
リストを受け取る関数も定義できる.
def reverse_list(a):
n = len(a)
b = []
for i in range(n):
b.append(a[n-i-1])
return b
複数の関数を同時に定義してもよい. 以前に定義した関数を使って別の関数を定義してもよい.
def f1(n):
return n*2
def f2(n):
return n+1
def f(n):
if n%2==0:
return f2(n)
else:
return f1(n)
引数を複数受け取る場合はそれらの変数,(カンマ)区切りで全て書きます. 以下のコードは受け取った二つの値の和を返す関数です.
def add_two_numbers(a,b):
return a+b