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 đọc4 lượt xem
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

AI có thay thế lập trình viên không? Góc nhìn thực tế
Lập trình

AI có thay thế lập trình viên không? Góc nhìn thực tế

AI viết code ngày càng giỏi khiến nhiều người lo: liệu lập trình viên có bị thay thế? Bài này đưa góc nhìn thực tế — AI làm được gì, chưa làm được gì, nghề lập trình đang thay đổi ra sao, và người mới nên học gì để không bị bỏ lại.

4 lượt xem
Frontend, backend hay fullstack: nên theo hướng nào?
Lập trình

Frontend, backend hay fullstack: nên theo hướng nào?

Mới học lập trình web và phân vân giữa frontend, backend hay fullstack? Bài này giải thích rõ mỗi hướng làm gì, cần kỹ năng nào, hợp với ai, cơ hội việc làm ra sao — và lời khuyên thực tế cho người mới chọn đường.

1 lượt xem
10 dự án nhỏ để luyện lập trình cho người mới
Lập trình

10 dự án nhỏ để luyện lập trình cho người mới

Học cú pháp mãi mà không tiến bộ? Cách nhanh nhất để giỏi lập trình là làm dự án nhỏ. Bài này gợi ý 10 dự án tăng dần độ khó — từ máy tính bỏ túi tới ứng dụng ghi chú — kèm kỹ năng mỗi dự án rèn và cách bắt tay làm.