Nhập môn Tư duy Lập trình/Mini challenge — từ đề tới lưu đồ hoàn chỉnh
23/31
Bài 23 / 31~12 phútTừ đề bài tới thuật toánMiễn phí lượt xem

Mini challenge — từ đề tới lưu đồ hoàn chỉnh

Một đề chưa gặp, không giảng gì trước. Bóc ba ô, giải tay ba ca, phân rã, vẽ lưu đồ, soi ca biên — rồi mới mở lời giải mẫu ra đối chiếu.

Làm sai bài này ở lần thử đầu là chuyện bình thường — nó không nói lên gì về việc bạn có hợp làm nghề này hay không. Đây là lần đầu tiên bạn tự chạy cả sáu khâu một mình, không ai đứng cạnh nhắc bước tiếp theo.

Bài này không dạy gì mới. Sáu bài vừa rồi đã đưa đủ công cụ: bóc đề, giải tay, vẽ lưu đồ, phân rã, tách hàm, soi ca biên. Đến lượt bạn cầm cả sáu lên cùng lúc, trên một đề chưa từng gặp.

1. Đề bài

Một cửa hàng ghi lại số tiền của từng hoá đơn trong ngày. Tính tổng doanh thu, nhưng chỉ tính các hoá đơn từ 50000 trở lên.

Đúng hai câu, và cả hai đều cần đọc kỹ. Trước khi lật sang mục sau, lấy giấy ra.

2. Lấy giấy — làm sáu khâu

Chạy đúng sáu khâu module này đã dạy, theo thứ tự — đừng nhảy sang vẽ lưu đồ khi khâu 1 và 2 chưa xong trên giấy:

  1. Bóc ba ô. Input là gì — kiểu dữ liệu, và ràng buộc của nó (một hoá đơn có thể âm không? danh sách hoá đơn có thể rỗng không?). Xử lý làm việc gì. Output là gì — đúng một con số hay nhiều số.
  2. Giải tay ba ca cụ thể. Tự chọn ba danh sách hoá đơn khác nhau, tính tổng bằng tay cho từng danh sách. Bắt buộc dựng ít nhất một danh sách có một hoá đơn đúng bằng 50000.
  3. Phân rã tới mức gõ được ngay. Từ ba ca vừa giải, tách quy trình thành các bước — mỗi bước phải nhỏ tới mức gõ thành code ngay, không cần nghĩ thêm.
  4. Vẽ lưu đồ bằng đúng bốn ký hiệu. Bầu dục, bình hành, chữ nhật, thoi — không hình nào khác.
  5. Cân nhắc tách một hàm. Nhóm bước "hoá đơn này có được tính không" có xứng đáng có tên riêng không? Nếu có, hàm đó nhận vào gì, trả ra gì — gợi ý la_hoa_don_lon(tien).
  6. Soi ca biên. Danh sách rỗng thì lời giải trả ra gì? Nếu mọi hoá đơn đều dưới ngưỡng thì sao? Và ca dễ sai nhất: một hoá đơn đúng bằng ngưỡng thì tính hay bỏ?

Làm xong cả sáu, bạn có trong tay: ba ô viết trên giấy, ba ca đã giải tay, một lưu đồ, một quyết định về hàm, và câu trả lời cho ba ca biên. Có đủ ngần đó rồi mới mở mục 3 hoặc mục 4.

3. Gợi ý

Chỉ mở phần này nếu bạn đã thử cả sáu khâu và đang kẹt ở một khâu cụ thể. Đây là câu hỏi định hướng, không phải đáp án.

Gợi ý — sáu câu hỏi tự trả lời

4. Đối chiếu

Chỉ mở phần này sau khi bạn đã làm xong cả sáu khâu trên giấy.

Lời giải mẫu — ba ô, lưu đồ, code, ca biên

5. Phần hai — đổi một chữ, đổi cả kết quả

Đề đổi lại: tính tổng doanh thu, nhưng chỉ tính các hoá đơn trên 50000. Chỉ khác đúng một chữ so với đề gốc — "trên" thay cho "từ... trở lên" — nhưng chữ đó lật hẳn một ca biên.

Tự trả lời trước khi kéo xuống bài tập: lời giải ở mục 4 phải đổi đúng mấy chỗ để khớp đề mới? Và với danh sách [50000, 20000], tong bây giờ in ra bao nhiêu?

Sắp lại các dòng dưới đây cho khớp đề mới:

Sắp lại thứ tự dòng

Đưa từng dòng vào khung lời giải rồi xếp cho đúng thứ tự và đúng thụt lề. Kho có thể chứa dòng thừa.

Kho dòng (6)

  • tong = tong + tien
  • print(tong)
  • if tien >= 50000:
  • if tien > 50000:
  • for tien in hoa_don:
  • tong = 0

Lời giải của bạn (0/5)

Chưa có dòng nào. Bấm “Đưa vào” ở trên.

Gợi ý: Bốn dòng còn lại không đổi so với bản gốc. Dòng nào đang kiểm tra ngưỡng 50000?

Xong bài tập, so lại con số bạn vừa tính cho danh sách [50000, 20000] với con số ở ca ngưỡng của mục 4. Hai con số đó lệch nhau đúng bằng giá trị của hoá đơn nằm sát ngưỡng.

6. Điều bạn vừa làm được

Bạn vừa chạy trọn sáu khâu module này dạy, trên một đề chưa từng thấy:

  • Bóc ba ô từ một đoạn văn xuôi hai câu.
  • Giải tay ba ca, và tìm đúng ca hiểm nhất — ca chạm ngưỡng.
  • Phân rã quy trình tới mức mỗi bước gõ được ngay.
  • Vẽ một lưu đồ đúng bốn ký hiệu, kể cả nhánh không làm gì.
  • Cân nhắc và đặt tên cho một hàm.
  • Soi ba ca biên trước khi chạy dòng code nào.

Quy trình này không gắn với Python. Đổi "hoá đơn" thành một đối tượng khác, đổi Python thành Java, sáu khâu trên không đổi một chữ nào — thứ đổi chỉ là cú pháp gõ ra ở bước cuối cùng.

Bài tiếp theo: Tổng kết module — bạn đã có một quy trình lặp lại được

Bài này đáng gửi cho bạn học cùng?

Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.

Bài này có giúp bạn hiểu bản chất không?

Hỏi đáp về bài này

Chưa có câu hỏi

Đặt câu hỏi

Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).

Đặt câu hỏi đầu tiên

Bài tiếp theo

Tổng kết module — bạn đã có một quy trình lặp lại được