Th4 112020
 

Ở hai phần trước chúng ta đã biết đến những khái niệm cơ bản nhất của số nguyên (int), số thập phân(float), chuỗi(str) các hàm ép kiểu dữ liệu int(), float(), str().
Ở phần này chúng ta cùng tìm hiểu luồng điều khiển(flow control) của chương trình. Nhưng trước khi tìm hiểu luồng điều khiển chúng ta sẽ tìm hiểu về đại số Boolean.
Sức mạnh thực sự trong lập trình không chỉ là chạy một chuỗi câu lệnh hay thực hiện danh sách việc vặt cuối tuần. Dựa trên cách đánh giá biểu thức, một chương trình có thể quyết định bỏ qua các lệnh, lặp lại chúng hoặc chọn một trong một số lệnh để chạy. Trong thực tế, bạn gần như không bao giờ muốn các chương trình của mình bắt đầu từ dòng mã đầu tiên và chỉ cần thực thi mọi dòng, thẳng đến cuối. Các câu lệnh điều khiển luồng có thể quyết định các lệnh Python nào được thực thi trong các điều kiện nào.
Các báo cáo kiểm soát luồng tương ứng trực tiếp với các biểu tượng trong một sơ đồ, vì vậy tôi sẽ cung cấp các phiên bản sơ đồ của mã được thảo luận trong chương này. Hình dưới đây cho thấy một sơ đồ cho những việc cần làm nếu trời mưa. Theo con đường được tạo bởi các mũi tên từ Start đến End.

Trong một sơ đồ, thường có nhiều hơn một cách để đi từ đầu đến cuối cùng. Điều này cũng đúng với các dòng mã trong một chương trình máy tính.
Lưu đồ biểu diễn các điểm phân nhánh này bằng kim cương, trong khi các bước khác được biểu thị bằng hình chữ nhật. Các bước bắt đầu và kết thúc được thể hiện bằng các hình chữ nhật có viền tròn.
Nhưng trước khi bạn tìm hiểu về các câu lệnh kiểm soát luồng, trước tiên bạn cần phải tìm hiểu cách biểu diễn các tùy chọn có và không, và bạn cần hiểu cách viết các điểm phân nhánh đó dưới dạng mã Python. Cuối cùng, hãy cùng khám phá các giá trị Boolean, toán tử so sánh và toán tử Boolean.
Giá trị Boolean
Trong khi các kiểu dữ liệu số nguyên, số thập phân và chuỗi có số lượng giá trị có thể không giới hạn, kiểu dữ liệu Boolean chỉ có hai giá trị: True và False. (Boolean được viết hoa vì kiểu dữ liệu được đặt theo tên nhà toán học George Boole.) Khi được nhập dưới dạng mã Python, các giá trị Boolean True và False thiếu các trích dẫn bạn đặt xung quanh các chuỗi và chúng luôn bắt đầu bằng chữ T hoặc F, với phần còn lại của từ viết thường.
Nhập nội dung sau vào command line. (Một số trong những hướng dẫn này là cố ý không chính xác và chúng sẽ khiến thông báo lỗi xuất hiện.)

>>> spam = True
>>> spam
True
>>> true
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
true
NameError: name 'true' is not defined
>>> True = 2 + 2
SyntaxError: can't assign to keyword

Toán tử so sánh trong Boolean
Toán tử so sánh cũng chính là toán tử quan hệ được sử dụng để tạo ra một biểu thức duy nhất trong Boolean. Hình dưới mô tả các toán tử.
b8
Những toán tử tính toán để đưa về True hay False tùy thuộc vào giá trị mà bạn đưa vào cho chúng. Sau đây chúng ta sẽ thử với hai toán tử == và !=.

>>> 42 == 42
True
>>> 42 == 99
False
>>> 2 != 3
True
>>> 2 != 2
False

Như bạn có thể mong đợi, == (bằng) đánh giá là True khi các giá trị ở cả hai phía đều giống nhau và
! = (không bằng) đánh giá là True khi hai giá trị khác nhau. Các toán tử == và ! = Thực sự có thể hoạt động với các giá trị của bất kỳ loại dữ liệu nào.

>>> 'hello' == 'hello'
True
>>> 'hello' == 'Hello'
False
>>> 'dog' != 'cat'
True
>>> True == True
True
>>> True != False
True
>>> 42 == 42.0
True
 >>> 42 == '42'
False

Lưu ý rằng giá trị số nguyên hoặc số thập phân sẽ luôn không bằng giá trị chuỗi. Biểu thức 42 == ‘42’ ước tính thành False vì Python coi số nguyên 42 khác với chuỗi ‘42’.
Mặt khác, các toán tử <,>, <= và> = chỉ hoạt động đúng với các giá trị nguyên và số thập phân.

