Python数字
16309 ワード
簡単に述べる
Pythonでは,数値の定義は単純−整数,浮動小数点数,複素数であり,それぞれint,float,complexクラスとして定義される.数学が体育の先生が教えてくれない限り、ほとんどの人は何の問題もありません.
数値については、基本的な演算(例えば、算術演算、比較演算)のほか、Pythonはタイプ間の相互変換機能やその他の高度な操作を提供しています.概要 デジタルタイプ 整数オーバーフロー デジタルシステム タイプ変換 Decimal fractions有理数 math数学関数 random生成擬似乱数 一去丶二三里,转载请注明出典:http://blog.csdn.net/liang19890820
数値タイプ
Pythonでは、3つの異なる数値タイプがサポートされています.int(整数):整数とも呼ばれ、正または負の整数であり、小数点を持たない. float(浮動小数点型):整数部と小数部からなり、浮動小数点型も科学的カウント法で表すことができる. complex(複数):x+yjの形で構成され、xは実部、yは虚部である.
注意:Py 3.xはlongタイプを除いて、現在は1つの整数-intしかなく、長整数として表されています.
整数オーバーフロー?
天文数字:非常に大きな数字を形容して、すでに1つの正確な数で形容することができません.
多くのプログラミング言語にとって、天文数字は正視される必要がある.整数オーバーフローの問題を引き起こすことが多いからだ.しかし、Pythonでは「無限精度」の整数をサポートするため、心配する必要はありません.
感じてみましょう
わあ、なんてラッキーなことか、Pythonはこんなすばらしい手配をしました...
整数は任意の長さであってもよいが、浮動小数点数は15桁(16桁不正確)までしか正確ではない.
注意:fの値は切断されます.
ディジタルシステム
ほとんどの人にとって、毎日処理される数字は10進数(10を基数とする)デジタルシステムです.しかし、プログラマー(特に埋め込み式)は、バイナリ(2を基数とする)、8進法(8を基数とする)、16進法(16を基数とする)デジタルシステムを使用する必要があることが多い.
Pythonでは、数字の前に対応する接頭辞を置いて、これらの数字を表すことができます.
ディジタルシステム
接頭辞
デシマル(Decimal)
バイナリ(Binary)
「0 b」または「0 B」
8進法(Octal)
「0 o」または「0 O」
16進数(Hexadecimal)
「0 x」または「0 X」
いくつかの例を見てみましょう.
10進数は、2進数、8進数、16進数に変換することもできます.
タイプ変換
一般に、データのタイプの変換は、通常、コンパイルシステムによって自動的に行われ、人工的な介入を必要としないため、暗黙的なタイプ変換と呼ばれる.ただし、プログラムが特定のタイプのデータを別のタイプに変換する必要がある場合は、明示的なタイプ変換と呼ばれる強制タイプ変換演算子を使用して変換できます.
数値演算(加算、減算など)を行う場合、1つのオペランドが浮動小数点数である場合、整数は暗黙的(自動的)に浮動小数点数に変換されます.
2(整数)が2.0(浮動小数点数)に変換され、計算結果(5.0)も浮動小数点数であることがわかる.
このほか、int()、float()、complex()などの内蔵関数を使用して、文字列を数値に変換することもできます.
floatからintに変換すると、数値は切り捨てられます(整数はゼロに近い).
Decimal
通常、組み込みクラスfloatを使用すると、いくつかの「不思議な」計算が実行されます.
1/3が0.333…(無限ループ)、0.1+0.2が0.3であることは知っていますが、Pythonはそうは思わないようです.
What?まさか目がくらんだのか.数学の知識とは違いますか.△ぼんやりした顔をしている..
浮動小数点数は、コンピュータがバイナリ(0および1)しか理解できないため、コンピュータハードウェアにおいてバイナリ小数で表されることが実証されている.このため、ほとんどの10進数小数はコンピュータに正確に記憶できない.
例えば、10進数小数0.1は、無限長の2進数0.0001110011001100110011に変換され、コンピュータに格納されるビット数は限られている.つまり、バイナリに変換すると、10進数の0.1に近いだけですが、決して等しくありません.
したがって、これはPythonのエラーではなく、コンピュータハードウェアの限界です.
この問題を克服するために、Pythonが持参したdecimalモジュールを使用することができます.浮動小数点数の精度は最大15ビットまでですが、decimalモジュールは精度をカスタマイズできます.
それ以外にも重要な意味を残しています.25.50は25.5よりも正確であることを知っています.25.50には2つの有効な小数位があるからです.
注意:計算結果の最後の0
Decimalがこんなに素晴らしいのに、なぜfloatの代わりにDecimalを使わないのかと聞かれるかもしれません.主な原因は効率であり,float演算はDecimal演算よりも速い.
floatではなくDecimalを使用するのはいつですか?以下の場合、通常はDecimalを使用します.金融アプリケーションを行う場合は、正確な表示が必要です. 必要な精度レベルを制御したい場合 有効な小数点概念を実現したい場合 学校で学んだように小数演算をしたい場合 义齿
fractionsモジュールは、有理数演算をサポートするスコアに関する操作を提供します.
1つのFractionインスタンスは、1対の整数、もう1つの有理数、または1つの文字列で構成することができる.
floatからFractionを作成すると,以前に議論した不完全なバイナリ浮動小数点数によるいくつかの異常な結果が得られる可能性がある.
幸いなことにfractionでは文字列をインスタンス化することもできます.これは10進数を使用する場合の第一選択です.
また、このデータ型はすべての基本操作をサポートします.
math(数学関数)
mathモジュールは、三角学、対数など、数学に関連する演算を処理するために使用される.
random(擬似乱数生成)
randomモジュールは、擬似乱数を生成するために使用されます.乱数は数学、ゲーム、セキュリティなどの分野で使用でき、アルゴリズムの効率を高め、プログラムのセキュリティを高めるためにアルゴリズムに埋め込まれることも多い.
上記はデジタル関連の各モジュールの一般的なアプリケーションですが、完全な機能リストは後述しません.Pythonドキュメントを参照してください.
Pythonでは,数値の定義は単純−整数,浮動小数点数,複素数であり,それぞれint,float,complexクラスとして定義される.数学が体育の先生が教えてくれない限り、ほとんどの人は何の問題もありません.
数値については、基本的な演算(例えば、算術演算、比較演算)のほか、Pythonはタイプ間の相互変換機能やその他の高度な操作を提供しています.
数値タイプ
Pythonでは、3つの異なる数値タイプがサポートされています.
注意:Py 3.xはlongタイプを除いて、現在は1つの整数-intしかなく、長整数として表されています.
>>> type(5) #
<class 'int'>
>>>
>>> type(2.5) #
<class 'float'>
>>>
>>> c = 2.5 + 5.0j #
>>> type(c)
<class 'complex'>
整数オーバーフロー?
天文数字:非常に大きな数字を形容して、すでに1つの正確な数で形容することができません.
多くのプログラミング言語にとって、天文数字は正視される必要がある.整数オーバーフローの問題を引き起こすことが多いからだ.しかし、Pythonでは「無限精度」の整数をサポートするため、心配する必要はありません.
感じてみましょう
>>> i = 2 ** 500 # 2 500
>>> i
3273390607896141870013189696827599152216642046043064789483291368096133796404674554883270092325904157150886684127560071009217256545885393053328527589376
わあ、なんてラッキーなことか、Pythonはこんなすばらしい手配をしました...
整数は任意の長さであってもよいが、浮動小数点数は15桁(16桁不正確)までしか正確ではない.
>>> f = 0.12345678901234567890 #
>>> f
0.12345678901234568
注意:fの値は切断されます.
ディジタルシステム
ほとんどの人にとって、毎日処理される数字は10進数(10を基数とする)デジタルシステムです.しかし、プログラマー(特に埋め込み式)は、バイナリ(2を基数とする)、8進法(8を基数とする)、16進法(16を基数とする)デジタルシステムを使用する必要があることが多い.
Pythonでは、数字の前に対応する接頭辞を置いて、これらの数字を表すことができます.
ディジタルシステム
接頭辞
デシマル(Decimal)
バイナリ(Binary)
「0 b」または「0 B」
8進法(Octal)
「0 o」または「0 O」
16進数(Hexadecimal)
「0 x」または「0 X」
いくつかの例を見てみましょう.
>>> 5 #
5
>>>
>>> 0b1010 #
10
>>>
>>> 0o15 #
13
>>>
>>> 0xFB #
251
10進数は、2進数、8進数、16進数に変換することもできます.
>>> dec = 20 #
>>>
>>> bin(dec) #
'0b10100'
>>>
>>> oct(dec) #
'0o24'
>>>
>>> hex(dec) #
'0x14'
タイプ変換
一般に、データのタイプの変換は、通常、コンパイルシステムによって自動的に行われ、人工的な介入を必要としないため、暗黙的なタイプ変換と呼ばれる.ただし、プログラムが特定のタイプのデータを別のタイプに変換する必要がある場合は、明示的なタイプ変換と呼ばれる強制タイプ変換演算子を使用して変換できます.
数値演算(加算、減算など)を行う場合、1つのオペランドが浮動小数点数である場合、整数は暗黙的(自動的)に浮動小数点数に変換されます.
>>> 2 + 3.0
5.0
2(整数)が2.0(浮動小数点数)に変換され、計算結果(5.0)も浮動小数点数であることがわかる.
このほか、int()、float()、complex()などの内蔵関数を使用して、文字列を数値に変換することもできます.
>>> int(2.3)
2
>>> int(-2.8)
-2
>>> float(5)
5.0
>>> complex('3+5j')
(3+5j)
floatからintに変換すると、数値は切り捨てられます(整数はゼロに近い).
Decimal
通常、組み込みクラスfloatを使用すると、いくつかの「不思議な」計算が実行されます.
1/3が0.333…(無限ループ)、0.1+0.2が0.3であることは知っていますが、Pythonはそうは思わないようです.
>>> 1/3
0.3333333333333333
>>>
>>> 0.1 + 0.2
0.30000000000000004
What?まさか目がくらんだのか.数学の知識とは違いますか.△ぼんやりした顔をしている..
浮動小数点数は、コンピュータがバイナリ(0および1)しか理解できないため、コンピュータハードウェアにおいてバイナリ小数で表されることが実証されている.このため、ほとんどの10進数小数はコンピュータに正確に記憶できない.
例えば、10進数小数0.1は、無限長の2進数0.0001110011001100110011に変換され、コンピュータに格納されるビット数は限られている.つまり、バイナリに変換すると、10進数の0.1に近いだけですが、決して等しくありません.
したがって、これはPythonのエラーではなく、コンピュータハードウェアの限界です.
この問題を克服するために、Pythonが持参したdecimalモジュールを使用することができます.浮動小数点数の精度は最大15ビットまでですが、decimalモジュールは精度をカスタマイズできます.
>>> import decimal
>>>
>>> 0.1
0.1
>>>
>>> decimal.Decimal(0.1)
Decimal('0.1000000000000000055511151231257827021181583404541015625')
>>>
>>> decimal.getcontext() #
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[Inexact, FloatOperation, Rounded], traps=[InvalidOperation, DivisionByZero, Overflow])
>>>
>>> decimal.getcontext().prec # 28
28
>>>
>>> d = decimal.Decimal(1) / decimal.Decimal(9)
>>> d
Decimal('0.1111111111111111111111111111')
>>>
>>> decimal.getcontext().prec = 3 # 3
>>>
>>> d = decimal.Decimal(1) / decimal.Decimal(9)
>>> d
Decimal('0.111')
それ以外にも重要な意味を残しています.25.50は25.5よりも正確であることを知っています.25.50には2つの有効な小数位があるからです.
>>> from decimal import Decimal as D
>>>
>>> D('0.1') + D('0.2')
Decimal('0.3')
>>>
>>> D('1.2') * D('2.50')
Decimal('3.000')
注意:計算結果の最後の0
Decimalがこんなに素晴らしいのに、なぜfloatの代わりにDecimalを使わないのかと聞かれるかもしれません.主な原因は効率であり,float演算はDecimal演算よりも速い.
floatではなくDecimalを使用するのはいつですか?以下の場合、通常はDecimalを使用します.
fractionsモジュールは、有理数演算をサポートするスコアに関する操作を提供します.
1つのFractionインスタンスは、1対の整数、もう1つの有理数、または1つの文字列で構成することができる.
>>> import fractions
>>>
>>> fractions.Fraction(1.5)
Fraction(3, 2)
>>>
>>> fractions.Fraction(10)
Fraction(10, 1)
>>>
>>> fractions.Fraction(3, 5)
Fraction(3, 5)
>>>
>>> print(fractions.Fraction(1.5))
3/2
floatからFractionを作成すると,以前に議論した不完全なバイナリ浮動小数点数によるいくつかの異常な結果が得られる可能性がある.
幸いなことにfractionでは文字列をインスタンス化することもできます.これは10進数を使用する場合の第一選択です.
>>> from fractions import Fraction
>>>
>>> print(Fraction(1.1)) # 1.1
2476979795053773/2251799813685248
>>>
>>> print(Fraction('1.1')) # '1.1'
11/10
また、このデータ型はすべての基本操作をサポートします.
>>> from fractions import Fraction as F
>>>
>>> F(1,3) + F(1,3)
Fraction(2, 3)
>>>
>>> 1 / F(2,3)
Fraction(3, 2)
>>>
>>> F(-2,5) < 0
True
math(数学関数)
mathモジュールは、三角学、対数など、数学に関連する演算を処理するために使用される.
>>> import math
>>>
>>> math.pi # π
3.141592653589793
>>>
>>> math.e #
2.718281828459045
>>>
>>> math.cos(math.pi) #
-1.0
>>>
>>> math.log10(100) # 10 100
2.0
>>>
>>> math.pow(2, 5) # 2**5(2 5 )
32.0
>>>
>>> math.sqrt(9) # 9
3.0
>>>
>>> math.factorial(5) # 5!(5 )
120
random(擬似乱数生成)
randomモジュールは、擬似乱数を生成するために使用されます.乱数は数学、ゲーム、セキュリティなどの分野で使用でき、アルゴリズムの効率を高め、プログラムのセキュリティを高めるためにアルゴリズムに埋め込まれることも多い.
>>> import random
>>>
>>> l = ['p', 'y', 't', 'h', 'o', 'n']
>>>
>>> random.choice(l) # l
'y'
>>>
>>> random.shuffle(l) # l
>>> l
['t', 'y', 'h', 'p', 'n', 'o']
>>>
>>> random.randrange(0, 10) # , ( 1)
3
>>>
>>> random.random() # , [0,1)。
0.09207929369477685
上記はデジタル関連の各モジュールの一般的なアプリケーションですが、完全な機能リストは後述しません.Pythonドキュメントを参照してください.