「Python実行例 関数を作る」の版間の差分

提供: つれづれウィキ
ナビゲーションに移動 検索に移動
(ページの作成:「実行例を示します。 <pre> # 身長と体重から肥満度を示すBMIを計算する def bmi(mass, height): return mass / height**2 def calc_bmi(): ma…」)
 
(内容を「実行例を示します。 * Python実行例_BMI (肥満度計算) * Python実行例_階乗 * Python実行例_フィボナッチ数 この他にも色々試…」で置換)
タグ: 置換
 
1行目: 1行目:
 
実行例を示します。
 
実行例を示します。
  
−
<pre>
+
* [[Python実行例_BMI]] (肥満度計算)
−
# 身長と体重から肥満度を示すBMIを計算する
+
* [[Python実行例_階乗]]
−
 
+
* [[Python実行例_フィボナッチ数]]
−
def bmi(mass, height):
 
−
    return mass / height**2
 
−
 
 
−
def calc_bmi():
 
−
    mass = float(input("あなたの体重は? (kg)"))
 
−
    height_cm = float(input("あなたの身長は? (cm)"))
 
−
    print(f'あなたの BMI は {bmi(mass, height_cm / 100):.2f} です。')
 
−
 
 
−
calc_bmi()
 
−
 
 
−
# コード追加
 
−
def calc_bmi():
 
−
    mass = float(input("あなたの体重は? (kg)"))
 
−
    height_cm = float(input("あなたの身長は? (cm)"))
 
−
    bmi_value = bmi(mass, height_cm / 100)
 
−
    if bmi_value < 18.5:
 
−
        bmi_type = "やせ体型"
 
−
    elif bmi_value < 25:
 
−
        bmi_type = "標準体型"
 
−
    else:
 
−
        bmi_type = "肥満体型"
 
−
    print(f'あなたの BMI は {bmi(mass, height_cm / 100):.2f} です。')
 
−
    print(f"あなたは {bmi_type} です。")
 
−
 
 
−
#### 発展学習 ####
 
−
# BMI について調べてみよう。
 
−
# BMI の改良版について調べ、対応する関数を作ってみよう。
 
−
 
 
−
 
 
−
# 階乗(再帰的定義)
 
−
def kaijo(n):
 
−
    if (n == 0):
 
−
        return 1
 
−
    else:
 
−
        return n * kaijo(n-1)
 
−
 
 
−
# 階乗(for文を使って)
 
−
def kaijo1(n):
 
−
    k = 1
 
−
    for i in range(1, n+1):
 
−
        k = k * i
 
−
    return k
 
−
 
 
−
# フィボナッチ数
 
−
# F_0 = 0, F_1 = 1, F_n = F_{n-2} + F_{n-1} で定義される
 
−
 
 
−
def fibo1(n):
 
−
    if (n == 0):
 
−
        return 0
 
−
    elif (n == 1):
 
−
        return 1
 
−
    else:
 
−
        return fibo1(n-2)+fibo1(n-1)
 
−
 
 
−
# 自分自身を2回再帰呼び出ししているので、n が大きくなると
 
−
# かかる時間が指数関数的に増大する。
 
−
# fibo1(35)
 
−
# で答えが出るまでに 5 秒くらい。
 
−
# それより大きい数では飛躍的にかかる時間が長くなる。
 
−
 
 
−
# フィボナッチ数(if 文と for 文を使って)
 
−
 
 
−
def fibo2(n):
 
−
    if (n == 0):
 
−
        return 0
 
−
    elif (n == 1):
 
−
        return 1
 
−
    else:
 
−
        k0 = 0
 
−
        k1 = 1
 
−
        for i in range(2, n+1):
 
−
            k2 = k1 + k0
 
−
            k0 = k1
 
−
            k1 = k2
 
−
        return k2
 
−
 
 
−
# fibo2(100000)
 
−
# くらいでも一瞬で答えが出る
 
−
 
 
−
# フィボナッチ数(浜田の解法1)
 
−
 
 
−
# n が奇数の時、F_n = F_{(n+1)/2}^2 + F_{(n-1)/2}^2
 
−
# n が偶数の時、F_n = F_{n/2 + 1}^2 - F_{n/2 - 1}^2
 
−
# という性質を使う
 
−
 
 
−
def fibo3(n):
 
−
    if (n == 0):
 
−
        return 0
 
−
    elif (n == 1):
 
−
        return 1
 
−
    elif (n%2 == 1):
 
−
        return fibo2(n//2+1)**2 + fibo2(n//2)**2
 
−
    else:
 
−
        return fibo2(n//2+1)**2 - fibo2(n//2-1)**2
 
−
 
 
−
# フィボナッチ数(浜田の解法2)
 
−
 
 
−
# fibo3 では実は fibo2 を2回呼び出しているので余分に繰り返し
 
−
# 計算していることになるので、さらに改善できるはずである
 
−
# (効果が目に見えるのはよほど大きい n の場合になるが)。
 
−
# この関係式を繰り返し適用することにより、計算量オーダーをさらに
 
−
# 改善できることがわかる。
 
−
# 下に、fibo_i(n) という、隣り合うフィボナッチ数のペアを返す内部関数を
 
−
# 定義し、その内部関数を呼び出す形で fibo4(n) を定義する。
 
−
 
 
−
def fibo_i(n):
 
−
    if (n == 0):
 
−
        return [1, 0]
 
−
    elif (n == 1):
 
−
        return [0, 1]
 
−
    elif (n == 2):
 
−
        return [1, 1]
 
−
    else:
 
−
        l = fibo_i(n//2)
 
−
        a = l[0]
 
−
        b = l[1]
 
−
        c = l[0]+l[1]
 
−
        if (n%2 == 1):
 
−
            return [c**2 - a**2, c**2 + b**2]
 
−
        else:
 
−
            return [b**2 + a**2, c**2 - a**2]
 
−
 
 
−
def fibo4(n):
 
−
    if (n == 0):
 
−
        return 0
 
−
    elif (n == 1):
 
−
        return 1
 
−
    elif (n == 2):
 
−
        return 1
 
−
    else:
 
−
        l = fibo_i(n//2)
 
−
        a = l[0]
 
−
        b = l[1]
 
−
        c = l[0]+l[1]
 
−
        if (n%2 == 1):
 
−
            return c**2 + b**2
 
−
        else:
 
−
            return c**2 - a**2
 
−
</pre>
 
  
 
この他にも色々試して、追加してください。
 
この他にも色々試して、追加してください。
  
 
[[Category:学習ガイド]]
 
[[Category:学習ガイド]]

2022年11月13日 (日) 14:50時点における最新版

実行例を示します。

この他にも色々試して、追加してください。