Các Vấn Đề Thường Gặp trong Python - [1] So sánh None và Boolean

By JoeVu, at: 14:09 Ngày 10 tháng 1 năm 2023

Thời gian đọc ước tính: __READING_TIME__ phút

Common Python Problems - [1] None and Boolean Comparison
Common Python Problems - [1] None and Boolean Comparison

Sự nhầm lẫn trong so sánh Boolean trong Python là một vấn đề thường gặp đối với những người đang học lập trình Python. Nó gây ra bởi sự khác biệt trong cách Python đánh giá các toán tử so sánh và các giá trị chúng trả về. Điều này có thể dẫn đến kết quả không mong muốn và sự nhầm lẫn khi so sánh các giá trị, chẳng hạn như khi sử dụng toán tử ==. Hướng dẫn này sẽ cung cấp tổng quan về vấn đề và giải thích cách tránh nó.

 

1. Sự nhầm lẫn Boolean

 

Hãy xem đoạn mã này, và suy nghĩ về kết quả bạn đoán cho mỗi câu lệnh. Bạn đoán đúng bao nhiêu câu?

 

'' == False
False

 

In [2]: if '':
   ...:     print('chuỗi rỗng là đúng')
   ...: else:
   ...:     print('chuỗi rỗng là sai')
   ...:
chuỗi rỗng là sai

 

bool('') == False
True

 

0 == False
True

 

0.0 == False
True

 

1 == True
True

 

[] == False
False

 

{} == False
False

 

set() == False
False

 

bool(None) == False
True

 

None == False
False

 

None == True
False

 

a = None
a == None
True

 

a is None
True


Như có thể thấy ở trên, an toàn để kiểm tra xem một biến KHÔNG phải là một chuỗi rỗng, một list/dict/set rỗng, một giá trị None bằng cách sử dụng

 

if not variable:  # tương đương với: if bool(variable) is not False
    print(variable)

 

Trong khi None không phảiTrue, và không phảiFalse. None là một giá trị đặc biệt.

 

Hãy xem xét kỹ hơn một vấn đề khác

 

result = None
for i in range(50):
    if i % 99 == 0:
        result = i
        break
if result:
    print(result)
print(result)

 

Kết quả 

 

0

 

Vấn đề ở đây là gì?

 

Đó là vấn đề với so sánh boolean trong if result. Vì chúng ta đã khởi tạo result là None từ đầu, chúng ta mong đợi result phải không phải None nếu chúng ta đã tìm thấy số chia hết cho 99. Câu trả lời là 0.

 

Vì vậy, giải pháp chính xác là

 

result = None
for i in range(50):
    if i % 99 == 0:
        result = i
        break
if result is not None:
    print(result)

 

Kết quả 

 

0
Tag list:
- Python
- Developer
- Mistake

Theo dõi

Theo dõi bản tin của chúng tôi và không bao giờ bỏ lỡ những tin tức mới nhất.