
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:
- Tính tổng hai số nhập từ bàn phím Python
- Tính Diện Tích và Chu Vi Hình Chữ Nhật Python
- Bài Tập Python: Tính Lương Nhân Viên Có Làm Thêm Giờ
1. Đề bài

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
inthoặc số thựcfloat).
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

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:
-
Tư duy Bắc cầu (Nested If):
-
Nếu
a > bvàa > c→alà max. -
Ngược lại, so sánh tiếp
bvàc. -
Cách này tạo ra nhiều tầng
iflồng nhau, dễ rối.
-
-
Tư duy “Giả định” (Assumption – Khuyên dùng):
-
Giả sử số đầu tiên
alà lớn nhất (max_val = a). -
So sánh
max_valvớib. Nếub > max_val, cập nhậtmax_val = b. -
So sánh
max_valvớic. Nếuc > max_val, cập nhậtmax_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

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ùngintsẽ 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

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:
-
Sắp xếp 3 số: In ra 3 số theo thứ tự tăng dần (không dùng
sort). -
Tìm số lớn nhì: Tìm số lớn thứ 2 trong 3 số.
-
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