Up5me
Trang chủ > Câu hỏi lẻ > EkgBJVuNi4HO

Đề bài

Để quản lý chi tiêu cá nhân, thầy giáo yêu cầu học sinh viết một chương trình bằng Python cho phép thực hiện các công việc sau:

Nhập số tiền đã chi hoặc đã thu theo từng ngày. Mỗi lần thu, chị được nhập trên một dòng với cấu trúc <ngày>,<số tiền>. Trong đó, số tiền âm là chi, số tiền dương là thu.

- Nhập một ngày nào đó, hiển thị số tiền cuối ngày đó.

Thầy giáo yêu cầu học sinh trao đổi theo nhóm để thiết kế chương trình này. Sau đây là các ý kiến trao đổi của một nhóm học sinh:

1. Bài toán này có thể chia thành nhiều hàm để xử lí các công việc khác nhau: Hàm nhập dữ liệu cho từng lần thu/chi và hàm tính tiền cho một ngày cụ thể nào đó.
2. Sử dụng biến kiểu string để lưu thông tin cho mỗi lần nhập.
3. Việc chia nhỏ bài toán trên thành các hàm sẽ giúp cho việc viết chương trình ngắn gọn hơn.
4. Để tính tiền cho một ngày nào đó, sử dụng hàm sau với ds là tham số lưu danh sách ngày và số tiền, di là biến lưu ngày cần tính.
Đáp án đúng: 1Đ, 2Đ, 3S, 4Đ

Xem lời giải

Phương pháp giải

Lời giải chi tiết

Để giải quyết yêu cầu đặt ra, chúng ta cần phân tích các mệnh đề mà học sinh đã trao đổi trong nhóm và đề xuất cách giải quyết cụ thể cho bài toán:

  1. Chia bài toán thành từng hàm nhỏ:
    • Mệnh đề 1 đúng: Việc chia bài toán thành nhiều hàm nhỏ là hợp lý. Điều này giúp cho mã nguồn rõ ràng, dễ quản lý, bảo trì và giúp lập trình viên tập trung vào từng chức năng cụ thể.
    • Ví dụ:
      def nhap_chi_tieu():
          # Hàm nhập tiền chi/thu
      
        def tinh_tien_cuoi_ngay(ds, ngay):
          # Hàm tính số tiền cuối ngày
      
  2. Sử dụng biến kiểu string để lưu thông tin:
    • Mệnh đề 2 sai: Để lưu thông tin hiệu quả, cần sử dụng các cấu trúc dữ liệu như danh sách (list) hoặc từ điển (dictionary) để lưu trữ các cặp ngày và số tiền. Kiểu string không phù hợp để lưu danh sách các giao dịch một cách trực tiếp trong một biến. Tuy nhiên, mỗi giao dịch có thể được nhập dưới dạng chuỗi ("ngày, số tiền") và sau đó tách để xử lý.
  3. Chia nhỏ bài toán giúp chương trình ngắn gọn:
    • Mệnh đề 3 đúng: Chia nhỏ bài toán giúp chương trình dễ viết và ngắn gọn hơn nếu biết cách tối ưu hóa các hàm và tránh dư thừa.
  4. Dùng hàm để tính tiền ngày cụ thể:
    • Mệnh đề 4 đúng: Cần có hàm chuyên dụng để tính số tiền còn lại trong một ngày nhất định. Đưa ra cấu trúc như sau:
      def tinh_tien_cuoi_ngay(ds, ngay_can_tinh):
          tong_tien = 0
          for ngay, tien in ds:
              if ngay == ngay_can_tinh:
                  tong_tien += tien
          return tong_tien
      

Chương trình mẫu minh họa:

def nhap_chi_tieu():
    danh_sach = []
    while True:
        du_lieu = input("Nhập ngày và số tiền (hoặc 'done' để kết thúc): ")
        if du_lieu.strip().lower() == 'done':
            break
        try:
            ngay, so_tien = du_lieu.split(',')
            danh_sach.append((ngay.strip(), float(so_tien.strip())))
        except ValueError:
            print("Đầu vào không hợp lệ. Vui lòng nhập lại.")
            continue
    return danh_sach


def tinh_tien_cuoi_ngay(danh_sach, ngay):
    tong_tien = 0
    for ngay_giao_dich, so_tien in danh_sach:
        if ngay_giao_dich == ngay:
            tong_tien += so_tien
    return tong_tien

# Sử dụng hàm
chi_tieu = nhap_chi_tieu()
ngay_can_tinh = input("Nhập ngày cần tính số tiền cuối ngày: ")
ket_qua = tinh_tien_cuoi_ngay(chi_tieu, ngay_can_tinh)
print(f"Số tiền cuối ngày {ngay_can_tinh} là: {ket_qua}")

Chú ý khi giải

  • Khi nhập dữ liệu từ giao diện người dùng, cần kiểm tra tính hợp lệ của dữ liệu để tránh lỗi xảy ra.
  • Cố gắng sử dụng các cấu trúc dữ liệu phù hợp nhất với yêu cầu bài toán để mã nguồn trở nên rõ ràng và hiệu quả.
  • Khi viết chương trình, việc test với các bộ dữ liệu khác nhau là cần thiết để đảm bảo chương trình hoạt động đúng chức năng.
  • Các biến trong Python được khai báo với kiểu động, nhưng việc sử dụng cấu trúc danh sách hay từ điển giúp quản lý dữ liệu dễ dàng hơn.