tinbc tinbc

Bài 14: Dự án nhỏ — script sổ chi tiêu tự động (tổng kết Python cơ bản)

Thợ Code5 phút đọc
Bài 14: Dự án nhỏ — script sổ chi tiêu tự động (tổng kết Python cơ bản)

Đây là bài cuối của series Python cơ bản. Thay vì học thêm khái niệm mới, ta ghép mọi thứ đã học — biến, vòng lặp, hàm (Bài 8), try/except (Bài 9), file (Bài 10) — thành một dự án thật: một sổ chi tiêu chạy trong Terminal, ghi khoản chi ra file, cộng tổng, và không sập khi bạn nhập sai. Làm xong, bạn có một chương trình dùng được thật và một cột mốc đáng tự hào.

⏱️ Cách học bài này (~30 phút): đọc & hiểu cấu trúc dự án (8’), tự gõ và chạy từng phần (17’), tự mở rộng + xem hướng đi tiếp (5’).

Mục tiêu bài học

Sau bài này bạn sẽ:

  • Ghép hàm, vòng lặp, try/except, file thành một chương trình hoàn chỉnh.
  • Dựng một menu lặp cho người dùng chọn.
  • Lưu dữ liệu ra file để nhớ giữa các lần chạy.
  • Biết hướng học tiếp sau Python cơ bản.

Thiết kế dự án (chia nhỏ thành hàm)

Chương trình sổ chi tiêu gồm bốn việc, mỗi việc một hàm:

  1. Thêm khoản chi → ghi thêm một dòng vào file.
  2. Xem tất cả → đọc file, in ra kèm số thứ tự.
  3. Tính tổng → cộng tất cả số tiền.
  4. Menu → lặp cho người dùng chọn 1/2/3/thoát.

Mỗi khoản chi lưu một dòng dạng nội dung;số tiền, ví dụ An trua;40000.

Code đầy đủ (gõ theo từng phần)

FILE = "chi_tieu.txt"

def them_khoan():
    noi_dung = input("Nội dung: ")
    try:
        so_tien = int(input("Số tiền: "))     # ép kiểu — có thể lỗi
    except ValueError:
        print("⚠️ Số tiền phải là số. Bỏ qua.")
        return
    with open(FILE, "a", encoding="utf-8") as f:
        f.write(f"{noi_dung};{so_tien}\n")     # lưu 'nội dung;số tiền'
    print("✅ Đã thêm.")

def xem_tat_ca():
    try:
        with open(FILE, "r", encoding="utf-8") as f:
            dong = f.readlines()
    except FileNotFoundError:
        print("(Chưa có khoản chi nào.)")
        return
    if not dong:
        print("(Chưa có khoản chi nào.)")
        return
    for i, d in enumerate(dong, start=1):
        noi_dung, so_tien = d.strip().split(";")
        print(f"{i}. {noi_dung}: {so_tien}đ")

def tinh_tong():
    tong = 0
    try:
        with open(FILE, "r", encoding="utf-8") as f:
            for d in f:
                tong += int(d.strip().split(";")[1])   # lấy phần số tiền
    except FileNotFoundError:
        pass
    print(f"💰 Tổng chi: {tong}đ")

def menu():
    while True:
        print("\n--- SỔ CHI TIÊU ---")
        print("1. Thêm khoản chi")
        print("2. Xem tất cả")
        print("3. Tính tổng")
        print("0. Thoát")
        chon = input("Chọn: ")
        if chon == "1":
            them_khoan()
        elif chon == "2":
            xem_tat_ca()
        elif chon == "3":
            tinh_tong()
        elif chon == "0":
            print("Tạm biệt!")
            break
        else:
            print("Lựa chọn không hợp lệ.")

menu()

Cách chạy: lưu file so_chi_tieu.py, chạy python so_chi_tieu.py. Chọn 1 để thêm khoản chi, 2 để xem, 3 để tính tổng, 0 để thoát. Dữ liệu được nhớ trong chi_tieu.txt cho lần chạy sau.

Chương trình này ghép những gì đã học?

  • Hàm (Bài 8): chia chương trình thành 4 việc rõ ràng.
  • Vòng lặp while True + break: menu lặp cho tới khi chọn thoát.
  • try/except (Bài 9): nhập số tiền sai không làm sập; file chưa có cũng không lỗi.
  • File a/r (Bài 10): ghi thêm khoản chi, đọc lại để xem/cộng.
  • .split(";") tách nội dungsố tiền từ một dòng.

Tự mở rộng (thử thách)

  • Thêm mục xoá một khoản chi theo số thứ tự.
  • Thêm danh mục (ăn uống, đi lại…) và tính tổng theo từng danh mục.
  • Thêm ngày tháng cho mỗi khoản (dùng datetimeBài 11).