>>> 42 < 100
True
>>> 42 > 100
False
>>> 42 < 42
False
>>> eggCount = 42
>>> eggCount <= 42
True
>>> myAge = 29
>>> myAge >= 10
True

Bạn sẽ thường sử dụng các toán tử so sánh để so sánh một giá trị của biến với một số giá trị khác, như trong ví dụ eggCount <= 42 và myAge> = 10.
Bạn sẽ thấy nhiều ví dụ về điều này sau khi bạn tìm hiểu về các câu lệnh kiểm soát luồng.
Sự khác biệt giữa hai toán tử == và =.
Bạn có thể nhận thấy rằng toán tử == (bằng) có hai dấu bằng nhau, trong khi toán tử = (gán) chỉ có một dấu bằng. Nó rất dễ nhầm lẫn giữa hai toán tử này với nhau. Chỉ cần nhớ những điểm sau:

  • Toán tử == (bằng) hỏi xem hai giá trị có giống lẫn nhau hay không.
  • Toán tử = (gán) đặt giá trị ở bên phải vào biến bên trái.

Để giúp nhớ đó là toán tử nào, hãy lưu ý rằng toán tử == (bằng) bao gồm hai ký tự, giống như toán tử! = (không bằng) bao gồm hai kí tự.
Toán tử Boolean
Ba toán tử Boolean (and , ornot) được sử dụng để so sánh các giá trị Boolean. Giống như các toán tử so sánh, chúng đánh giá các biểu thức này xuống một giá trị Boolean. Hãy cùng khám phá các toán tử này một cách chi tiết, bắt đầu với toán tử and.
Toán tử nhị phân Boolean
Các toán tử and và or luôn lấy hai giá trị Boolean (hoặc biểu thức), do đó, chúng được coi là toán tử nhị phân. Toán tử and đánh giá một biểu thức thành True nếu cả hai giá trị Boolean là True; mặt khác, nó đánh giá là False. Nhập một số biểu thức bằng cách sử dụng và vào command line để xem nó hoạt động.

>>> True and True
True
>>> True and False
False

Bản sự thật sẽ mô tả chi tiết về toán tử Boolean. Bảng sự thật dưới đây mô tả toán tử and.
b9
Ở một mặt khác toán tử or sẽ trả về kết quả True nếu 1 trong hai vế là True và trả về False nếu cả hai toán hạng là False.

>>> False or True
True
>>> False or False
False

Bạn có thể nhìn thấy bảng sự thật của toán tử or ở hình dưới.
b10
Toán tử not
Không như toán tử and và or, toán tử not chỉ có một giá trị. Toán tử not tạo thành một toán tử Boolean đơn.

>>> not True
False
>>> not not not not True
True

Bạn có thể tổ hợp nhiều toán tử not với nhau nhưng chúng ta thường không làm vậy trong khi source code. Dưới đấy là bảng sự thật của not.
b11
Tổ hợp giữa toán tử Boolean và toán tử so sánh
Vì các toán tử so sánh được tính bằng các giá trị Boolean, bạn có thể sử dụng chúng trong các biểu thức với các toán tử Boolean.
Hãy nhớ lại rằng các toán tử andornot gọi là toán tử Boolean vì chúng luôn hoạt động trên các giá trị Boolean True và False. Trong khi các biểu thức như 4 <5 không phải là giá trị Boolean, chúng là các biểu thức đánh giá xuống giá trị Boolean. Hãy thử nhập một số biểu thức Boolean sử dụng toán tử so sánh command line.

>>> (4 < 5) and (5 < 6)
True
>>> (4 < 5) and (9 < 6)
False
>>> (1 == 2) or (2 == 2)
True

Máy tính sẽ đánh giá biểu thức bên trái trước, và sau đó nó sẽ đánh giá biểu thức đúng. Khi nó biết giá trị Boolean cho từng giá trị, nó sẽ đánh giá toàn bộ biểu thức xuống một giá trị Boolean.
Bạn có thể nghĩ về quy trình đánh giá trên máy tính cho (4 <5) và (5 <6) như sau:
b12
Bạn cũng có thể sử dụng tổ hợp toán tử Boolean trong một biểu thức, kết hợp với những toán tử so sánh.

>>> 2 + 2 == 4 and not 2 + 2 == 5 and 2 * 2 == 2 + 2
True

Các toán tử Boolean có một thứ tự độ ưu tiên giống như toán tử toán học làm. Sau khi bất kỳ toán tử toán học và so sánh nào đánh giá, Python đánh giá các toán tử not phải trước, sau đó là toán tử and toán tử  sau đó là toán tử or.