
Conditionals (if/else) và Boolean Data Type
Sau bài học này bạn sẽ hiểu:
- Cách kiểm tra dữ liệu người dùng bằng
if,elif,else
- Boolean là gì (True / False)
- So sánh: >, <, ==
- Tại sao input phải được validate (kiểm tra hợp lệ)
- Xử lý lỗi khi người dùng nhập text, số âm, hoặc số 0
- Hàm
.isdigit()hoạt động như thế nào
- Nested if (if lồng nhau)
- Cách tổ chức code theo hướng sạch và chuyên nghiệp
1. Vấn đề: Người dùng nhập dữ liệu sai
Ví dụ:
| Người dùng nhập | Có hợp lệ? | Lý do |
|---|---|---|
| 10 | ✔ | hợp lệ |
| -10 | ❌ | số âm, không hợp lý |
| abc | ❌ | không phải số |
| 19.99 | ❌ | float, không phải integer |
| 0 | ❌ | không có ý nghĩa |
→ Chúng ta cần kiểm tra dữ liệu trước khi dùng.
2. Ôn lại bài trước: user input
user_input = input("Nhập số ngày muốn chuyển đổi:\n")input() luôn trả về string → cần kiểm tra trước khi chuyển sang số.
3. Dùng if / else để kiểm tra số âm
Ví dụ cơ bản:
def days_to_hours(num_of_days):
if num_of_days > 0:
return f"{num_of_days} ngày = {num_of_days * 24} giờ"
else:
return "Bạn nhập số âm, không thể chuyển đổi!"4. Boolean – Kiểu dữ liệu True/False
Khi kiểm tra điều kiện:
print(10 > 0) # True
print(-10 > 0) # False➡ Đây là kiểu boolean: True hoặc False.
Bạn có thể kiểm tra kiểu:
x = (10 > 0)
print(type(x)) # <class 'bool'>5. Sử dụng else để báo lỗi cho người dùng
if num_of_days > 0:
...
else:
return "Giá trị không hợp lệ."➡ else chạy khi if sai.
6. Phân biệt số 0 với số âm — dùng elif
def days_to_hours(num_of_days):
if num_of_days > 0:
return f"{num_of_days} ngày = {num_of_days * 24} giờ"
elif num_of_days == 0:
return "Bạn nhập số 0, vui lòng nhập số lớn hơn 0."
else:
return "Bạn nhập số âm!"7. Vấn đề khi người dùng nhập chữ → chương trình crash
Ví dụ:
user_input = "abc"
user_input_number = int(user_input)→ Chương trình sẽ lỗi:
ValueError: invalid literal for int()8. Dùng .isdigit() để kiểm tra input có phải số hay không
"123".isdigit() → True
"-10".isdigit() → False (dấu "-" không phải số)
"19.99".isdigit() → False
"abc".isdigit() → False
➡ Cực kỳ hữu ích để chặn input sai!
9. Kiểm tra input trước khi convert sang integer
user_input = input("Nhập số ngày:\n")
if user_input.isdigit():
user_input_number = int(user_input)
print(days_to_hours(user_input_number))
else:
print("Input của bạn không phải là số! Đừng phá chương trình của tôi!")10. Chuyển toàn bộ logic vào một hàm — làm code chuyên nghiệp
Transcript mô tả việc gom tất cả vào một hàm validate_and_execute.
Dưới đây là phiên bản hoàn chỉnh:
CHƯƠNG TRÌNH HOÀN CHỈNH
# Hàm chuyển đổi
def days_to_hours(num_of_days):
return num_of_days * 24
# Hàm validate và điều khiển toàn bộ luồng xử lý
def validate_and_execute():
if user_input.isdigit(): # kiểm tra input là số dương
user_input_number = int(user_input)
if user_input_number > 0: # nested if
result = days_to_hours(user_input_number)
print(f"{user_input_number} ngày = {result} giờ")
elif user_input_number == 0:
print("Bạn nhập số 0, vui lòng nhập số lớn hơn 0.")
else:
print("Bạn nhập số âm! Không thể chuyển đổi.")
else:
print("Input của bạn không phải là số hợp lệ!")
# Main program
user_input = input("Nhập số ngày muốn chuyển đổi:\n")
validate_and_execute()Ví dụ chạy thử
Người dùng nhập:
10Output:
10 ngày = 240 giờNgười dùng nhập:
0Output:
Bạn nhập số 0, vui lòng nhập số lớn hơn 0.Người dùng nhập:
-5Output:
Input của bạn không phải là số hợp lệ!(because "-5".isdigit() == False)
Người dùng nhập:
abcOutput:
Input của bạn không phải là số hợp lệ!Người dùng nhập:
19.99Output: Input của bạn không phải là số hợp lệ!