Lỗi thường gặp & cách sửa

  • Nhập số tiền là chữ → đã có try/except ValueError bắt; chương trình báo và bỏ qua.
  • Chạy mục 2/3 khi chưa thêm gìFileNotFoundError đã được bắt, in “(Chưa có khoản chi nào.)”.
  • Dòng file thiếu dấu ; (sửa tay file) → .split(";") ra thiếu phần tử. Đừng sửa file bằng tay, hãy dùng chương trình.
  • Nội dung có chứa dấu ; (gõ “Ăn; trưa”) → .split(";") ra thừa phần tử, gây lỗi khi tách. Tránh gõ ; trong nội dung, hoặc dùng .split(";", 1) để chỉ tách ở dấu ; đầu tiên.
  • Quên encoding="utf-8" → tiếng Việt lỗi font.

Học gì tiếp sau Python cơ bản?

Bạn đã có nền vững. Chọn một hướng theo sở thích:

  • Tự động hoá công việc: đọc/ghi Excel (openpyxl), đổi tên file hàng loạt, gửi email tự động.
  • Phân tích dữ liệu: pandas, matplotlib để xử lý và vẽ biểu đồ.
  • Làm web: framework Flask (nhẹ, dễ bắt đầu) hoặc Django.
  • AI/máy học cơ bản: khi đã quen dữ liệu.

Trước khi nhảy sang framework, hãy làm thêm vài dự án nhỏ để chắc tay. Muốn học hiệu quả hơn với sự trợ giúp của AI, xem cách dùng AI học lập trình hiệu quả.

Ghi nhớ nhanh

  • Dự án = chia nhỏ thành hàm (nhập, xem, xử lý, lưu) rồi nối bằng một menu vòng lặp.
  • File để nhớ dữ liệu; try/except để không sập khi nhập sai/file thiếu.
  • Bắt đầu nhỏ, chạy được trước, rồi mở rộng dần.

👉 Việc làm ngay hôm nay: gõ chạy sổ chi tiêu, rồi làm một thử thách mở rộng (ví dụ thêm xoá khoản chi). Chúc mừng bạn đã hoàn thành series Python cơ bản! Muốn tiếp tục hành trình lập trình, xem lộ trình tự học lập trình từ con số 0.

Chia sẻ:
0.0 0 lượt đánh giá

Câu hỏi thường gặp

Người mới nên làm dự án Python đầu tiên là gì?

Hãy chọn dự án nhỏ, giải một việc thật của bạn: sổ chi tiêu, danh sách việc cần làm, đổi tên hàng loạt file, hay bot nhắc việc. Quan trọng là nó ghép được các kỹ năng cơ bản (biến, vòng lặp, hàm, file) và bạn dùng được thật. Bắt đầu nhỏ, chạy được, rồi mới thêm tính năng — đừng ôm dự án quá lớn ngay từ đầu.

Làm sao ghép các kiến thức rời rạc thành một chương trình hoàn chỉnh?

Chia chương trình thành các phần nhỏ, mỗi phần là một hàm: nhập liệu, xử lý, lưu, hiển thị. Dùng vòng lặp cho menu lặp lại, try/except để không sập khi nhập sai, và file để nhớ dữ liệu giữa các lần chạy. Viết từng phần cho chạy được rồi mới nối lại — đây chính là cách dự án trong bài này được dựng.

Học xong Python cơ bản thì nên học gì tiếp?

Tuỳ hướng bạn thích: làm web (Flask/Django), phân tích dữ liệu (pandas, matplotlib), tự động hoá công việc (openpyxl cho Excel, tự động hoá web), hoặc AI/máy học cơ bản. Trước khi nhảy sang framework, hãy luyện chắc nền tảng qua vài dự án nhỏ. Đọc thêm code người khác trên GitHub và làm lại theo cách của bạn cũng rất hiệu quả.

Thợ Code

Thợ Code

Thợ code chính hiệu, thích dắt người mới qua mấy đoạn 'khó nhằn' bằng giọng nhẹ tênh. Châm ngôn: cứ làm dự án thật, sai thì sửa, vui là chính.

Bài liên quan

Bài 13: Cài và dùng thư viện ngoài với pip trong Python
Lập trình

Bài 13: Cài và dùng thư viện ngoài với pip trong Python

Bài 13 series Python cho người mới (bài học 30 phút): dùng pip để cài thư viện ngoài, import và dùng chúng — mở ra kho công cụ khổng lồ ngoài thư viện chuẩn; kèm ví dụ, bài tập và mẹo môi trường ảo.

10 lỗi người mới học lập trình hay mắc và cách tránh
Lập trình

10 lỗi người mới học lập trình hay mắc và cách tránh

Học lập trình mãi không tiến, dễ nản và bỏ cuộc? Phần lớn do 10 sai lầm rất phổ biến của người mới. Bài này chỉ từng lỗi và cách sửa cụ thể — để bạn học nhanh hơn và không bỏ giữa chừng.