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ậpCó hợp lệ?Lý do
10hợp lệ
-10số âm, không hợp lý
abckhông phải số
19.99float, không phải integer
0khô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:

10

Output:

10 ngày = 240 giờ

Người dùng nhập:

0

Output:

Bạn nhập số 0, vui lòng nhập số lớn hơn 0.

Người dùng nhập:

-5

Output:

Input của bạn không phải là số hợp lệ!

(because "-5".isdigit() == False)

Người dùng nhập:

abc

Output:

Input của bạn không phải là số hợp lệ!

Người dùng nhập:

19.99

Output: Input của bạn không phải là số hợp lệ!