數字

  • 支援整數(如: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

■ 乘法

>>> 67
42

>>> 6723
252

■ 除法:有兩種做法

作法一

/ :算出浮點除法(十進位除法)→ 產生浮點數的結果

>>> 9 / 5
1.8

作法二

//:算出整數除法(捨去除法)→ 得到整數的結果,它會去掉所有餘數

>>> 9 // 5
1

■ 模數(餘數)

在 Python 中, % 字元有許多用法。當它被放在兩個數字之間時,將第一個數字除以第二個會產生餘數

>>> 9 % 5
4

■ 同時取得 "商數(捨去的)"以及 "餘數" 的方法

作法一

  1. 使用函式 divmod,提供整數 9 與 5 給它
  2. 它會回傳一個擁有兩個項目的結果,稱為 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 的值,可以做 = 號指派

減法

  1. Python 先計算右邊的減法 a - 3,記下它的結果
  2. 再將它指派給 = 號左邊的 a , a = a - 3
>>> a = 95
>>> a = a - 3
>>> a

92

整數捨去除法

  1. 將 13 指派給 a
  2. 嘗試簡短的 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()函式。會保留整數,捨棄小數的部份。

資料類型的「數字」轉換成「整數」

  1. 浮點數 → 轉換成整數(小數點後面的數字都會被捨去)
>>> int(98.6)
98

>>> int(1.0e4)
10000
  1. 轉換只含數字的文字字串(它們有時會用到 + 或 - 號
>>> int('99')
99

>>> int('-23')
-23

>>> int('+12')
12
  1. 整數 → 整數(不會產生改變)
>>> int(12345)
12345
  1. 看起來不像數字的東西 → 產生例外(遇到錯誤時,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()函數無法處理

  1. 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'
  1. 混合數字類型 → python 會自動轉換
>>> 4 + 7.0
11.0

資料類型的「布林」轉換成「整數」

Python 最簡單的資料類型是布林,它的值只有TrueFalse

  1. 布林 → 整數(用 1 與 0 值來表示)
>>> int(True)
1

>>> int(False)
0
  1. 布林值 + 整數/浮點數 混合使用(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
  1. 整數 → 浮點數
>>> float(98)
98.0

>>> float('99')
99.0
  1. 含有有效的浮點數字元(數字、符號、小數點、後面有指數)的字串 → 真正浮點數
>>> float('98.6')
98.6

>>> float('-1.5')
-1.5

>>> float('1.0e4')
10000.0

數學函式

  • Python 提供了平方根、餘弦等常見的數學函數。
  • 在本書「附錄C Py科學」,討論Python在科學領域的用途。

results matching ""

    No results matching ""