
Bài viết này sẽ hướng dẫn bạn xây dựng một chương trình menu người dùng trong Python theo 4 cấp độ phát triển. Mỗi cấp độ sẽ giới thiệu cách tiếp cận khác nhau, từ phiên bản đơn giản chỉ dùng cấu trúc if/else đến phiên bản nâng cao với các hàm (function) riêng biệt, giúp bạn hiểu rõ sự tiến hóa của chương trình và lợi ích của từng kỹ thuật.
Level 1: Chương Trình Đơn Giản Chỉ Dùng If/Else (Không Vòng Lặp, Không Xử Lý Lỗi)
Mã Nguồn
# Cấp độ 1: Chương trình đơn giản với if/else
print("===== MENU CHÍNH =====")
print("1. Tính tổng hai số")
print("2. Tính hiệu hai số")
print("3. Thoát chương trình")
lua_chon = input("Nhập lựa chọn của bạn: ")
if lua_chon == "1":
a = float(input("Nhập số thứ nhất: "))
b = float(input("Nhập số thứ hai: "))
print("Kết quả: ", a + b)
elif lua_chon == "2":
a = float(input("Nhập số thứ nhất: "))
b = float(input("Nhập số thứ hai: "))
print("Kết quả: ", a - b)
elif lua_chon == "3":
print("Chương trình kết thúc.")
else:
print("Lựa chọn không hợp lệ!")
Giải Thích
- Cấu tạo Menu:
- Sử dụng các câu lệnh
print()
để hiển thị tiêu đề và các mục menu. - Dùng
input()
để nhận lựa chọn từ người dùng.
- Sử dụng các câu lệnh
- Cấu Trúc Điều Kiện (if/elif/else):
- Dựa vào giá trị người dùng nhập vào, chương trình thực hiện phép tính tương ứng hoặc thông báo thoát/nhập sai.
- Đặc Điểm:
- Chương trình chỉ thực hiện một thao tác duy nhất sau đó dừng lại.
- Không có xử lý lỗi: Nếu người dùng nhập sai (ví dụ chữ thay vì số), chương trình sẽ báo lỗi và dừng.
Level 2: Thêm Vòng Lặp while True
Và Sử Dụng break
(Cho Phép Thực Hiện Nhiều Lần)
Mã Nguồn
# Cấp độ 2: Chương trình với vòng lặp while True và break để thoát
while True:
print("\n===== MENU CHÍNH =====")
print("1. Tính tổng hai số")
print("2. Tính hiệu hai số")
print("3. Thoát chương trình")
lua_chon = input("Nhập lựa chọn của bạn: ")
if lua_chon == "1":
a = float(input("Nhập số thứ nhất: "))
b = float(input("Nhập số thứ hai: "))
print("Kết quả: ", a + b)
# Sau khi thực hiện, dùng continue để quay lại menu
continue
elif lua_chon == "2":
a = float(input("Nhập số thứ nhất: "))
b = float(input("Nhập số thứ hai: "))
print("Kết quả: ", a - b)
continue
elif lua_chon == "3":
print("Chương trình kết thúc.")
break
else:
print("Lựa chọn không hợp lệ!")
continue
Giải Thích
- Vòng Lặp
while True
:- Giúp chương trình chạy liên tục, hiển thị lại menu sau mỗi thao tác.
- Chương trình dừng lại chỉ khi gặp lệnh
break
(ở lựa chọn “3”).
- Sử Dụng
continue
:- Sau mỗi thao tác, lệnh
continue
kết thúc vòng lặp hiện tại và quay lại đầu vòng lặp để hiển thị menu mới, giúp người dùng thao tác liên tục mà không cần khởi động lại chương trình.
- Sau mỗi thao tác, lệnh
- Sự Khác Biệt So Với Level 1:
- Người dùng có thể thực hiện nhiều thao tác liên tiếp; menu được hiển thị lại sau mỗi thao tác.
- Chương trình có cơ chế dừng (break) khi người dùng chọn thoát.
Level 3: Thêm Xử Lý Lỗi Với try/except
(Đảm Bảo Chương Trình Không Bị Crash Khi Nhập Sai Dữ Liệu)
Mã Nguồn
# Cấp độ 3: Chương trình với vòng lặp, break và xử lý lỗi bằng try/except
while True:
print("\n===== MENU CHÍNH =====")
print("1. Tính tổng hai số")
print("2. Tính hiệu hai số")
print("3. Thoát chương trình")
lua_chon = input("Nhập lựa chọn của bạn: ")
if lua_chon == "1":
try:
a = float(input("Nhập số thứ nhất: "))
b = float(input("Nhập số thứ hai: "))
print("Kết quả: ", a + b)
except ValueError:
print("Giá trị nhập không hợp lệ! Vui lòng nhập số.")
continue
elif lua_chon == "2":
try:
a = float(input("Nhập số thứ nhất: "))
b = float(input("Nhập số thứ hai: "))
print("Kết quả: ", a - b)
except ValueError:
print("Giá trị nhập không hợp lệ! Vui lòng nhập số.")
continue
elif lua_chon == "3":
print("Chương trình kết thúc.")
break
else:
print("Lựa chọn không hợp lệ!")
continue
Giải Thích
- Xử Lý Lỗi Với
try/except
:- Các đoạn mã chuyển đổi dữ liệu từ người dùng sang kiểu số được đặt trong khối
try
. - Nếu dữ liệu nhập không hợp lệ (ví dụ nhập chữ thay vì số), lỗi
ValueError
sẽ được bắt và xử lý trong khốiexcept
, giúp chương trình không bị dừng đột ngột.
- Các đoạn mã chuyển đổi dữ liệu từ người dùng sang kiểu số được đặt trong khối
- Kết Hợp Vòng Lặp,
break
Vàcontinue
:- Vòng lặp
while True
: Giữ chương trình chạy liên tục và hiển thị menu. continue
: Sau mỗi thao tác hoặc xử lý lỗi, quay lại đầu vòng lặp để cho người dùng thao tác lại.break
: Cho phép thoát khỏi vòng lặp khi người dùng chọn kết thúc.
- Vòng lặp
Level 4: Chia Thành Các Hàm (Function) Cho Cấu Trúc Rõ Ràng Và Dễ Bảo Trì
Mã Nguồn
def hien_thi_menu():
"""
Hàm hiển thị menu chính cho người dùng.
"""
print("\n===== MENU CHÍNH =====")
print("1. Tính tổng hai số")
print("2. Tính hiệu hai số")
print("3. Thoát chương trình")
def tinh_tong():
"""
Hàm thực hiện phép tính tổng hai số với xử lý lỗi.
"""
try:
a = float(input("Nhập số thứ nhất: "))
b = float(input("Nhập số thứ hai: "))
print("Kết quả: ", a + b)
except ValueError:
print("Giá trị nhập không hợp lệ! Vui lòng nhập số.")
def tinh_hieu():
"""
Hàm thực hiện phép tính hiệu hai số với xử lý lỗi.
"""
try:
a = float(input("Nhập số thứ nhất: "))
b = float(input("Nhập số thứ hai: "))
print("Kết quả: ", a - b)
except ValueError:
print("Giá trị nhập không hợp lệ! Vui lòng nhập số.")
def main():
"""
Hàm chính của chương trình:
- Hiển thị menu liên tục bằng vòng lặp while True.
- Sử dụng cấu trúc if/elif/else để xử lý các lựa chọn.
- Dùng 'continue' để quay lại menu sau mỗi thao tác.
- Dùng 'break' để thoát khỏi vòng lặp khi người dùng chọn kết thúc.
"""
while True:
hien_thi_menu()
lua_chon = input("Nhập lựa chọn của bạn: ")
if lua_chon == "1":
tinh_tong()
continue # Quay lại menu sau khi tính tổng
elif lua_chon == "2":
tinh_hieu()
continue # Quay lại menu sau khi tính hiệu
elif lua_chon == "3":
print("Chương trình kết thúc.")
break # Thoát vòng lặp và kết thúc chương trình
else:
print("Lựa chọn không hợp lệ!")
continue # Quay lại menu để nhập lại lựa chọn
if __name__ == "__main__":
main()
Giải Thích
- Chia Thành Các Hàm (Function):
hien_thi_menu()
:- Chức năng: In ra giao diện menu cho người dùng.
- Lợi ích: Cho phép cập nhật giao diện menu một cách độc lập.
tinh_tong()
vàtinh_hieu()
:- Chức năng: Thực hiện các phép tính cộng và trừ với xử lý lỗi thông qua khối
try/except
. - Lợi ích: Mỗi hàm đảm nhận một nhiệm vụ riêng, giúp code rõ ràng và dễ bảo trì.
- Chức năng: Thực hiện các phép tính cộng và trừ với xử lý lỗi thông qua khối
main()
:- Chức năng: Là hàm điều khiển chính, nơi hiển thị menu và xử lý lựa chọn của người dùng.
- Sử dụng vòng lặp
while True
để liên tục cho phép người dùng thao tác. - Sử dụng
continue
để quay lại đầu vòng lặp sau mỗi thao tác vàbreak
để thoát chương trình khi cần.
- Lợi Ích Của Việc Chia Hàm:
- Tổ Chức Code: Giúp mã nguồn trở nên rõ ràng, tách biệt các chức năng, dễ kiểm soát.
- Tái Sử Dụng: Các hàm riêng biệt có thể được sử dụng lại trong các dự án khác.
- Bảo Trì Và Mở Rộng: Khi cần thay đổi hoặc bổ sung tính năng, chỉ cần điều chỉnh hàm tương ứng mà không ảnh hưởng đến toàn bộ chương trình.
Tổng Kết
Qua 4 cấp độ trên, bạn đã thấy được sự tiến hóa của một chương trình menu người dùng trong Python:
- Level 1:
- Chương trình đơn giản chỉ sử dụng cấu trúc if/else.
- Không có vòng lặp hay xử lý lỗi.
- Level 2:
- Thêm vòng lặp
while True
cho phép thao tác nhiều lần. - Sử dụng
break
để thoát vàcontinue
để quay lại menu.
- Thêm vòng lặp
- Level 3:
- Bổ sung xử lý lỗi với
try/except
đảm bảo chương trình không bị crash khi nhập sai dữ liệu.
- Bổ sung xử lý lỗi với
- Level 4:
- Chia chương trình thành các hàm riêng biệt để tổ chức code rõ ràng, dễ bảo trì và mở rộng.
Hy vọng bài hướng dẫn chi tiết này sẽ giúp bạn nắm vững cách xây dựng và cải tiến menu người dùng trong Python từ một chương trình cơ bản đến một ứng dụng chuyên nghiệp!