Python cơ bản
Python hướng đối tượng
Python nâng cao
Quảng cáo

Các kiểu dữ liệu số trong Python

Hướng dẫn chi tiết các kiểu dữ liệu số trong Python( int, float và complex). Chúng ta cũng xem xét một số phép toán và hàm thường gặp với dữ liệu kiểu số.

So với các ngôn ngữ lập trình như C# hay Java, các kiểu số trong Python đơn giản hơn (ít kiểu) nhưng lại có điểm đặc thù. Các phép toán cơ bản của Python khá tương tự như trong C và các ngôn ngữ khác.

Giới thiệu chung về các kiểu số trong Python

Số là kiểu dữ liệu cơ bản nhất trong các ngôn ngữ lập trình. Ngôn ngữ Python hỗ trợ sẵn 3 kiểu số cơ bản: int (số nguyên có dấu lớn tùy ý), float (số thực), complex (số phức).

Python căn cứ vào cách viết (literal) của giá trị để tự xác định kiểu cho giá trị số tương ứng. Ví dụ, a = 10 sẽ tạo ra một số nguyên, b = 10. sẽ tạo ra một số thực, b = 10j sẽ tạo ra một số phức. Chi tiết về cách viết các loại số sẽ trình bày trong các phần tiếp theo của bài học.

Python hỗ trợ tất cả các phép toán số học toán cơ bản (+, -, *, /, v.v.) trên các kiểu số cũng như các phép toán phức tạp hơn (ở dạng các hàm) trong module math (như log, sin, cos, v.v.). Ngoài ra Python cũng rất nổi tiếng về các thư viện hỗ trợ tính toán do cộng đồng cung cấp.

Một đặc điểm quan trọng của kiểu số trong Python là tính bất biến (immutability). Nghĩa là giá trị số một khi đã tạo ra trong bộ nhớ (và có biến tham chiếu tới), nó sẽ không thay đổi được nữa. Nếu bạn thay đổi giá trị của một số, trên thực tế Python sẽ tạo ra một giá trị mới trong bộ nhớ.

Ví dụ nếu ban đầu bạn tạo một giá trị số qua lệnh gán a = 10, Python sẽ tạo một giá trị 10 trong bộ nhớ và để a trỏ vào giá trị này. Nếu sau đó bạn lại gán a = 10j (số phức), Python không hề thay đổi giá trị số mà a trỏ tới. Thay vào đó Python sẽ tạo một giá trị mới 10j trong bộ nhớ và để a trỏ tới giá trị mới này. Giá trị cũ 10 sẽ không còn được tham chiếu tới nữa. Sau một thời gian Garbage Collector sẽ dọn dẹp giá trị này để thu hồi bộ nhớ.

Ghi chú: Nếu bạn đã học lập trình C# thì string cũng là một kiểu dữ liệu bất biến như vậy. Mọi thay đổi trên một xâu đều dẫn đến tạo ra xâu mới.

Kiểu số nguyên int

Kiểu int biểu diễn các số nguyên có dấu với độ lớn tùy ý. Kiểu int trong Python không sử dụng số bit cố định để biểu diễn như trong các ngôn ngữ khác. Tùy thuộc vào giá trị cụ thể Python sẽ chọn số bit phù hợp. Giá trị nguyên lớn nhất mà Python biểu diễn được chỉ phụ thuộc vào bộ nhớ.

Python hỗ trợ biểu diễn số nguyên dương, số nguyên âm, số ở dạng thập phân, hệ cơ số 8, hệ cơ số 16.

Khi biểu diễn số ở cơ số 8 bạn dùng tiếp tố 0o hoặc 0O (số không và chữ o hoa/thường). Khi biểu diễn số ở hệ 16 thì dùng tiếp tố 0x hoặc 0X (số 0 và chữ x/X)

Dưới đây là ví dụ về cách biểu diễn số nguyên trong Python:

Giá trị Ghi chú
100 Số nguyên dương
-100 Số nguyên âm
0o100, 0O100 Số dương ở cơ số 8 (số 64 cơ số 10)
-0o100, -0O100 Số âm ở cơ số 8
0x100, 0X100 Số dương ở cơ số 16 (256 cơ số 10)
-0x100, -0X100 Số âm ở cơ số 16

