1-2

変数と関数の基礎

変数

変数を使うと、値に名前を付けて保存し、後から利用できます。

python
h = 188.0h

上のコードは、h という変数に 188.0 という実数値を代入しています。

変数のしくみ:名前で値を参照するh変数名参照188.0値(float)w88.0h = 188.0 ← 「= は代入。h に 188.0 を格納する」
python
w = 88.0bmi = w / (h/100) ** 2bmi

結果は 24.907455012853945 になります。

代入文

= は代入演算子で、右辺の値を左辺の変数に格納します。

python
x = 1x = x + 1   # x は 2 になるx

注意: x = x + 1 は数学的な等式ではなく、「x の現在の値に 1 を加え、結果を x に代入する」という意味です。

累積代入文

x = x + 1x += 1 と短く書けます。同様に -=, *=, /= なども使えます。

python
x = 10x += 5   # x = x + 5 → 15x *= 2   # x = x * 2 → 30x

関数の定義と返値

関数は def キーワードで定義します。return で値を返します。

python
def bmi(height, weight):    return weight / (height / 100) ** 2bmi(188.0, 88.0)
関数の仕組み:引数 → 処理 → 返値引数(入力)height = 188.0weight = 88.0🔧 bmi()weight /(height/100)**2計算処理を実行return返値(出力)24.907...関数は「入力を受け取り、処理して、結果を返す」ブラックボックス

BMI(Body Mass Index)の計算式:

BMI="体重(kg)""text身長(m)2"BMI = \frac{"\text{体重}\\ (kg)"}{"\\text{身長}\\ (m)^2"}

関数を定義すると、何度でも呼び出すことができます。

python
bmi(170.0, 65.0)   # 22.49...bmi(160.0, 50.0)   # 19.53...

予約語

def, return, if, else, for, while などは予約語と呼ばれ、変数名に使うことはできません。

練習: ft_to_cm

基礎

フィートとインチをセンチメートルに変換する関数 ft_to_cm(f, i) を定義してください。

  • 1フィート = 30.48 cm
  • 1インチ = 30.48/12 cm

練習: quadratic

基礎

二次関数 f(x)=ax2+bx+cf(x) = ax^2 + bx + c の値を計算する関数 quadratic(a, b, c, x) を定義してください。

ローカル変数

関数の中で定義された変数はローカル変数と呼ばれ、関数の外からは参照できません。

python
import mathdef heron(a, b, c):    s = 0.5 * (a + b + c)    return math.sqrt(s * (s-a) * (s-b) * (s-c))s = 100heron(3, 4, 5)  # 6.0s               # 100(変化しない)

上の例で、heron 関数内の s はローカル変数です。関数の外の s = 100 とは別の変数です。

変数のスコープ(見える範囲)🌐 グローバルスコープ(関数の外)s = 100↑ 変化しないs → 100 ✓🔒 ローカルスコープ(heron関数内)a=3, b=4, c=5引数(ローカル変数)s = 6.0ローカル変数外からは見えない関数が終了すると消える

print

print は組み込み関数で、値を画面に表示します。関数のデバッグに便利です。

python
def heron(a, b, c):    s = 0.5 * (a + b + c)    print('The value of s is', s)    return math.sqrt(s * (s-a) * (s-b) * (s-c))heron(1, 1, 1)# 出力: The value of s is 1.5# 返値: 0.4330127018922193

関数が値を返すことを期待されている場合は、必ず return を使ってくださいprint は値を表示するだけで、返値にはなりません。

print と return の違い✅ return:値を呼び出し元に返すdef good_heron(...):return 6.0値を返すresult = good_heron(3,4,5)result → 6.0 → 使える!❌ print:画面に表示するだけ(値は返さない)def bad_heron(...):print(6.0)6.0Noneresult = bad_heron(3,4,5)result → None → 使えない!
python
# 悪い例def bad_heron(a, b, c):    s = 0.5 * (a + b + c)    print(math.sqrt(s * (s-a) * (s-b) * (s-c)))    # return がない → None を返すresult = bad_heron(3, 4, 5)print(result)  # None
python
# 良い例def good_heron(a, b, c):    s = 0.5 * (a + b + c)    return math.sqrt(s * (s-a) * (s-b) * (s-c))result = good_heron(3, 4, 5)print(result * 2)  # 12.0

注意: return print(...) と書いても駄目です。print 関数は None を返すため、関数の返値も None になってしまいます。

コメントと空行

関数定義には、後から読んでもわかるようにコメントを付加しましょう。長い関数には区切りの空行を入れるのが良い習慣です。

python
# heronの公式により三角形の面積を返すdef heron(a, b, c):  # a,b,cは三辺の長さ    # 辺の合計の半分をsに置く    s = 0.5 * (a + b + c)    return math.sqrt(s * (s-a) * (s-b) * (s-c))

関数の参照の書き方

関数を参照する書き方は複数あります:

  • 名前のみ: 「関数 heron は三角形の面積を返します」
  • 引数明示: 「heron(a, b, c) は三辺の長さ a, b, c をもらって面積を返します」
  • 括弧付き: 「heron() は三角形の面積を返します」(heron が関数であることを明示)

練習: qe_disc, qe_solution1, qe_solution2

標準

二次方程式 ax2+bx+c=0ax^2 + bx + c = 0 に関して以下の関数を定義してください。

  1. 判別式 b24acb^2 - 4ac を求める qe_disc(a, b, c)
  2. 大きくない方の解を求める qe_solution1(a, b, c)
  3. 小さくない方の解を求める qe_solution2(a, b, c)

二次方程式の解の公式:

x="bpmsqrtb24ac""2a"x = \frac{"{-b \\pm \\sqrt{b^2 - 4ac}}"}{"{2a}"}

qe_solution1qe_solution2qe_disc を使って定義してください。

グローバル変数

関数の中で代入が行われない変数はグローバル変数とみなされます。グローバル変数は関数の外(トップレベル)で定義され、関数の中からも参照できます。

python
g = 9.8def force(m):    return m * gforce(104)   # 1019.2g = g / 6    # 重力加速度を変更force(104)   # 169.86...

注意: 関数の引数もローカル変数の一種と考えられ、グローバル変数とは別のものです。

練習の解答

以下は本章の練習問題の解答です。上の各練習問題の解答トグルボタンをクリックして確認してください。