Bài Tập Python: Tìm Số Lớn Nhất Trong 3 Số
Bài Tập Python: Tìm Số Lớn Nhất Trong 3 Số

Tại sao bài này quan trọng?

  • So sánh là thao tác nền tảng nhất trong mọi thuật toán (sắp xếp, tìm kiếm).

  • Bạn sẽ hiểu rõ sự khác biệt giữa tư duy thuật toán (tự cài đặt) và tư duy Pythonic (dùng hàm có sẵn).

  •  Bài viết cung cấp code chạy ngay, xử lý cả trường hợp số thực và lỗi nhập liệu.

Tóm tắt nội dung

  • Phân tích logic so sánh (If-Else vs Built-in).

  • Code mẫu cơ bản (Dễ hiểu cho người mới).

  • Code nâng cao (Xử lý lỗi & Tổng quát hóa).

  • Giải thích độ phức tạp thuật toán (Big-O).

Bạn xem thêm:


1. Đề bài 

Bài Tập Python: Tìm Số Lớn Nhất Trong 3 Số
Bài Tập Python: Tìm Số Lớn Nhất Trong 3 Số

Mô tả:

Viết chương trình cho phép người dùng nhập vào 3 số (nguyên hoặc thực) từ bàn phím. Chương trình sẽ tìm và in ra số có giá trị lớn nhất trong 3 số đó.

Input:

  • 3 dòng, mỗi dòng chứa một số (có thể là số nguyên int hoặc số thực float).

Output:

  • Một dòng duy nhất hiển thị giá trị lớn nhất tìm được.

Constraints:

  • Giá trị nhập vào nằm trong khoảng khả dụng của kiểu dữ liệu Float trong Python.

  • Thời gian chạy giới hạn: 1s.

Ví dụ 1:

Input:
10
5
20

Output:
20.0

Ví dụ 2 (Số âm và số thực):

Input:
-1.5
-0.5
-2.0

Output:
-0.5

2. Phân tích tư duy

Bài Tập Python: Tìm Số Lớn Nhất Trong 3 Số
Bài Tập Python: Tìm Số Lớn Nhất Trong 3 Số

Logic cơ bản

Để tìm số lớn nhất (max_val) giữa 3 số a, b, c, chúng ta có 2 luồng tư duy chính:

  1. Tư duy Bắc cầu (Nested If):

    • Nếu a > ba > ca là max.

    • Ngược lại, so sánh tiếp bc.

    • Cách này tạo ra nhiều tầng if lồng nhau, dễ rối.

  2. Tư duy “Giả định” (Assumption – Khuyên dùng):

    • Giả sử số đầu tiên a là lớn nhất (max_val = a).

    • So sánh max_val với b. Nếu b > max_val, cập nhật max_val = b.

    • So sánh max_val với c. Nếu c > max_val, cập nhật max_val = c.

    • Ưu điểm: Code phẳng, dễ đọc, dễ mở rộng lên N số.

Edge cases (Trường hợp biên)

  • 3 số bằng nhau: Code phải trả về giá trị đó (không được lỗi).

  • Số âm: Logic so sánh phải đúng với số âm (ví dụ: -1 > -10).

  • Nhập sai kiểu: Người dùng nhập chữ thay vì số (sẽ xử lý ở phần Nâng cao).


3. Giải pháp: 

Cách này sử dụng phương pháp “Giả định”, giúp bạn hiểu rõ cách máy tính thực hiện so sánh từng bước.

Độ phức tạp:

  • Time Complexity: O(1) (Luôn thực hiện đúng 2 phép so sánh).

  • Space Complexity: O(1) (Chỉ dùng biến lưu trữ đơn giản).

# Solution 1: Algorithmic Approach (Assumption Method)
import sys

def find_max_three_numbers():
    print("Nhập vào 3 số (mỗi số 1 dòng):")
    
    try:
        # 1. Nhập dữ liệu và ép kiểu float để xử lý cả số thập phân
        # Input từng dòng để rõ ràng cho người mới
        a = float(input("Nhập số thứ 1: "))
        b = float(input("Nhập số thứ 2: "))
        c = float(input("Nhập số thứ 3: "))

        # 2. Logic tìm max (Phương pháp giả định)
        # Giả sử a là số lớn nhất
        max_val = a

        # So sánh với b
        if b > max_val:
            max_val = b
        
        # So sánh với c
        if c > max_val:
            max_val = c

        # 3. In kết quả
        # Sử dụng f-string để in kết quả rõ ràng
        print(f"Số lớn nhất là: {max_val}")

    except ValueError:
        print("Lỗi: Vui lòng chỉ nhập số (int hoặc float).")

# Chạy chương trình
if __name__ == "__main__":
    find_max_three_numbers()

4. Biến thể nâng cao 

Bài Tập Python: Tìm Số Lớn Nhất Trong 3 Số
Bài Tập Python: Tìm Số Lớn Nhất Trong 3 Số

Biến thể 1: Pythonic Way 

Trong thực tế làm việc với Python, chúng ta không viết lại logic so sánh thủ công mà dùng hàm max(). Đây là cách ngắn gọn và tối ưu nhất.

