Kết quả đoạn chương trình x = 2021, print(x%4==0 and x%100!=0 or x%400==0)

Trả lời nhanh

Đáp án là D. False. Với x = 2021, x%4 bằng 1 nên x%4==0 là False, do đó vế “and” cho False. Vế “or” còn lại x%400==0 cũng là False vì 2021 chia 400 dư 21. Cả hai vế đều False nên print in ra False. Các phương án 55 và 5 sai vì phép so sánh luôn trả về kiểu logic, không phải số.

Đoạn chương trình đang làm gì?

x = 2021
print(x % 4 == 0 and x % 100 != 0 or x % 400 == 0)

Đây là cách kiểm tra năm nhuận theo quy tắc quen thuộc: một năm là năm nhuận nếu chia hết cho 4 mà không chia hết cho 100, hoặc chia hết cho 400. Chương trình in ra True nếu x là năm nhuận và False nếu không.

Giải từng bước

Trong Python, toán tử and có độ ưu tiên cao hơn or, nên biểu thức được hiểu là (x%4==0 and x%100!=0) or (x%400==0).

Bước Biểu thức Tính toán Kết quả
1 x % 4 == 0 2021 chia 4 dư 1 False
2 x % 100 != 0 2021 chia 100 dư 21 True
3 False and True and cần cả hai vế đúng False
4 x % 400 == 0 2021 chia 400 dư 21 False
5 False or False or cần ít nhất một vế đúng False
Sơ đồ tính từng bước kết quả đoạn chương trình x = 2021 với and và or trong Python
Hình 1. Với x = 2021 mọi nhánh của biểu thức đều cho False nên kết quả cuối cùng là False.

Vậy lệnh print in ra False. Hãy chú ý Python viết hoa chữ cái đầu: True và False.

Vì sao các phương án khác sai?

  • A. 55 và C. 5: biểu thức chỉ gồm phép so sánh và phép logic, nên kết quả là True hoặc False. Không có phép tính nào tạo ra số 55 hay 5.
  • B. True: sẽ đúng nếu 2021 là năm nhuận. Thực tế 2021 không chia hết cho 4 nên không phải năm nhuận.

Thử với các năm khác để hiểu quy tắc

Năm x x%4==0 x%100!=0 x%400==0 Kết quả
2024 True True False True
1900 True False False False
2000 True False True True
2021 False True False False

Quan sát năm 1900 và 2000: cả hai đều chia hết cho 100, nhưng chỉ năm 2000 chia hết cho 400 nên mới là năm nhuận. Đó là lý do phải có vế “or x%400==0”.

Mẹo làm bài nhanh

  • Phép chia lấy dư % luôn tính trước, rồi đến so sánh (==, !=), sau đó mới đến not, and, or.
  • Gặp biểu thức có and lẫn or, em thêm ngoặc đơn vào cụm and trước để khỏi nhầm.
  • Kết quả của biểu thức so sánh hay logic luôn là kiểu bool, không bao giờ là một số.

Lỗi sai thường gặp

  1. Viết nhầm = thay cho == trong phép so sánh. Dấu = là phép gán, == mới là so sánh bằng.
  2. Cho rằng or được tính trước and, rồi ghép sai nhóm.
  3. Nhầm x%4 với x//4. Toán tử % lấy phần dư, còn // lấy phần nguyên của phép chia.

Bài tập luyện tập

Bài 1. Nếu x = 2024 thì kết quả đoạn chương trình là gì?
Đáp án: True, vì 2024 chia hết cho 4 và không chia hết cho 100.

Bài 2. Đặt x = 2100. Biểu thức cho kết quả nào?
Đáp án: False, vì 2100 chia hết cho 100 nhưng không chia hết cho 400.

Bài 3. Viết lệnh in ra True nếu số n là số chẵn.
Đáp án: print(n % 2 == 0).

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

Kết quả của đoạn chương trình sau x = 2021 là gì?

Kết quả là False. Vì 2021 không chia hết cho 4 và cũng không chia hết cho 400 nên cả hai vế của biểu thức đều sai.

Trong Python, and hay or được tính trước?

Toán tử and có độ ưu tiên cao hơn or, nên a and b or c được hiểu là (a and b) or c.

Đoạn chương trình này dùng để làm gì?

Nó kiểm tra một năm có phải năm nhuận không: chia hết cho 4 mà không chia hết cho 100, hoặc chia hết cho 400.

Vì sao kết quả không thể là số như 55 hay 5?

Vì biểu thức chỉ gồm phép so sánh và phép logic nên luôn trả về kiểu bool là True hoặc False.