Chú ý khi viết số ở cơ số 8 tốt nhất là dùng chữ o (thường) do chữ O (hoa) rất dễ nhầm lẫn với số 0.

Python cũng cho phép dùng ký tự gạch chân _ để nhóm các chữ số trong biểu diễn số:

Ví dụ

>>> i = 1_000_000 # tương đương với 1000000 nhưng dễ đọc hơn nhiều
>>> i
1000000

Kiểu boolean trong Python cũng là một kiểu con của kiểu số nguyên. Trong đó 0 tương ứng với False, mọi giá trị nguyên khác tương ứng với True.

Ghi chú: Python 2.x có hai kiểu số nguyên int và long. Kiểu long cần biểu diễn với hậu tố L (hoặc l). Số nguyên ở hệ cơ số 8 viết bắt đầu bằng 0. Vì vậy, khi đọc tài liệu nên lưu ý xem đó là Python 2 hay Python 3. Hai phiên bản này có nhiều điểm không tương thích.

Để biến đổi từ các kiểu dữ liệu khác về số nguyên bạn có thể sử dụng hàm int(). Ví dụ:

Ví dụ

>>> age = int(input("Your age: ")) # chuyển chuỗi về số nguyên
Your age: 37
>>> print('You were born in', 2020-age)
You were born in 1983
>>> 

Kiểu số thực float

Trong Python float dùng để biểu diễn số thực dấu phảy động. Để viết số thực trong Python bạn cần đặt 1 dấu chấm thập phân. Dưới đây các cách biểu diễn giá trị thực trong Python:

Giá trị float Ghi chú
0.0 Giá trị 0.0 (float) chưa chắc đã bằng 0 (int)
100.0 Số thực dương
-100.0 Số thực âm
100e2, -100e2 Cách viết khoa học, bằng +/- 100 * 10^2 = +/- 10000.0
100e-2, -100e-2 Cách viết khoa học, bằng +/- 100 * 10^-2 = +/- 1.0
100., -100. Không cần viết số 0 sau dấu chấm thập phân, tương đương 100.0, -100.0

Bạn có thể xem các thông tin về kiểu float như sau:

Ví dụ

>>> import sys
>>> sys.float_info
sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)
>>> sys.float_info.max # giá trị cực đại của kiểu float
1.7976931348623157e+308
>>> sys.float_info.min # giá trị cực tiểu của kiểu float
2.2250738585072014e-308
>>>

Bạn cũng có thể dùng ký tự gạch chân đế nhóm các chữ số khi viết số thực:

Ví dụ

>>> i = 1_000_000.001
>>> i
1000000.001

Để biến đổi từ kiểu dữ liệu khác về kiểu float bạn có thể sử dụng hàm float().

Ví dụ

>>> exchange_rate = float(input("Exchange Rate: "))
Exchange Rate: 
23.3

>>> print('USD 100 will be VND', exchange_rate * 100)
USD 100 will be VND 2330.0
>>> 

Trong phép toán mà toán hạng bao gồm cả số thực và số nguyên, kết quả của cả phép toán sẽ thuộc kiểu số thực.

Ví dụ

>>> 1 + 2.0 # kết quả sẽ thuộc kiểu số thực
3.0
>>> 2 * 3.0
6.0
>>> 3.0 ** 2
9.0

Kiểu số phức complex

Python là một trong số ít các ngôn ngữ hỗ trợ trực tiếp kiểu số phức. Tuy nhiên số phức tương đối ít được sử dụng.

Trong toán học, số phức được biểu diễn ở dạng tổng quát a + bi với i là đơn vị ảo. Trong Python, đơn vị ảo được biểu diễn bằng ký tự j hoặc J.

Như vậy, số phức trong Python cần chứa ký tự j (hoặc J) để biểu diễn phần ảo. Dưới đây là ví dụ về cách biểu diễn số phức trong Python:

