数学的計算チュートリアル

Intermediate

This tutorial is from open-source community. Access the source code

はじめに

このセクションでは数学的計算について説明します。

これは Guided Lab です。学習と実践を支援するためのステップバイステップの指示を提供します。各ステップを完了し、実践的な経験を積むために、指示に注意深く従ってください。過去のデータによると、この 中級 レベルの実験の完了率は 66%です。学習者から 91% の好評価を得ています。

数値の種類

Python には 4 種類の数値があります。

  • ブール型
  • 整数型
  • 浮動小数点数型
  • 複素数型(虚数)

ブール型 (bool)

ブール型には 2 つの値があります。TrueFalse

a = True
b = False

数値としては、それぞれ値 10 の整数として評価されます。

c = 4 + True ## 5
d = False
if d == 0:
    print('d is False')

ただし、そのようなコードは書かないでください。それは奇妙です。

整数型 (int)

任意のサイズと基数の符号付き値:

a = 37
b = -299392993727716627377128481812241231
c = 0x7fa8      ## 16 進数
d = 0o253       ## 8 進数
e = 0b10001111  ## 2 進数

一般的な演算:

x + y      加算
x - y      減算
x * y      乗算
x / y      除算 (浮動小数点数を生成)
x // y     切り捨て除算 (整数を生成)
x % y      剰余
x ** y     累乗
x << n     ビット左シフト
x >> n     ビット右シフト
x & y      ビット単位 AND
x | y      ビット単位 OR
x ^ y      ビット単位 XOR
~x         ビット単位 NOT
abs(x)     絶対値

浮動小数点数型 (float)

浮動小数点数値を指定するには、10 進数または指数表記を使用します。

a = 37.45
b = 4e5 ## 4 x 10**5 または 400,000
c = -1.345e-10

浮動小数点数は、ネイティブ CPU 表現 IEEE 754 を使用して倍精度で表されます。これは、プログラミング言語 C の double 型と同じです。

17 桁の精度
指数は -308 から 308

小数を表す際には、浮動小数点数が不正確であることに注意してください。

>>> a = 2.1 + 4.2
>>> a == 6.3
False
>>> a
6.300000000000001
>>>

これは Python の問題ではなく、CPU の根底にある浮動小数点数ハードウェアの問題です。

一般的な演算:

x + y      加算
x - y      減算
x * y      乗算
x / y      除算
x // y     切り捨て除算
x % y      剰余
x ** y     累乗
abs(x)     絶対値

これらは、ビット単位演算子を除いて、整数型と同じ演算子です。追加の数学関数は、math モジュールにあります。

import math
a = math.sqrt(x)
b = math.sin(x)
c = math.cos(x)
d = math.tan(x)
e = math.log(x)

比較

以下の比較演算子 / 関係演算子は数値と共に使用できます。

x < y      未満
x <= y     未満または等しい
x > y      大きい
x >= y     大きいまたは等しい
x == y     等しい
x!= y     等しくない

andornot を使用して、より複雑なブール式を作成できます。

以下はいくつかの例です。

if b >= a and b <= c:
    print('b is between a and c')

if not (b < a or b > c):
    print('b is still between a and c')

数値の変換

型名を使用して値を変換できます。

a = int(x)    ## x を整数型に変換
b = float(x)  ## x を浮動小数点数型に変換

試してみましょう。

>>> a = 3.14159
>>> int(a)
3
>>> b = '3.14159' ## 数字を含む文字列でも機能します
>>> float(b)
3.14159
>>>

注意:これらの演習では、~/project ディレクトリで作業していることを前提としています。mortgage.py ファイルを探してください。

演習 1.7:デイブの住宅ローン

デイブは、ギドの住宅ローン、株式投資、ビットコイン取引会社との間で、50 万ドルの 30 年固定金利住宅ローンを組むことにしました。金利は 5% で、月額返済額は 2,684.11 ドルです。

以下は、デイブが住宅ローン期間中に支払う合計金額を計算するプログラムです。

## mortgage.py

principal = 500000.0
rate = 0.05
payment = 2684.11
total_paid = 0.0

while principal > 0:
    principal = principal * (1+rate/12) - payment
    total_paid = total_paid + payment

print('Total paid', total_paid)

このプログラムを入力して実行してください。966279.5999999957 という答えが得られるはずです。

演習 1.8:追加返済

住宅ローンの最初の 12 ヶ月間、デイブが月額 1,000 ドルの追加返済を行った場合を考えてみましょう。

この追加返済を組み込むようにプログラムを修正し、支払総額と必要な月数を表示させます。

新しいプログラムを実行すると、342 ヶ月で支払総額が 929965.6199999959 と報告されるはずです。

演習 1.9:追加返済額計算プログラムの作成

プログラムを修正して、追加返済額の情報をより一般的に扱えるようにします。ユーザーが以下の変数を設定できるようにします。

extra_payment_start_month = 61
extra_payment_end_month = 108
extra_payment = 1000

これらの変数をプログラムが参照し、適切に支払総額を計算するようにします。

最初の 5 年間を支払った後から 4 年間、月額 1,000 ドルの追加返済を行った場合、デイブはいくら支払うことになるでしょうか。

演習 1.10:表の作成

プログラムを修正して、月、これまでに支払った合計金額、および残りの元本を表示する表を出力します。出力は以下のようになるはずです。

1 2684.11 499399.22
2 5368.22 498795.94
3 8052.33 498190.15
4 10736.44 497581.83
5 13420.55 496970.98
...
308 874705.88 3478.83
309 877389.99 809.21
310 880074.10 -1871.53
支払総額 880074.10
月数 310

演習 1.11:ボーナス

そのうち、最終月に発生する過払いを修正するようにプログラムを修正してください。

演習 1.12:謎

int()float() を使って数値を変換できます。たとえば、

>>> int("123")
123
>>> float("1.23")
1.23
>>>

このことを念頭において、この動作を説明できますか?

>>> bool("False")
True
>>>

まとめ

おめでとうございます!あなたは数値の実験を完了しました。あなたのスキルを向上させるために、LabEx でさらに多くの実験を練習できます。