3.1 數字類型: int
, float
, complex
Python 有幾種數字類型,每一種都適合用於不同的任務和數據處理。我們已經提到過 int
, float
, complex
類型,以及布爾類型 bool
,它們是整數的子類。現在,我們詳細了解這些類型。
int
(整數):
這可能是 Python 中最常用的數字類型。整數可以是正或負數,且不具有小數位。 Python 支持任意精度,這意味著除非你的機器內存有限,否則數字的大小幾乎沒有限制。
float
(浮點數):
這些數字用於表示實數,可以包含小數點。Python 根據 IEEE 754 雙精度標準實現浮點數,因此小數點後約有15位精度。
complex
(複數):
複數具有實部和虛部。這兩部分都由浮點數表示。在 Python 中,虛部用後綴 j
或 J
來表示。例如,可以這樣創建一個複數:
complex_number = 3 + 5j
bool
(布爾值):
在 Python 中,True
和 False
是整數的特定版本,分別作為 1 和 0 運作。這使得它們可以用於算術運算和其他數學表達式。
算術運算:
Python 支持所有基本的算術運算,包括加、減、乘、除、整除、取餘數和指數。例如:
- 加法: 3 + 2
- 減法: 5 - 2
- 乘法: 2 * 3
- 除法: 7 / 2
- 整除: 7 // 2
- 取餘數: 7 % 2
- 指數: 2 ** 3
類型轉換:
我們已經討論過類型轉換(或轉型)。 可以用類型轉換函數將一種數字轉換為另一種,例如 int()
, float()
和 complex()
。
我們之前討論了一些數字類型轉換問題,其他的我們將在後續講座中更詳細地探討。
3.2 偽隨機數
有時程序員會遇到看似簡單的問題:「從指定列表中選擇一部電影作為晚間觀看」、「選擇彩票獲勝者」、「搖晃手機時洗牌播放列表」、「選擇加密消息的隨機數」。每當這種時候,他們會問一個合理的問題:如何獲得這個隨機數?
獲得「真正的」隨機數相當困難。 甚至計算機還需要特別的數學協處器來生成這樣的數字,滿足所有「真正隨機性」的要求。
因此,程序員想出了自己的解決方案— 偽隨機數。偽隨機數是一種序列,裡面的數字看起來是隨機的,但專家經過詳細分析可以找到其中的某些規律。這樣的數字不適合加密機密文件,但模擬遊戲中的骰子擲硬幣效果不錯。
存在許多算法來生成 偽隨機數序列,幾乎所有這些算法都是基於之前的數字以及一些輔助數字來生成下一個隨機數。
例如,以下程式將於屏幕上顯示 1000 個不重複的數字:
a = 41
c = 11119
m = 11113
seed = 1
def get_next_random():
global seed
seed = (a * seed + c) % m
return seed
for t in range(1000):
x = get_next_random()
print(x)
順便說一句,我們談的不僅僅是偽隨機數,而是這些數的 序列。因為單單看一個數字無法判斷其是否隨機。
可以通過不同方式獲取隨機數:
def get_random_number():
return 4 # 這絕對是隨機數(因為是用骰子擲的),見「骰子笑話」
3.3 random
庫
Python 有一個內建的random 庫,非常有趣。根據其名稱,你可能已經猜到,這個庫用來生成[偽]隨機數。
雖然 random 是內建庫,但它仍是個單獨的庫,所以在使用之前需要將其導入到我們的代碼中。 這可以通過關鍵字 import
完成。例如:
import random
在 random 庫中有很多有趣的方法,今天我們只會介紹其中的兩個:方法random()
和 方法randint()
。它們執行相似但不同的任務:
方法 random.random()
:
此方法返回一個 0.0 和 1.0 之間的隨機浮點數。 這個範圍內的數字是均勻分佈的。這意味著範圍內的每個數字都有相同的被選中機會。
import random
probability = random.random()
print("隨機概率:", probability)
方法 random.randint(a, b):
這個函數在 a
和 b
的範圍內返回一個隨機整數。 與返回 0 到 1 範圍內浮點數的 random.random()
不同,randint()
用於選擇整數。例如, random.randint(1, 10)
可以返回任何 1 到 10 之間的整數,包括這兩個終點值。
import random
dice_roll = random.randint(1, 6) # 模擬擲骰子
print("擲出的數:", dice_roll)
這些是非常有用且有趣的方法,請隨心使用。
3.4 math
庫
既然如此,我再來介紹一本有趣的圖書館。那就是數學庫 math
。裏面包含了基本的數學函數和常數,如 π 和 e。
就像random 庫一樣,在使用之前需要將其導入:
import math
這是 Python math
庫的主要函數和常數的表格:
函數/常數 | 描述 |
---|---|
math.pi | 常數 π,約等於 3.14159 |
math.e | 自然對數的基數,約等於 2.71828 |
math.sqrt(x) | 返回 x 的平方根 |
math.exp(x) | 返回 e 的 x 次方 |
math.log(x[, base]) | 返回以 base 為基數的 x 的對數,如果指定 base;否則返回自然對數。 |
math.cos(x) | 返回 x 的餘弦值,x 以弧度表示 |
math.sin(x) | 返回 x 的正弦值,x 以弧度表示 |
math.tan(x) | 返回 x 的正切值,x 以弧度表示 |
math.ceil(x) | 將數字向上捨入到最接近的整數 |
math.floor(x) | 將數字向下捨入到最接近的整數 |
math.factorial(x) | 返回 x 的階乘 |
即使你不太喜歡數學,也不打算在未來10年內使用這些 函數,這裡至少有三個非常有用的:
sqrt()
— 數字的平方根ceil()
— 向上捨入到最接近的整數floor()
— 向下捨入到最接近的整數
示例:
import math
number = 9.7
rounded_up = math.ceil(number) # 向上捨入,結果是 10
rounded_down = math.floor(number) # 向下捨入,結果是 9
print("向上捨入的數:", rounded_up)
print("向下捨入的數:", rounded_down)
GO TO FULL VERSION