Python Numeric Literals(數值型別與常量)
Integer and Floating-Point literals
- 整數: 10進位,無窮精度
- 浮點數: 小數點格式或加上 e 或 E (stands for exponent 指數)
Hexdecimal Literals(16進制常量)
- 0==x== 或 0==X== 起始的常量 (x stands for he==X==decimal)
- 0~9, A~F 或 0~9, a~f
Octal Literals(8進制常量)
- 0==o== 或 0==O== 起始的常量 (o stands for ==O==ctal)
- 0~7
Binary Literals(2進制常量)
- 0==b== 或 0==B== 起始的常量 (b stands for ==B==inary)
- 0 or 1
Complex Literals(複數)
- R + Ij
- complex(Real, image)
進制轉換
電腦中浮點數本身並不精確,因故若不採用專用套件並無法十進位將浮點數轉成其他進制。
是故,下方範例僅 十進位整數 轉其他進制範例。
整數轉換成其他進制的字串(Integer -> String)
- syntax
- hex(int)
- oct(int)
- bin(int)
num_integer = 9
print(hex(num_integer))
print(oct(num_integer))
print(bin(num_integer))
===
0x9
0o11
0b1001
其他進制文字轉十進位整數(String -> Number)
- syntax: int('literal', base)
hex_string ='0x9'
print(int(hex_string, 16))
===
9
oct_string ='0o11'
print(int(oct_string, 8))
===
9
bin_string ='0b1001'
print(int(bin_string, 2))
===
9
# 預設為十進位
five = int('5')
print(five)
===
5
Python 數值運算
- Python3 數值運算相關工具分三大類
- Expression operators: +, -, *, /, >>, **, &, ...
- Built-in Mathematical Functions: pow(), abs(), round(), ...
- Utility modules: random, math, ....(需要 import)
- Operators 也可被 overload
- 常用運算:
- 同時取商與餘 : divmod(dividend,divisor)
- 真除法 : /, 保留餘數, 結果有小數點
- 向左取值 (注意負數) : //
- 向原點取值 : math.trunc(num)
- 取餘數 : %
同時取商與餘
# function : divmod(dividend,divisor)
print(divmod(100,3))# tuple2
print(divmod(100,3)[0]) # 商
print(divmod(100,3)[1]) # 餘
===
(33, 1)
33
1
真除法(True Divisions)
# operator : /
x = -100/3
print(x)
===
33.333333333333336
向左取值 (Floor division, 注意負數)
# operator : //
x = -100//3
print(x)
===
-34
x = 100//3
print(x)
===
33
向原點取值
# function: math.trunc(num)
import math
print(math.trunc(-33.3))
===
-33
import math
print(math.trunc(33.3))
===
33
取餘數
# operator : %
print(100%3)
===
1
Python Decimal(十進位)
- 用來修正 python 浮點數精確值不足問題
為 Decimal 設定精確值(Precision)
Precision: 設定顯示的精確位數
Global (全域設定)
from decimal import *
getcontext().prec = 4
print(Decimal(1) / Decimal(3))
print(Decimal(1000) / Decimal(3))
print(Decimal(100000) / Decimal(3))
print(Decimal(1000000) / Decimal(3))
===
0.3333
333.3
3.333E+4
3.333E+5
- Temporary (臨時精確設定)
from decimal import *
with localcontext() as ctx:
ctx.prec= 4
print(Decimal(1000000) / Decimal(3))
===
3.333E+5
Python Fraction(浮點)
- 可將指定數值轉換成為 分子 與 分母 結構,且 Fractions 間可作數值操作。
- Fraction 建構方式
- Fraction(numerator=0, denominator=1) : 分母為 0 時拋出 ZeroDivisionError
- Fraction(int|float|str|Decimal|Fraction)
- Fraction(tuple2) : 給予一個長度為二的 list / sequence,Asterisk()指的是 unpack。
- Fraction 建構範例
from fractions import *
# from fractions import Fraction
f_str = Fraction('.2')
print(f_str)
# 1/5
f_float = Fraction(10.5)
print(f_float)
# 21/2
f = Fraction(3,5)
print(f)
# 3/5
f = Fraction( *(3,5) )
print(f)
# 3/5, unpack tuple2
- Fraction 操作範例
from fractions import *
f1 = Fraction(4,3) # 4/3
f2 = Fraction(9, 8) # 9/8
print(f1+f2)
# 59/24
print(f1/f2)
# 32/27
print(f1//f2)
# 1
print(f1%f2)
# 5/24 通分後取餘數
- Fraction 轉換操作範例
- float.as_integer_ratio() : 將浮點數轉成 tuple2
from fractions import *
fp = 2.5
f = Fraction(fp)
print(f)
# 5/2 , 直接使用 Fraction(float 建構)
f_tuple = (4, 3)
f = Fraction(*f_tuple)
print(f)
# 4/3 , 使用 Fraction(*tuple2) 建構
fp = 2.5
f = Fraction(*fp.as_integer_ratio())
print(f)
# 5/2 , fp 先經由 float.as_integer_ratio() 轉 tuple2, 再使用 Fraction(*tuple2) 建構
在 Python2 Compile Python3 程式碼會讓你出 Bug 的部分
- python3 vs python2 取商 (//)與模(%) operators 定義不同