変数
変数を使うと、値に名前を付けて保存し、後から利用できます。
h = 188.0h上のコードは、h という変数に 188.0 という実数値を代入しています。
w = 88.0bmi = w / (h/100) ** 2bmi結果は 24.907455012853945 になります。
代入文
= は代入演算子で、右辺の値を左辺の変数に格納します。
x = 1x = x + 1 # x は 2 になるx注意:
x = x + 1は数学的な等式ではなく、「xの現在の値に1を加え、結果をxに代入する」という意味です。
累積代入文
x = x + 1 は x += 1 と短く書けます。同様に -=, *=, /= なども使えます。
x = 10x += 5 # x = x + 5 → 15x *= 2 # x = x * 2 → 30x関数の定義と返値
関数は def キーワードで定義します。return で値を返します。
def bmi(height, weight): return weight / (height / 100) ** 2bmi(188.0, 88.0)BMI(Body Mass Index)の計算式:
関数を定義すると、何度でも呼び出すことができます。
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
二次関数 の値を計算する関数 quadratic(a, b, c, x) を定義してください。
ローカル変数
関数の中で定義された変数はローカル変数と呼ばれ、関数の外からは参照できません。
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 とは別の変数です。
print は組み込み関数で、値を画面に表示します。関数のデバッグに便利です。
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.4330127018922193print と return
関数が値を返すことを期待されている場合は、必ず return を使ってください。print は値を表示するだけで、返値にはなりません。
# 悪い例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# 良い例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(...)と書いても駄目です。Noneを返すため、関数の返値もNoneになってしまいます。
コメントと空行
関数定義には、後から読んでもわかるようにコメントを付加しましょう。長い関数には区切りの空行を入れるのが良い習慣です。
# 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
二次方程式 に関して以下の関数を定義してください。
- 判別式 を求める
qe_disc(a, b, c) - 大きくない方の解を求める
qe_solution1(a, b, c) - 小さくない方の解を求める
qe_solution2(a, b, c)
二次方程式の解の公式:
qe_solution1 と qe_solution2 は qe_disc を使って定義してください。
グローバル変数
関数の中で代入が行われない変数はグローバル変数とみなされます。グローバル変数は関数の外(トップレベル)で定義され、関数の中からも参照できます。
g = 9.8def force(m): return m * gforce(104) # 1019.2g = g / 6 # 重力加速度を変更force(104) # 169.86...注意: 関数の引数もローカル変数の一種と考えられ、グローバル変数とは別のものです。
練習の解答
以下は本章の練習問題の解答です。上の各練習問題の解答トグルボタンをクリックして確認してください。