1. Kiểu dữ liệu số (numeric) trong Python
Python hỗ trợ các kiểu dữ liệu số: số nguyên (integer), số thực (float) và số phức (complex). Python định nghĩa các lớp (class) là int, float và complex để lưu trữ và xử lý các kiểu dữ liệu số.
– Số nguyên (integer) được đại diện bởi lớp int
, chứa các số nguyên dương hoặc nguyên âm (không có phần thập phân). Trong Python, số nguyên không có giới hạn về độ dài.
– Số thực (float) được đại diện bởi lớp float
, biểu diễn các số thực với dấu chấm động (có độ chính xác với 15 chữ số ở phần thập phân). Các số thực có thể được biểu diễn với ký hiệu e hoặc E là một cách ghi khoa học của a10b. Ví dụ, 1.5e2 tương đương 1.5 x 102.
– Số phức (complex) được đại diện bởi lớp complex
. Số phức được viết dưới dạng x + yj. Trong đó, x là phần thực, y là phần ảo.
Trong Python, chúng ta có thể biểu diễn các số ở hệ nhị phân, thập lục phân (cơ số 16) và hệ bát phân. Chúng ta sẽ sử dụng tiền tố (prefix) ở trước một số để xác định số đó đang được biểu diễn ở hệ cơ số nào.Number System Prefix Binary ‘0b’ or ‘0B’ Octal ‘0o’ or ‘0O’ Hexadecimal ‘0x’ or ‘0X’
a = 5
print(type(a))
print("a is an integer number?", isinstance(a, int))
print(type(5.0))
c = 5 + 3j
print(c + 3)
print(type(c))
print("c is a complex number?", isinstance(c, complex))
# Output: 107
print(0b1101011)
# Output: 253 (251 + 2)
print(0xFB + 0b10)
# Output: 13
print(0o15)
Kết quả
<class 'int'>
a is an integer number? True
<class 'float'>
(8+3j)
<class 'complex'>
c is a complex number? True
107
253
13
Chuyển đổi giữa các kiểu dữ liệu số trong Python
Khi cộng, trừ, nhân, chia một số nguyên với một số thực thì số nguyên tự động bị ép kiểu sang số thực để thực hiện phép tính. Do đó, kết quả thực hiện phép tính sẽ là một số thực.
print(1 + 2.0)
print(1 - 2.0)
print(1 * 2.0)
print(1 / 2.0)
Kết quả
3.0
-1.0
2.0
0.5
Chúng ta cũng có thể sử dụng các hàm được xây dựng sẵn trong Python như int()
, float()
và complex()
để chuyển đổi giữa các kiểu dữ liệu.
a = int(2.3)
b = int(-2.8)
c = float(5)
d = complex('3+5j')
print(a)
print(b)
print(c)
print(d)
Kết quả
2
-2
5.0
(3+5j)
Một số lưu ý khi sử dụng kiểu dữ liệu số trong Python
Khi tính toán giữa các số thực, chúng ta cần lưu ý về độ chính xác của kết quả. Ví dụ:
a = 1.1 + 2.2
print(a)
print("a == 3.3?", (a==3.3))
Kết quả
3.3000000000000003
a == 3.3? False
Rõ ràng, kết quả không phải là 3.3 mà là 3.3000000000000003. Điều này là do cơ chế lưu trữ dấu chấm động của phần thập phân trong máy tính bằng các số nhị phân 0 và 1 (do máy tính chỉ hiểu bit 0 và 1).
Ví dụ, số thập phân 0.1 được biểu diễn ở hệ nhị phân sẽ là một dãy nhị phân dài vô hạn là 0.000110011001100110011…. Tuy nhiên, máy tính của chúng ta chỉ lưu trữ một số hữu hạn các số nhị phân để biểu diễn số thập phân 0.1. Do đó, bất cứ số thập phân nào cũng mang tính chất chính xác tương đối.
Sử dụng module decimal trong Python
Mặc định, số thực (float) trong Python chỉ có độ chính xác với tối đa 15 chữ số ở phần thập phân. Chúng ta có thể sử dụng module decimal
được cài đặt sẵn trong Python để xác định độ chính xác là bao nhiêu số thập phân.
import decimal
#return 0.05000000000000000277555756156289135105907917022705078125
print(decimal.Decimal(0.05))
#return 0.05
print(decimal.Decimal('0.05'))
#return
a = 1.1 + 2.2
print(a)
#return
b = decimal.Decimal('1.1') + decimal.Decimal('2.2')
print(b)
Kết quả
0.05000000000000000277555756156289135105907917022705078125
0.05
3.3000000000000003
3.3
Khi bạn muốn cộng 1.1 và 2.2 để ra kết quả chính xác là 3.3 thì nên sử dụng module decimal
với decimal.Decimal('1.1')
và decimal.Decimal('2.2')
.
Để kiểm soát độ chính xác phần thập phân có bao nhiêu chữ số, chúng ta có thể sử dụng hàm getcontext()
với thuộc tính prec
. Ví dụ:
import decimal
# returns 0.07692307692307692307692307692
print(decimal.Decimal(1) / decimal.Decimal(13))
decimal.getcontext().prec = 10
#return 0.07692307692
print(decimal.Decimal(1) / decimal.Decimal(13))
Kết quả
0.07692307692307692307692307692
0.07692307692
2. Kiểu dữ liệu luận lý (boolean) trong Python
Kiểu dữ liệu luận lý (boolean) trong Python chỉ có 2 giá trị là True hoặc False. Trong Python, True được đại diện bởi giá trị 1 và False được đại diện bởi giá trị 0. Ví dụ:
x = (1 == True)
y = (1 == False)
a = True + 4
b = False + 10
print("x is", x)
print("y is", y)
print("a:", a)
print("b:", b)
Kết quả
x is True
y is False
a: 5
b: 10
3. Kiểu dữ liệu chuỗi ký tự (string) trong Python
Một chuỗi ký tự (string) là một chuỗi các ký tự được bao quanh bởi dấu nháy kép. Chúng ta có thể sử dụng cả dấu nháy đơn, dấu nháy kép hoặc 3 dấu nháy kép cho một chuỗi ký tự. Chuỗi ký tự (string) trong Python được đại diện bởi lớp str
.
Trong Python, không có kiểu dữ liệu ký tự (character), mà một ký tự là một chuỗi (string) có độ dài là 1 ký tự.
strings = "This is Python"
char = "C"
multiline_str = """This is a multiline string with more than one line code."""
unicode = u"\u00dcnic\u00f6de"
raw_str = r"raw \n string"
print(strings)
print(char)
print(multiline_str)
print(unicode)
print(raw_str)
Kết quả
This is Python
C
This is a multiline string with more than one line code.
Ünicöde
raw \n string
Lưu ý: Chuỗi u”\u00dcnic\u00f6de” chứa các ký tự Unicode. Trong đó, \u00dc đại diện cho Ü và \u00f6 đại diện cho ö. Còn r”raw \n string” là một chuỗi ký tự thô (raw string).