數字
- 支援整數(如:5、1,000,000,000)
- 支援浮點數(如:3.1416、14.99、1.87e4)
- 可用此表格的數學運算子來算數
運算子 | 說明 | 範例 | 結果 |
---|---|---|---|
+ | 加法 | 5 + 8 | 13 |
- | 減法 | 90 - 10 | 80 |
* | 乘法 | 4 * 7 | 28 |
/ | 浮點除法 | 7 / 2 | 3.5 |
// | 整數(捨去)除法 | 7 // 2 | 3 |
% | 模數(餘數) | 7 % 3 | 1 |
** | 乘幕 | 3 ** 4 | 81 |
整數
常值整數
所有連續的數字
>>> 5
5
一般的零(0)
不要將零放在其他數字前面,會出現例外錯誤
>>> 0
0
>>> 05
SyntaxError: invalid token
Python的例外(exception),也就是一種程式錯誤,是 Python 的主要錯誤處理機制。 "invalid token 不正確的標記"(在本書p.26 基數,會解釋意思)
正整數
一連串的數字,如果將 + 號放在數字前,該數字保持不變
>>> 123
123
>>> +123
123
負整數
在數字前插入一個 - 號
>>> -123
-123
運算子
用Python來做一般的數學計算,與使用計算機一樣。可以任意地加入任何數量的數字和運算子
■ 加法、減法
>>> 100 - 7
93
>>> 4 - 10
-6
>>> 5 + 9 + 3
17
>>> 4 + 3 - 2 -1 + 6
10
■ 格式:不一定要在所有數字與運算子之間,加入空格
>>> 5+9 + 3
17
■ 乘法
>>> 6 * 7
42
>>> 6 * 7 * 2 * 3
252
■ 除法:有兩種做法
作法一
/ :算出浮點除法(十進位除法)→ 產生浮點數的結果
>>> 9 / 5
1.8
作法二
//:算出整數除法(捨去除法)→ 得到整數的結果,它會去掉所有餘數
>>> 9 // 5
1
■ 模數(餘數)
在 Python 中, % 字元有許多用法。當它被放在兩個數字之間時,將第一個數字除以第二個會產生餘數
>>> 9 % 5
4
■ 同時取得 "商數(捨去的)"以及 "餘數" 的方法
作法一
- 使用函式 divmod,提供整數 9 與 5 給它
- 它會回傳一個擁有兩個項目的結果,稱為 tuple
>>> divmod(9,5)
(1, 4)
作法二
分別計算它們
>>> 9 // 5
1
>>> 9 % 5
4
■ 例外
使用任何除法來除以零,都會產生例外
>>> 5 /0
Traceback (most recent call last):
File "<pyshell#27>", line 1, in <module>
5/0
ZeroDivisionError: division by zero
>>> 7 // 0
Traceback (most recent call last):
File "<pyshell#30>", line 1, in <module>
7 // 0
ZeroDivisionError: integer division or modulo by zero
■ 混合使用:常值整數及"已被指派整數值"的變數
>>> a = 95
>>> a
95
>>> a - 3
92
指派
■ 改變 a 的值,可以做 = 號指派
減法
- Python 先計算右邊的減法 a - 3,記下它的結果
- 再將它指派給 = 號左邊的 a , a = a - 3
>>> a = 95
>>> a = a - 3
>>> a
92
整數捨去除法
- 將 13 指派給 a
- 嘗試簡短的 a = a // 4
>>> a = 13
>>> a //= 4
>>> a
3
■ 運算子放在 = 號前面
來結合算術運算與賦值
>>> a = 95
>>> a -= 3
>>> a
92
>>> a += 8
>>> a
100
>>> a *= 2
>>> a
200
>>> a /= 3
>>> a
66.66666666666667
優先順序
- Python 運算子優先順序表(在本書p.465,附錄F)
- 如果想要做計算,簡單的做法是用括號來將程式分組
- 透過括號這種方式,所有閱讀程式的人都不需要猜測它的目的,或查看優先順序規則
>>> 2 + (3 * 4) 14
基數
- 整數都會被預設為十進位(基數為10),除非加上前置符來指定其他的基數
- 基數就是在需要 "進一位" 之前有多少數字
- 基數2(二進位):只有 0 與 1 這兩個數字。將 1 加上 1,將會得到 10(1個十進位的 2 ,加上 0 個十進位的 1 )
- 為什麼要使用 10 以外的基數?它們在位元等級的操作非常好用 (本書第七章,會談到此,也會說明如何將某個基數數字換成另一個基數)
■ 在 Python 中,除了十進位之外,可以用三種基數來表達常值整數
- 二進位(基數2): 0b 或 0B
- 八進位(基數8): 0o 或 0O
- 十六進位(基數16): 0x 或 0X
十進位
十進位, 1 (十進位)個十與 0 個一
>>> 10
10
二進位
二進位, 1 (十進位)個二與 0 個一
>>> 0b10
2
八進位
八進位, 1 (十進位)個八與 0 個一
>>> 0o10
8
十六進位
十六進位, 1 (十進位)個十六與 0 個一
>>> 0x10
16
- 基數 16 會用到的數字:0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f
- 0xa 是十進位的 10
- 0xf 是十進位的 15
- 0xf 加 1 會得到 0x10(十進位的 16)
int() 類型轉換
- Python資料類型轉換成整數,可使用int()函式。會保留整數,捨棄小數的部份。
資料類型的「數字」轉換成「整數」
- 浮點數 → 轉換成整數(小數點後面的數字都會被捨去)
>>> int(98.6)
98
>>> int(1.0e4)
10000
- 轉換只含數字的文字字串(它們有時會用到 + 或 - 號)
>>> int('99')
99
>>> int('-23')
-23
>>> int('+12')
12
- 整數 → 整數(不會產生改變)
>>> int(12345)
12345
- 看起來不像數字的東西 → 產生例外(遇到錯誤時,python 提醒的方式,而不是像其他語言一樣讓程式當掉)
>>> int('99 bottles of beer on the wall')
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
int('99 bottles of beer on the wall')
ValueError: invalid literal for int() with base 10: '99 bottles of beer on the wall'
>>> int('')
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
int('')
ValueError: invalid literal for int() with base 10: ''
文字字串開頭是有效的數字字元(99),它後面的字元是int()函數無法處理
- int(),無法處理含有小數點或指數的字串
>>> int('98.6')
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
int('98.6')
ValueError: invalid literal for int() with base 10: '98.6'
>>> int('1.0e4')
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
int('98.6')
ValueError: invalid literal for int() with base 10: '98.6'
- 混合數字類型 → python 會自動轉換
>>> 4 + 7.0
11.0
資料類型的「布林」轉換成「整數」
Python 最簡單的資料類型是布林,它的值只有True與False
- 布林 → 整數(用 1 與 0 值來表示)
>>> int(True)
1
>>> int(False)
0
- 布林值 + 整數/浮點數 混合使用(False 相當於 0 或 0.0,True 相當於 1 或 1.0)
>>> True + 2
3
>>> False + 5.0
5.0
int 有多大?
- int 可以是任何大小,甚至比 64 位元還要大
- 10**100 稱為 googol(原本Google使用此名稱,後改成較容易拼寫名稱)
>>> googol = 10**100
>>> googol
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>>> googol * googol
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
- 許多語言,當你試著執行這種東西,會產生整數溢位的現象,也就是電腦無法提供數字需要的空間。Python 可以毫無懸念地處理龐大的整數。
浮點數
- 整數是完整的數字,但浮點數(Python中稱 float )會有小數點。
- 浮點數的處理方式與整數很像,可以使用運算子(+、—、*、/、//、**、%)與divmod()函式。
要將其他類型轉換成浮點數,要使用 float()函式。
布林 → 浮點數
>>> float(True)
1.0
>>> float(False)
0.0
- 整數 → 浮點數
>>> float(98)
98.0
>>> float('99')
99.0
- 含有有效的浮點數字元(數字、符號、小數點、後面有指數)的字串 → 真正浮點數
>>> float('98.6')
98.6
>>> float('-1.5')
-1.5
>>> float('1.0e4')
10000.0
數學函式
- Python 提供了平方根、餘弦等常見的數學函數。
- 在本書「附錄C Py科學」,討論Python在科學領域的用途。