関数とは?

プログラミングでは, 多くの処理を一つにまとめて 関数 というものを実装できます. 以下のプログラムを見てみましょう. プログラミング応用の演習では, 関数を書いて提出せよという課題を出題していますので, 関数定義は必ずマスターしなければなりません.

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