Python の数値、型変換、および数学
Python の数値、型変換、および数学
この記事では、Python で使用されるさまざまな数値、あるデータ型から別のデータ型に変換する方法、および Python でサポートされている数学演算について学習します。
Python の数値データ型
Python は整数、浮動小数点数、複素数をサポートしています。それらは int
として定義されています 、 float
、および complex
Python のクラス
整数と浮動小数点は、小数点の有無によって区別されます。たとえば、5 は整数ですが、5.0 は浮動小数点数です。
複素数は x + yj
の形式で記述されます。 、ここで x は実部で y は虚部です。
type()
を使用できます 変数または値が属するクラスと isinstance()
を知る関数 特定のクラスに属しているかどうかをチェックする関数。
例を見てみましょう:
a = 5
print(type(a))
print(type(5.0))
c = 5 + 3j
print(c + 3)
print(isinstance(c, complex))
上記のプログラムを実行すると、次の出力が得られます:
<class 'int'> <class 'float'> (8+3j) True
整数は任意の長さにすることができますが、浮動小数点数は小数点以下 15 桁までしか正確ではありません (16 桁は不正確です)。
私たちが毎日扱う数字は、10 進数 (基数 10) の数体系です。しかし、コンピューター プログラマー (通常は組み込みプログラマー) は、2 進数 (基数 2)、16 進数 (基数 16)、および 8 進数 (基数 8) の数値システムを使用する必要があります。
Python では、数字の前にプレフィックスを適切に配置することで、これらの数字を表すことができます。次の表に、これらのプレフィックスを示します。
ナンバーシステム | プレフィックス |
---|---|
バイナリ | 「0b」または「0B」 |
8 進数 | 「0o」または「0O」 |
16 進数 | 「0x」または「0X」 |
ここにいくつかの例があります
# Output: 107
print(0b1101011)
# Output: 253 (251 + 2)
print(0xFB + 0b10)
# Output: 13
print(0o15)
プログラムを実行すると、出力は次のようになります:
107 253 13
型変換
あるタイプの数値を別のタイプに変換できます。これは強制とも呼ばれます。
加算、減算などの演算は、オペランドの 1 つが float の場合、整数を暗黙的に (自動的に) float に強制します。
>>> 1 + 2.0
3.0
上記で、1 (整数) が加算のために 1.0 (浮動小数点数) に変換され、結果も浮動小数点数であることがわかります。
int()
のような組み込み関数を使用することもできます 、 float()
と complex()
タイプ間で明示的に変換します。これらの関数は文字列からも変換できます。
>>> int(2.3)
2
>>> int(-2.8)
-2
>>> float(5)
5.0
>>> complex('3+5j')
(3+5j)
float から integer に変換すると、数値が切り捨てられます (小数部分が削除されます)。
Python 10 進数
Python の組み込みクラス float は、私たちを驚かせるかもしれないいくつかの計算を実行します。 1.1 と 2.2 の合計が 3.3 であることは誰もが知っていますが、Python は同意していないようです。
>>> (1.1 + 2.2) == 3.3
False
何が起きているの?
コンピュータは 2 進数 (0 と 1) しか認識しないため、浮動小数点数は 2 進数の小数としてコンピュータ ハードウェアに実装されていることがわかります。このため、私たちが知っている小数のほとんどは、コンピューターに正確に保存できません。
例を見てみましょう。分数の 1/3 を 10 進数として表すことはできません。これは 0.33333333... を与えます。これは無限に長く、近似することしかできません。
10 進数の 0.1 は 0.000110011001100110011... という無限に長い 2 進数の分数になり、私たちのコンピューターはその有限数しか保存しないことがわかりました。
これは 0.1 に近づくだけで、等しくなることはありません。したがって、これはコンピュータ ハードウェアの制限であり、Python のエラーではありません。
>>> 1.1 + 2.2
3.3000000000000003
この問題を克服するために、Python に付属の decimal モジュールを使用できます。浮動小数点数の精度は小数点以下 15 桁までですが、decimal モジュールの精度はユーザーが設定できます。
違いを見てみましょう:
import decimal
print(0.1)
print(decimal.Decimal(0.1))
出力
0.1 0.1000000000000000055511151231257827021181583404541015625
このモジュールは、学校で習った小数の計算を実行したいときに使用されます。
また、重要性も保持します。 25.50 kg は 25.5 kg よりも正確であることがわかっています。これは、小数点以下の有効桁数が 1 桁に対して 2 桁あるためです。
from decimal import Decimal as D
print(D('1.1') + D('2.2'))
print(D('1.2') * D('2.50'))
出力
3.3 3.000
上記の例の末尾のゼロに注意してください。
Decimal
を実装しない理由を尋ねるかもしれません。 フロートの代わりに毎回?主な理由は効率です。浮動小数点演算は Decimal
より速く実行される必要があります
float の代わりに Decimal を使用する場合
通常、次の場合に Decimal を使用します。
- 正確な 10 進数表現が必要な金融アプリケーションを作成する場合
- 必要な精度のレベルを制御したい場合
- 小数点以下の有効桁数の概念を実装したい場合
Python 分数
Python は、その fractions
を通じて小数を含む演算を提供します モジュール。
分数には分子と分母があり、どちらも整数です。このモジュールは有理数演算をサポートしています。
Fraction オブジェクトはさまざまな方法で作成できます。それらを見てみましょう。
import fractions
print(fractions.Fraction(1.5))
print(fractions.Fraction(5))
print(fractions.Fraction(1,3))
出力
3/2 5 1/3
Fraction
の作成中 float
から 、異常な結果が得られる可能性があります。これは、前のセクションで説明した不完全な 2 進浮動小数点数表現によるものです。
幸い、Fraction
文字列でインスタンス化することもできます。これは、10 進数を使用する場合に推奨されるオプションです。
import fractions
# As float
# Output: 2476979795053773/2251799813685248
print(fractions.Fraction(1.1))
# As string
# Output: 11/10
print(fractions.Fraction('1.1'))
出力
2476979795053773/2251799813685248 11/10
このデータ型は、すべての基本操作をサポートしています。以下にいくつかの例を示します。
from fractions import Fraction as F
print(F(1, 3) + F(1, 3))
print(1 / F(5, 6))
print(F(-3, 10) > 0)
print(F(-3, 10) < 0)
出力
2/3 6/5 False True
Python 数学
Python は math
のようなモジュールを提供しています と random
三角法、対数、確率、統計などのさまざまな数学を実行するため。
import math
print(math.pi)
print(math.cos(math.pi))
print(math.exp(10))
print(math.log10(1000))
print(math.sinh(1))
print(math.factorial(6))
出力
3.141592653589793 -1.0 22026.465794806718 3.0 1.1752011936438014 720
Python math モジュールで使用できる関数と属性の完全なリストは次のとおりです。
import random
print(random.randrange(10, 20))
x = ['a', 'b', 'c', 'd', 'e']
# Get random choice
print(random.choice(x))
# Shuffle x
random.shuffle(x)
# Print the shuffled x
print(x)
# Print random element
print(random.random())
上記のプログラムを実行すると、次のような出力が得られます (ランダムな動作のため、値が異なる場合があります)。
18 e ['c', 'e', 'd', 'b', 'a'] 0.5682821194654443
Python random モジュールで使用できる関数と属性の完全なリストは次のとおりです。
Python