15. Lệnh điều kiện (tiếp)
Ở bài học trước, chúng ta đã làm quen với các lệnh if, else cơ bản để ra lệnh cho máy tính đưa ra quyết định. Trong phần này, chúng ta sẽ học các kỹ thuật nâng cao hơn để viết mã nguồn ngắn gọn, thông minh và xử lý các tình huống phức tạp hơn.
15.1 Viết tắt lệnh điều kiện
Nếu bạn chỉ có duy nhất một lệnh cần thực thi sau điều kiện if, bạn có thể viết tất cả trên cùng một dòng để mã nguồn trông gọn gàng hơn.
Ví dụ:
Thay vì viết 2 dòng:
a = 200
b = 33
if a > b:
print("a lớn hơn b")
Bạn có thể viết 1 dòng:
a = 200
b = 33
if a > b: print("a lớn hơn b")
15.2 Toán tử ba ngôi
Khi bạn có một điều kiện đơn giản và muốn chọn giữa hai kết quả (một cho if và một cho else), bạn có thể dùng kỹ thuật gọi là Toán tử ba ngôi (Ternary Operators) hoặc Biểu thức điều kiện (Conditional Expressions).
Cú pháp: [Hành động 1] if [Điều kiện] else [Hành động 2]
Ví dụ:
a = 2
b = 330
print("A") if a > b else print("B")
Giải thích: Nếu a > b thì in chữ "A", ngược lại (else) thì in chữ "B".
Bạn cũng có thể kết hợp nhiều điều kiện trên cùng một dòng:
a = 330
b = 330
print("A") if a > b else print("=") if a == b else print("B")
15.3 Các toán tử Logic
Để kết hợp nhiều điều kiện lại với nhau, chúng ta sử dụng các từ khóa logic:
- Từ khóa and (và): Trả về True nếu tất cả các điều kiện đều đúng.
Ví dụ:
a = 200; b = 33; c = 500
if a > b and c > a:
print("Cả hai điều kiện đều đúng")
- Từ khóa or (hoặc): Trả về True nếu ít nhất một trong các điều kiện là đúng.
Ví dụ:
a = 200; b = 33; c = 500
if a > b or a > c:
print("Có ít nhất một điều kiện đúng")
- Từ khóa not (phủ định): Đảo ngược kết quả của điều kiện (đúng thành sai, sai thành đúng).
Ví dụ:
if not a < b:
print("a KHÔNG nhỏ hơn b")
15.4 Lệnh If lồng nhau
Trong thực tế, đôi khi một quyết định lại dẫn đến một quyết định khác. Bạn có thể đặt một lệnh if bên trong một lệnh if khác. Đây gọi là lồng nhau.
Lưu ý: Bạn phải chú ý việc thụt lề (indentation) để máy tính hiểu lệnh nào nằm trong khối lệnh nào.
Ví dụ:
x = 41
if x > 10:
print("Lớn hơn 10,")
if x > 20:
print("và cũng lớn hơn 20!")
else:
print("nhưng không lớn hơn 20.")
Trong Python, các khối lệnh sau if không được phép để trống. Tuy nhiên, nếu bạn đang viết dở chương trình và chưa biết sẽ làm gì tiếp theo, hãy dùng lệnh pass để tránh bị báo lỗi cú pháp (Syntax Error).
Ví dụ:
a = 33
b = 200
if b > a:
pass # Máy tính sẽ bỏ qua và không báo lỗi
15.6 Lệnh so khớp
Trong một số trường hợp, thay vì viết quá nhiều if...elif...else, chúng ta có thể dùng lệnh match. Lệnh này giúp mã nguồn dễ đọc khi bạn cần so sánh một giá trị với nhiều trường hợp khác nhau.
Ví dụ: Khi bạn truy cập một trang web, máy tính server có thể gửi về cho bạn nhiều mã trạng thái (status). Bạn có thể lập trình để kiểm tra xem mã trạng thái đó mang ý nghĩa gì?
status = 404
match status:
case 200:
print("Thành công!")
case 404:
print("Không tìm thấy trang.")
case 500:
print("Lỗi máy chủ.")
case _:
print("Lỗi không xác định.")
Lưu ý: Dấu _ (gạch dưới) đóng vai trò như else, dùng cho tất cả các trường hợp còn lại.
15.7 Bài tập và câu hỏi
Bài tập 15a. Sử dụng lệnh điều kiện rút gọn (viết trên một dòng) để viết chương trình: Nhập vào một số nguyên, in ra "Số chẵn" nếu số đó chia hết cho 2, ngược lại in "Số lẻ".
Đầu vào:
Nhap so: 6
Kết quả mong đợi:
So chan
Bài tập 15b. Viết chương trình sử dụng lệnh If lồng nhau:
- Nhập vào một số x
- Kiểm tra nếu x là số dương (x > 0)
- Nếu đúng là số dương, kiểm tra tiếp xem x có lớn hơn 100 không để in ra thông báo tương ứng
Đầu vào:
Nhap so: 10
Kết quả mong đợi:
10 la so duong, khong lon hon 100
Bài tập 15c. Sử dụng lệnh Match Case để viết chương trình "Chào hỏi theo ngôn ngữ":
- Yêu cầu người dùng nhập vào một mã ngôn ngữ (ví dụ: "VN", "EN", "FR")
- Nếu là "VN" in "Xin chào"
- Nếu là "EN" in "Hello"
- Nếu là "FR" in "Bonjour"
- Các trường hợp khác in "Tôi không hiểu ngôn ngữ này"
Đầu vào:
Nhap ma ngon ngu: ABC
Kết quả mong đợi:
Toi khong hieu ngon ngu nay
15.d Lập trình máy tính cầm tay (calculator)
Yêu cầu: Hãy viết một chương trình mô phỏng hoạt động máy tính cầm tay đơn giản. Chương trình sẽ yêu cầu người dùng nhập vào hai số thực và một phép tính (+, -, *, /, ^). Sau đó, sử dụng các kiến thức về Lệnh điều kiện đã học để xuất ra kết quả chính xác.
Các yêu cầu cụ thể:
- Sử dụng lệnh input() để nhận dữ liệu từ bàn phím
- Sử dụng cấu trúc if...elif...else hoặc match...case để phân loại phép tính
- Xử lý lỗi chia cho 0: Nếu người dùng chọn phép chia / và số thứ hai bằng 0, hãy in ra cảnh báo "Lỗi: Không thể chia cho số 0!"
- Nếu người dùng nhập một phép tính không nằm trong danh sách (+, -, *, /, ^), hãy in ra "Phép tính không hợp lệ".
Câu 15.1: Trong Python, cách viết nào sau đây là đúng quy tắc viết tắt của lệnh if (shorthand If)?
A. if a > b then print("Hello")
B. if a > b: print("Hello")
C. if a > b print("Hello")
D. if (a > b) {print("Hello")}
Câu 15.2: Cho đoạn mã sau:
a = 10
b = 20
c = 15
if a < b and c > a:
print("True")
else:
print("False")
Kết quả in ra màn hình là gì?
A. False
B. Lỗi cú pháp (Syntax Error)
C. True
D. Không in ra nội dung
15. Conditional Statements (Continued)
In the previous lesson, we became familiar with the basic if and else statements to instruct the computer to make decisions. In this section, we will learn more advanced techniques to write concise, smart code and handle more complex situations.
15.1 Shorthand If
If you have only one statement to execute after the if condition, you can put it all on the same line to make the source code look neater.
Example: Instead of writing 2 lines:
a = 200
b = 33
if a > b:
print("a is greater than b")
You can write it in 1 line:
a = 200
b = 33
if a > b: print("a is greater than b")
15.2 Ternary Operators (Shorthand If ... Else)
When you have a simple condition and want to choose between two outcomes (one for if and one for else), you can use a technique called Ternary Operators or Conditional Expressions.
Syntax: [Action 1] if [Condition] else [Action 2]
Example:
a = 2
b = 330
print("A") if a > b else print("B")
Explanation: If a > b, print "A"; otherwise (else), print "B".
You can also combine multiple conditions on one line:
a = 330
b = 330
print("A") if a > b else print("=") if a == b else print("B")
15.3 Logical Operators
To combine multiple conditions, we use logical keywords:
The and keyword: Returns True if all conditions are true.
Example:
a = 200; b = 33; c = 500
if a > b and c > a:
print("Both conditions are True")
The or keyword: Returns True if at least one of the conditions is true.
Example:
if a > b or a > c:
print("At least one of the conditions is True")
The not keyword: Reverses the result of the condition (True becomes False, and vice versa).
Example:
if not a < b:
print("a is NOT less than b")
15.4 Nested If
In practice, sometimes one decision leads to another. You can place an if statement inside another if statement. This is called nesting.
Note: You must pay attention to indentation so the computer understands which statement belongs to which block.
Example:
x = 41
if x > 10:
print("Above ten,")
if x > 20:
print("and also above 20!")
else:
print("but not above 20.")
15.5 The pass Statement
In Python, if blocks cannot be empty. However, if you are in the middle of writing a program and don't know what to do next, use the pass statement to avoid a Syntax Error.
Example:
a = 33
b = 200
if b > a:
pass # The computer will skip this and no error will occur
15.6 Match Case Statement
In some cases, instead of writing too many if...elif...else statements, we can use the match statement. This makes the code easier to read when you need to compare a value against multiple cases.
Example: When you access a website, the server might send back various status codes. You can program it to check what each status code means:
status = 404
match status:
case 200:
print("Success!")
case 404:
print("Page not found.")
case 500:
print("Server error.")
case _:
print("Unknown error.")
Note: The _ (underscore) symbol acts like else, handling all remaining cases.
15.7 Exercises and Questions
Exercise 15a. Use a shorthand condition (one-liner) to write a program: Input an integer, print "Even" if it's divisible by 2, otherwise print "Odd".
- Input: 6
- Expected Result: Even
Exercise 15b. Write a program using Nested If:
- Input a number x
- Check if x is positive (x > 0)
- If it is positive, further check if x is greater than 100 and print the corresponding message
Exercise 15c. Use the Match Case statement to write a "Language Greeting" program:
- Ask the user to input a language code (e.g., "VN", "EN", "FR")
- If "VN", print "Xin chào"
- If "EN", print "Hello"
- If "FR", print "Bonjour"
- For other cases, print "I don't understand this language".
15.d Simple Calculator Task: Write a program that simulates a simple handheld calculator. The program will ask the user to input two real numbers and an operator (+, -, *, /, ^). Use your knowledge of Conditional Statements to output the correct result.
Specific Requirements:
- Use input() to receive data from the keyboard
- Use if...elif...else or match...case to categorize the operations
- Handle division by zero: If the user chooses / and the second number is 0, print the warning: "Error: Cannot divide by zero!"
- If the user enters an invalid operator, print "Invalid operator"
Question 15.1: In Python, which of the following follows the correct rules for "Shorthand If"?
A. if a > b then print("Hello")
B. if a > b: print("Hello")
C. if a > b print("Hello")
D. if (a > b) {print("Hello")}
Question 15.2: Given the following code:
a = 10
b = 20
c = 15
if a < b and c > a:
print("True")
else:
print("False")
What is the output?
A. False
B. Syntax Error
C. True
D. No output
-----