Kiểu logic Boolean trong Python
Kiểu logic trong Python kí hiệu là bool
và gồm có hai giá trị là True
hoặc False
.
Trong bài viết Câu lệnh điều kiện if trong Python, bạn đã sử dụng kiểu logic bool
trong Python. Trong biểu thức <điều kiện>
của câu lệnh rẽ nhánh if
, kết quả của biểu thức đó là một trong hai giá trị True
hoặc False
. Bài viết này, chúng ta sẽ tìm hiểu sâu hơn về kiểu Boolean trong Python.
1. Giới thiệu về kiểu logic bool
trong Python
- Khi thực hiện các phép toán so sánh hoặc các phép toán (toán tử) logic, kết quả trả về chỉ có thể là đúng
True
hoặc saiFalse
. Khi đó, ta sử dụng kiểubool
để biểu diễn các giá trị đúng và sau này. Để biểu diễn giá trị đúng, ta dùng từ khóaTrue
, để biểu diễn giá trị sai ta dùng từ khóaFalse
. Chúng được gọi là các giá trị logic trong Python. True
vàFalse
cũng giống như các số nguyên0
và1
. Tuy nhiên, nếu ta ép kiểu từ số nguyên hoặc các kiểu dữ liệu khác sang kiểubool
thì mọi giá trị khác0
hoặc khác rỗng đều tương ứng vớiTrue
. Hãy xem ví dụ sau.
>>> True == 1 True >>> False == 0 True >>> True + True 2 >>> True == 2 False >>> bool(1) True >>> bool(10) True >>> bool("") False >>> bool("a") True
2. Các phép toán trên kiểu Boolean trong Python
2.1. Các toán tử so sánh
Kết quả trả về của các toán tử so sánh là kiểu boolean, tức là đúng True
hoặc sai False
. Python có các toán tử so sánh bằng nhau ==
, khác nhau !=
, lớn hơn >
, nhỏ hơn <
, lớn hơn hoặc bằng >=
, nhỏ hơn hoặc bằng <=
.
>>> a = 1 >>> b = 5 >>> c = 'abc' >>> d = 'aBc' >>> a == b False >>> a >= b False >>> c < d False >>> c != d True
Lưu ý rằng các toán tử so sánh này phải sử dụng với hai toán hạng có cùng kiểu, trong ví dụ trên nếu ta cố tình so sánh a
và c
thì Python sẽ báo lỗi:
>>> a < c Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: '<' not supported between instances of 'int' and 'str'
2.2. Các toán tử logic Boolean trong Python
- Phép toán
and
sẽ trả về kết quảTrue
nếu cả hai toán hạng đều làTrue
. - Phép toán
or
sẽ trả về kết quảTrue
nếu một trong hai toán hạng làTrue
. - Phép toán
not
được sử dụng để đảo ngược giá trị chân lý của một biểu thức.
Bảng giả trị chân lý của các phép toán như sau:
2.3. Toán tử in
Toán tử in
được sử dụng để kiểm tra xem một giá trị/phần tử có tồn tại trong một tập hợp/chuỗi/danh sách… hay không, kết quả trả về là kiểu Boolean.
>>> A = [1,2,'3','o2'] >>> 1 in A True >>> '1' in A False >>> 3 in A False >>> '3' in A True
Đối với các số nguyên, có thể kết hợp với hàm range() để kiểm tra xem một số có nằm trong khoảng, đoạn nào không.
>>> 3 in range(1,10) True >>> 9 in range(1,10) True >>> 10 in range(1,10) False >>> 0 in range(1,10) False >>> 1 in range(1,10) True
2.4. Toán tử is
Toán tử is
dùng để kiểm tra kiểu của một đối tượng trong Python, nó cũng dùng để kiểm tra xem hai toán hạng có cùng tham chiếu đến một đối tượng hay không.
>>> x=5
>>> x is int
False
>>> type(x) is int
True
>>> type(x) is float
False
>>> y = 5.
>>> type(y) is float
True
Bạn cần lưu ý, toán tử is
có nghĩa là
, nó khác với toán tử ==
, nghĩa bằng nhau
(về mặt giá trị). Để hiểu rõ hơn về sự khác nhau giữa hai toán tử này, chúng ta xem xét ví dụ sau đây.
Đầu tiên, chúng ta sẽ tạo một danh sách mới và đặt tên cho nó a
, sau đó xác định một biến khác b
trỏ đến cùng một đối tượng danh sách:
>>> a = [ 1 , 2 , 3 ] >>> b = a
Hãy kiểm tra giá trị của hai biến này. Bạn có thể thấy là hai danh sách giống hệt nhau:
>>> a [ 1 , 2 , 3 ] >>> b [ 1 , 2 , 3 ]
Bởi vì hai danh sách trông giống nhau, nên so sánh chúng sử dụng toán tử ==
thì kết quả trả về là True
:
>>> a == b True
Tuy nhiên, điều đó không cho chúng ta biết rằng a
và b
đang thực sự trỏ đến cùng một đối tượng (dù sự thực chúng là một vì cách chúng ta định nghĩa biến b
)
Để kiểm tra chúng có là một (tức cùng trỏ đến một địa chỉ ô nhớ), ta cần sử dụng toán tử is
>>> a is b True
Chúng ta hãy xem điều gì xảy ra khi chúng ta tạo một danh sách c
giống hệt danh sách a
:
>>> c = list(a)
hoặc sử dụng câu lệnh sau cũng được
>>> c = [ 1 , 2 , 3 ]
Một lần nữa bạn sẽ thấy rằng danh sách mới mà chúng ta vừa tạo trông giống hệt với đối tượng danh sách được tham chiếu tới bởi tên biến a
và b
:
>>> c [ 1 , 2 , 3 ]
Bây giờ đây là lúc chuyện thú vị xảy ra, hãy cùng so sánh c
với a
bằng cách sử dụng toán tử ==
và toán tử is
>>> a == c True >>> a is c False
Điều gì đã xảy ra? Thực sự là c
và a
đang chỉ vào hai đối tượng khác nhau, mặc dù nội dung của chúng có thể giống nhau, còn a
và b
thì chỉ vào cùng một đối tượng. Để kiểm tra điều này, bạn có thể dùng hàm id()
, lưu ý rằng địa chỉ ô nhớ này ở trên máy tính của bạn có thể khách với của tôi.
>>> id(a) 2337468908672 >>> id(b) 2337468908672 >>> id(c) 2337469229184
Bạn có thể xem thêm ví dụ về sự khác nhau giữa hai toán tử is
và ==
tại đây https://www.geeksforgeeks.org/difference-operator-python/
2.5. Hàm bool()
Hàm bool()
trả về kết quả False
nếu đối số là số 0
, None
hoặc xâu rỗng, danh sách rỗng… Các trường hợp khác, kết quả trả về đều là True
.
>>> bool(0) False >>> bool(None) False >>> bool('') False >>> bool([]) False >>> bool(()) False >>> bool(set()) False >>> bool({}) False >>> bool(1) True >>> bool('abc') True >>> bool([1, 2, 3]) True
Trong các phép toán đối với số nguyên, True
tương đương với số 1
, False
tương đương với số 0
.
>>> True + 1 2 >>> False + 1 1 >>> int(True) 1 >>> int(False) 0