情報理学入門の講義案 その1の続き

その1

前回書き忘れましたが, この講義ではPython3.xを前提にしています。
Python 2.x ではprint関数の代わりにprint 文を使う必要があったり、
整数同士の割り算の結果が小数ではなく切り捨てになるなどの差異があります。

関数を定義する

前回, 場合分けがある関数

y = \left{\begin{array}x^2 &(x < -0.5) \\   x & (-0.5 \leq x < 0) \\   -x & (0 \leq x \leq 0.5) \\   x^2 & (otherwise) \end{array}\right.

のグラフを出力するプログラムを作成しました。

for n in range(21):
    x = -1 + n / 10
    if x < -0.5:
        y = x**2
    elif 0.5 <= x < 0:
        y = x
    elif 0 <= x <= 0.5:
        y = -x
    else:
        y = x**3
    print(x, y)

このように、関数の定義が複雑で長くなってくると, for文の中に書くと醜く見にくくなってきます。関数を独立させましょう。

def f(x):
    if x < -0.5:
        y = x**2
    elif 0.5 <= x < 0:
        y = x
    elif 0 <= x <= 0.5:
        y = -x
    else:
        y = x**3
    return y

for n in range(21):
    x = -1 + n / 10
    print(x, f(x))

def f(x):が関数の定義をする構文、returnが関数の値を返す文です。

コロン

関数定義で, def f(x):の「:」(コロン、「け」と同じキーでうつ記号)
は忘れないように。for文やif文にもコロンがありますが、忘れないように。

どこにでも書けるreturn

returnは複数個書くことも出来ます。

def f(x):
    if x < -0.5:
        return x**2
    elif 0.5 <= x < 0:
        return x
    elif 0 <= x <= 0.5:
        return -x
    else:
        return x**3

こう書くと、xの値の範囲によって、違うreturnが実行されることになります。

2個以上の引数をとる関数

2個以上の引数をとる関数も、もちろん定義出来ます。

def average(x, y):
    # 2つの数の平均
    return (x + y) / 2

def dividing_point(x, y, t):
    # x, yを t:(1 - t)に 内分する点
    return x * t + y * (1 - t)

Pythonが用意している数学関数

三角関数などの数学関数はPythonにも予め用意されています。

sinやcosを使うには、 mathモジュールを使用することを宣言しなければなりません。

import math #数学関数を使う

print(math.sin(math.pi / 6))
print(math.cos(math.pi / 6))
print(math.tan(math.pi / 6))

数学関数は、足し算引き算とは違って、数学的なプログラムにしか使わないので、デフォルトではmathモジュールに格納されています。そのため、math.を付けなくてはなりません。

math.を省く

とはいえ、数学的なプログラムでは、数学関数は足し算引き算と同じくらいよくつかうので、一々math.と書くのは面倒です。

そのときは、from math import ○○○という書き方をします。

from math import sin #sinをmathから取ってくる

# 複数を一度に取ってくる書き方
from math import (
    pi,
    cos,
    tan,
)

print(sin(pi / 6))
print(cos(pi / 6))
print(tan(pi / 6))

1時限で関数まで行くのはさすがに速過ぎるかもしれない。