Giá trị phức Ghi chú
3.14j Chỉ có phần ảo (0 + 3.14j)
45.j Chính là (0 + 45j)
3 + 2j Số phức (3 + 2j)
1+3.2e25j Phần ảo biểu diễn ở dạng khoa học
1+j Lỗi: j ở đây sẽ hiểu là một biến. Bạn phải viết 1 + 1j

Lưu ý: j (J) phải đi kèm số thì mới được xem là đơn vị ảo. Nếu đi một mình, j hay J sẽ bị xem là tên biến. Vì vậy 1 + j là một biểu thức (với j là một biến) nhưng 1 + 1j là một số phức.

Để làm việc riêng với phần thực hoặc phần ảo bạn có thể sử dụng cách sau:

Ví dụ

>>> c = 1.23 + 4.56j
>>> c.real
1.23
>>> c.imag
4.56
>>>

realimag là hai thành viên của kiểu complex giúp bạn trích giá trị của phần nguyên và phần ảo.

Các phép toán trên kiểu số

Python hỗ trợ tất cả các phép toán số học cơ bản trên kiểu số. Đa số các phép toán này có hình thức tương tự như trong C, một số có dạng hơi khác.

Phép toán Ý nghĩa Sử dụng Ví dụ
+ Phép cộng số học a + b
Phép trừ số học a – b
* Phép nhân số học a * b
/ Phép chia số học a / b
% Phép chia lấy dư a % b 4 % 2 = 0, 4 % 3 = 1
** Phép lũy thừa a ** b 2 ** 3 = 8
// Phép chia lấy phần nguyên a // b 9 // 2 = 4, 11 / 3 = 3, -11//3 = -4

Các phép so sánh có thể áp dụng trên tất cả các kiểu số. Kết quả của phép toán so sánh thuộc về kiểu boolean (True/False).

Phép toán Ý nghĩa Sử dụng
== So sánh bằng a == b
!= So sánh khác a != b
> So sánh lớn hơn a > b
< So sánh nhỏ hơn a < b
>= Lớn hơn hoặc bằng a >= b
<= Nhỏ hơn hoặc bằng a <= b

Ghi chú: Lưu ý trong Python 2.x có hai phép toán so sánh khác != và <>. Trong Python 3.x chỉ còn phép so sánh != (như trong C).

Python hỗ trợ các phép toán gán tương tự như trong C:

Phép toán Cách dùng Ý nghĩa
+= a += b tương đương a = a + b
-= a -= b a = a – b
*= a *= b a = a * b
/= a /= b a = a / b
%= a %= b a = a % b
**= a **= b a = a ** b
//= a //= b a = a // b

Python cung cấp một số hàm xử lý số tích hợp sẵn cho kiểu số:

abs(x) Lấy giá trị tuyệt đối của x
int(x) Chuyển đổi x sang kiểu số nguyên
float(x) Chuyển đổi x sang kiểu dố thực
complex(re,im) Tạo số phức với phần thực re, phần ảo im.
divmod(x,y) Thực hiện cặp phép toán (x//y,x%y), ví dụ divmod(10, 2) cho kết quả (5, 0)
pow(x,y) Tương tự x ** y
hex(x) Trả về dạng biểu diễn cơ số 16 của số x
oct(x) Trả về dạng biểu diễn cơ số 8 của số x

Nếu bạn cần thực hiện các phép toán phức tạp hơn (như lượng giác, logaritm), bạn có thể sử dụng module math như sau:

Ví dụ

import math # sử dụng thư viện math

math.sin(180)
math.log(1)
math.factorial(10)

Kết luận

Trong bài học này chúng ta đã xem xét chi tiết các kiểu dữ liệu số trong Python, bao gồm int, float và complex. Chúng ta cũng xem xét một số phép toán thường gặp với dữ liệu kiểu số.

So với các ngôn ngữ lập trình như C# hay Java, các kiểu số trong Python đơn giản hơn (ít kiểu). Tuy nhiên, các kiểu số trong Python lại có điểm đặc thù là bất biến, tương tự như string của C#.

Các phép toán cơ bản của Python khá tương tự như trong C và các ngôn ngữ khác. Python cũng cung cấp thư viện cho các hàm toán học math.

Bài viết này đã giúp ích cho bạn?

Advertisements