# Code gợi ý - Pythonic
try:
    # Nhập 3 số trên cùng 1 dòng, cách nhau bởi dấu cách
    # Ví dụ input: 10 20 5
    nums = list(map(float, input("Nhập 3 số cách nhau bởi dấu cách: ").split()))
    
    if len(nums) != 3:
        print("Vui lòng nhập đúng 3 số.")
    else:
        # Hàm max() trong Python nhận vào một iterable hoặc các đối số
        print(f"Max: {max(nums)}")
        
except ValueError:
    print("Dữ liệu nhập không hợp lệ.")

Biến thể 2: Tổng quát hóa (Tìm max trong N số)

Nếu đề bài đổi thành “Tìm số lớn nhất trong danh sách số nhập vào cho đến khi nhập ‘done'”, ta cần dùng vòng lặp while.

Hướng giải:

  • Khởi tạo current_max = -infinity.

  • Dùng vòng lặp while True để nhận input liên tục.

  • So sánh và cập nhật current_max.

# Code gợi ý - Generalization
def find_max_unlimited():
    current_max = None
    print("Nhập các số (gõ 'x' để kết thúc):")
    
    while True:
        user_input = input(">> ")
        if user_input.lower() == 'x':
            break
        
        try:
            num = float(user_input)
            if current_max is None or num > current_max:
                current_max = num
        except ValueError:
            print("Không phải số, thử lại!")
            
    if current_max is not None:
        print(f"Số lớn nhất đã nhập: {current_max}")

5. Lỗi thường gặp 

Checklist tối ưu:

  • [x] Đã xử lý input là số thực (float) chưa? (Nếu chỉ dùng int sẽ lỗi khi nhập 1.5).

  • [x] Đã xét trường hợp các số bằng nhau chưa?

  • [x] Có in thông báo lỗi (try-except) khi nhập chữ không?

Lỗi “Ngớ ngẩn”:

  • Quên ép kiểu: input() trả về chuỗi (string). So sánh chuỗi sẽ sai logic (Ví dụ: chuỗi “9” lớn hơn “100” vì ký tự ‘9’ > ‘1’).

  • Logic If lồng nhau quá sâu: Viết if a > b: if a > c: ... rất khó debug. Hãy dùng cách giả định (max_val = a) hoặc toán tử logic (and).


6. FAQ – Câu hỏi thường gặp

Bài Tập Python: Tìm Số Lớn Nhất Trong 3 Số
Bài Tập Python: Tìm Số Lớn Nhất Trong 3 Số

1. Làm sao để tìm số lớn nhất trong 3 số Python chỉ với 1 dòng code?

Bạn có thể dùng hàm max() kết hợp với list comprehension hoặc map: print(max(float(input()) for _ in range(3))). Đây là cách tìm số lớn nhất trong 3 số Python ngắn nhất.

2. Hàm max() hoạt động như thế nào (python max function)?

Hàm max() duyệt qua các phần tử, so sánh từng cặp và giữ lại giá trị lớn hơn. Độ phức tạp là O(n). Đây là python max function chuẩn.

3. Tại sao nhập 10, 5, 2 ra kết quả sai khi không ép kiểu?

Vì nếu không ép kiểu, Python so sánh theo chuỗi ký tự (String comparison). Để nhập dữ liệu Python đúng, bắt buộc phải dùng int() hoặc float().

4. Thuật toán tìm max có áp dụng cho chuỗi không?

Có. Python có thể so sánh chuỗi dựa trên bảng mã ASCII. Thuật toán tìm max sẽ trả về chuỗi có thứ tự từ điển lớn nhất (ví dụ “Banana” > “Apple”).

5. Tôi nên dùng if-else hay max() cho bài tập này (python if else exercises)?

Với người mới học python if else exercises, bạn nên tự viết if-else để rèn tư duy. Khi làm dự án thực tế, hãy dùng max().

6. Hàm max trong Python có trả về vị trí (index) không?

Không, hàm max trong Python chỉ trả về giá trị. Muốn tìm index, bạn cần dùng phương thức list.index(max_value) hoặc dùng numpy.argmax nếu làm việc với mảng lớn.

7. Có cần học thư viện Math để tìm max không (lập trình python cho người mới)?

Không cần thiết. max() là hàm built-in (có sẵn). Lập trình Python cho người mới nên tận dụng tối đa các hàm built-in trước khi import thư viện.

8. Làm sao tìm max 3 số nguyên dương mà bỏ qua số âm?

Bạn có thể lọc danh sách trước: max([x for x in nums if x > 0]). Cách này giúp tìm max 3 số nguyên dương chính xác.

9. Code python tìm số lớn nhất của tôi báo lỗi ValueError?

Lỗi này thường do bạn nhập chữ cái hoặc để trống khi chương trình đợi số. Hãy dùng khối try-except để bao quanh đoạn code python tìm số lớn nhất của bạn.


7. Bài tập tương tự 

Nếu bạn đã hiểu bài này, hãy thử sức với:

  1. Sắp xếp 3 số: In ra 3 số theo thứ tự tăng dần (không dùng sort).

  2. Tìm số lớn nhì: Tìm số lớn thứ 2 trong 3 số.

  3. Tìm Min-Max trong mảng: Nhập mảng N phần tử và tìm cả Min lẫn Max.

Các khóa học liên quan: 

Một số sản phẩm từ Python:

Một số sách lập trình Python bạn hãy tham khảo

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *