Xác định kiểu và giá trị của biểu thức sau: cách làm với bool, int, float

Trả lời nhanh

Muốn xác định kiểu và giá trị của một biểu thức, em tính các phép số học trước, rồi đến các phép so sánh, sau cùng mới tới not, and, or. Nếu phép tính cuối cùng là so sánh hoặc phép logic thì kiểu là bool và giá trị chỉ có thể là True hoặc False. Nếu phép cuối là số học thì kiểu là int hoặc float.

Vì sao phải xác định kiểu trước khi tính giá trị?

Trong Python, mỗi giá trị đều thuộc một kiểu dữ liệu, và kiểu quyết định những phép toán được phép dùng. Các câu hỏi dạng “xác định kiểu và giá trị của biểu thức sau” thường cho bốn phương án như bool, True, bool, False, một kiểu số hoặc “không xác định được”. Chỉ cần nắm chắc quy trình dưới đây là em loại phương án sai rất nhanh.

Ba bước xác định kiểu và giá trị

  1. Đặt ngoặc theo thứ tự ưu tiên. Phép trong ngoặc làm trước, sau đó đến **, rồi *, /, //, %, rồi +, -.
  2. Tính các phép so sánh (<, >, <=, >=, ==, !=). Mỗi phép so sánh luôn cho kết quả kiểu bool.
  3. Tính phép logic theo thứ tự not, rồi and, rồi or.

Kiểu của cả biểu thức chính là kiểu của kết quả ở phép tính được thực hiện sau cùng.

Nhóm phép toán Ví dụ Kiểu kết quả
Số học với số nguyên 7 + 3 * 2 int (13)
Phép chia / 10 / 2 float (5.0)
Chia lấy phần nguyên, chia dư 7 // 2, 7 % 2 int (3 và 1)
So sánh 4 < 5 bool (True)
Logic 4 < 5 and 6 > 8 bool (False)

Ví dụ có lời giải từng bước

Ví dụ 1: 4 + 5 < 6 * 3 and 8 % 3 == 2

  • Vế trái: 4 + 5 = 9, 6 * 3 = 18, nên 9 < 18 là True.
  • Vế phải: 8 % 3 = 2, nên 2 == 2 là True.
  • True and True cho True. Kết luận: kiểu bool, giá trị True.

Ví dụ 2: 2 ** 3 ** 2. Phép luỹ thừa kết hợp từ phải sang trái nên tính 3 ** 2 = 9 trước, rồi 2 ** 9 = 512. Kiểu int, giá trị 512. Nhiều bạn tính ngược thành 8 ** 2 = 64 là sai.

Ví dụ 3: True + 1. Trong Python, True được xem như 1 khi tính toán, nên kết quả là 2, kiểu int, không phải bool.

Ví dụ 4: 5 > 3 or 1 / 0 > 0. Python gặp vế trái đã là True nên không tính tiếp vế phải (cơ chế đoản mạch), vì vậy không báo lỗi chia cho 0. Kết quả bool, True.

Những lỗi sai thường gặp

  • Nhầm = với ==. Dấu = là phép gán, không phải phép so sánh, nên không tạo ra giá trị bool.
  • Cho rằng 10 / 2 là số nguyên. Phép / luôn trả về float, vì vậy kết quả là 5.0.
  • Tính or trước and. Thứ tự đúng là and trước, or sau, giống như nhân trước, cộng sau.
  • Chọn đáp án “không xác định được” cho biểu thức hợp lệ. Biểu thức đúng cú pháp luôn có kiểu và giá trị xác định.

Mẹo nhớ nhanh

Em chỉ cần nhìn phép toán nằm ngoài cùng. Có <, >, ==, and, or, not ở ngoài cùng thì chắc chắn là bool. Chỉ có + - * / // % ** ở ngoài cùng thì là số. Gặp dấu nháy thì là chuỗi str, ví dụ "Tin" * 2 cho 'TinTin'.

Luyện tập

  1. (7 > 3) and (2 * 4 == 9). Đáp án: bool, False, vì vế phải là 8 == 9 sai.
  2. 15 // 4 + 15 % 4. Đáp án: int, 6, vì 3 + 3.
  3. not (5 <= 5) or 3 != 3. Đáp án: bool, False, vì not True là False và 3 != 3 cũng là False.
  4. 3 + 2.0. Đáp án: float, 5.0, vì có một toán hạng là số thực.

Khi làm bài trắc nghiệm, em hãy viết nhanh từng bước ra nháp theo ba bước ở trên rồi mới đối chiếu với bốn phương án. Cách này vừa nhanh vừa tránh bị phương án gây nhiễu đánh lừa.

Câu hỏi thường gặp

Kết quả của một phép so sánh trong Python thuộc kiểu dữ liệu nào?

Mọi phép so sánh như , ==, != đều cho kết quả kiểu bool, với hai giá trị duy nhất là True và False.

Vì sao 10 / 2 cho kết quả 5.0 chứ không phải 5?

Trong Python 3, phép chia / luôn trả về số thực kiểu float. Muốn nhận kết quả nguyên, em dùng phép chia lấy phần nguyên //, khi đó 10 // 2 cho 5 kiểu int.

Trong biểu thức logic, and hay or được tính trước?

Phép and có độ ưu tiên cao hơn or, và not cao hơn cả hai. Nếu muốn đổi thứ tự, em dùng dấu ngoặc.

Có thể cộng True với một số không?

Có. True tính như 1 và False tính như 0 khi làm phép số học, nên True + 1 bằng 2 và có kiểu int.