Giai đoạn 1 · Đặt móng · 8 buổi

Đo một căn phòng. Viết ra báo giá.

Python không bắt đầu từ bài toán xa lạ. Trong tháng đầu, bạn biến chiều dài, chiều rộng, đơn giá và danh sách vật tư thành những tool ngắn dùng được ngay trên công trường.

Cảnh đo chiều dài và chiều rộng một phòng đang cải tạo bằng thước laser, có sơ đồ hình chữ nhật và công thức diện tích

Mục tiêu của tháng 1

Từ thao tác máy tính đến tool báo giá

Code < 15 dòng
8

buổi học, mỗi buổi 1 giờ. Bạn sẽ quen thao tác máy tính, gõ code cơ bản và làm tool tính toán báo giá thay vì học cú pháp rời rạc.

Tư duy xuyên suốt: biến là thùng chứa, if/else là kiểm tra, list là vật tư trên clipboard, còn function là một tổ đội chuyên biệt nhận việc và trả kết quả.

Sản phẩm đích

Tool Báo Giá Lát Sàn

Nhập chiều dài và chiều rộng → tính Sqft → nhân đơn giá USD → xuất báo giá.

01Đo phòng
02Tính diện tích
03Xuất giá
Tuần 1Vật liệu & Đo đạcB1–B2
Tuần 2Tiêu chuẩn & Giám sátB3–B4
Tuần 3Danh sách & Thi côngB5–B6
Tuần 4Tổ đội Chuyên biệtB7–B8

Bản vẽ thi công

Tám buổi, một mạch công việc

Mỗi bài mới giải quyết một phần của quy trình. Đến B8, phần nhập liệu, kiểm tra, danh sách và hàm đã được đóng gói thành Cỗ Máy Báo Giá Tự Động.

Tuần 1 · Vật liệu & Đo đạc

Đặt nền bằng số đo thật

B1 → B2
BUỔI 1 · B1biến và phép gán

Môi trường & Biến số

Biến giống một thùng chứa có nhãn. width = 12 nghĩa là thùng tên width đang giữ giá trị 12; khi đọc lỗi, hãy kiểm tra tên biến, dấu bằng và kiểu dữ liệu trước.

  • Gán chiều dài, chiều rộng và đơn giá USD.
  • Chạy code, đọc lỗi, sửa từng dòng.
Điểm bàn giaoBa biến có tên rõ ràng cho một phòng.
Bài tập tổng kết: Tạo biến cho chiều dài, chiều rộng, đơn giá; in diện tích và chi phí của một phòng.
Hiện source code mẫu
length_m = 5
width_m = 3.4
price_usd = 12
area_m2 = length_m * width_m
total_usd = area_m2 * price_usd
print(f"Diện tích: {area_m2:.2f} m2")
print(f"Chi phí: {total_usd:.2f} USD")
BUỔI 2 · B2nhập liệu và chuyển kiểu

Nhập dữ liệu & tính toán đơn giản

input() nhận dữ liệu từ người dùng nhưng trả về chuỗi. Muốn nhân chiều dài với chiều rộng, cần chuyển nó thành số bằng float() hoặc int().

  • Tính Sqft từ chiều dài × chiều rộng.
  • Nhân diện tích với đơn giá USD.
Sản phẩmTool Báo Giá Lát Sàn phiên bản đầu.
Bài tập tổng kết: Nhập chiều dài, chiều rộng và đơn giá từ bàn phím rồi tính báo giá.
Hiện source code mẫu
length_m = float(input("Dài (m): "))
width_m = float(input("Rộng (m): "))
price_usd = float(input("Đơn giá USD/m2: "))
area_m2 = length_m * width_m
print(f"Tổng: {area_m2 * price_usd:.2f} USD")
Tuần 2 · Tiêu chuẩn & Giám sát

Đưa quy tắc công trường vào code

B3 → B4
BUỔI 3 · B3điều kiện đơn

if/else là một lần kiểm tra

Chương trình không “đoán”. Nó kiểm tra một điều kiện rồi đi vào nhánh if hoặc else. Với 900 sqft và điều kiện lớn hơn 1.000, nhánh điều kiện là sai.

  • Đặt ngưỡng diện tích.
  • Hiển thị hướng xử lý tương ứng.
Điểm bàn giaoTool biết diện tích nào cần báo giá thường hay nâng cao.
Bài tập tổng kết: Nếu diện tích lớn hơn 100 m2, in thông báo cần báo giá nâng cao; ngược lại in báo giá tiêu chuẩn.
Hiện source code mẫu
area_m2 = float(input("Diện tích (m2): "))
      if area_m2 > 100:
        print("Chuyển sang báo giá nâng cao")
      else:
        print("Báo giá tiêu chuẩn")
BUỔI 4 · B4logic đa điều kiện

Hai quy tắc có thể cùng chạy

Tool Báo Giá Nâng Cao giảm 5% nếu diện tích > 1.000 sqft và cộng 10% phí dọn rác nếu là nhà cũ. Một nhà cũ 1.200 sqft nhận cả hai xử lý; thứ tự tính phải được viết rõ.

  • Phân biệt and với hai lần kiểm tra độc lập.
  • Kiểm tra trường hợp vượt ngưỡng và nhà cũ đồng thời.
Điểm bàn giaoBáo giá nâng cao có quy tắc minh bạch.
Bài tập tổng kết: Tính chi phí sau khi giảm 5% cho diện tích lớn và cộng 10% phí dọn rác cho nhà cũ.
Hiện source code mẫu
area_m2 = 120
      base = area_m2 * 12
      if area_m2 > 100:
        base *= 0.95
      is_old_home = True
      if is_old_home:
        base *= 1.10
      print(f"Báo giá: {base:.2f} USD")
Tuần 3 · Danh sách & Thi công

Đổi clipboard thành dữ liệu có thể duyệt

B5 → B6
BUỔI 5 · B5list và vòng lặp

Một list là cả danh sách vật tư

Thay vì viết lại cùng một lệnh cho sơn, đinh và gỗ, đưa chúng vào một list. Vòng lặp for đi qua từng phần tử; while phù hợp khi điều kiện kết thúc chưa biết trước.

Điểm bàn giaoDanh sách vật tư có thể duyệt từng dòng.
Bài tập tổng kết: Duyệt danh sách vật tư và in tên từng vật tư cần mua.
Hiện source code mẫu
materials = ["Sơn", "Đinh", "Gỗ"]
      for material in materials:
        print("Cần mua:", material)
BUỔI 6 · B6tích lũy tổng

Duyệt vật tư và cộng dồn

Với mỗi vật tư, tính số lượng × đơn giá rồi cộng vào total. Biến tổng phải khởi tạo trước vòng lặp; đặt bên trong sẽ làm mất kết quả của lần trước.

Sản phẩmTool Quản Lý Vật Tư, tính tổng tiền cần chi trả tại Home Depot.
Bài tập tổng kết: Tính tổng tiền của ba vật tư từ số lượng và đơn giá.
Hiện source code mẫu
items = [("Sơn", 10, 450000), ("Đinh", 50, 35000), ("Gỗ", 20, 2800000)]
      total = 0
      for name, quantity, price in items:
        subtotal = quantity * price
        total += subtotal
        print(name, subtotal)
      print("Tổng cộng:", total)
Tuần 4 · Tổ đội Chuyên biệt

Đóng gói để dùng lại

B7 → B8
BUỔI 7 · B7hàm và giá trị trả về

Function là một tổ đội nhận việc

Hàm nhận tham số, làm một nhiệm vụ cụ thể và dùng return để đưa kết quả về nơi gọi. Hàm báo giá giúp không phải chép lại công thức ở nhiều màn hình.

Điểm bàn giaoMột hàm báo giá có thể gọi lại cho nhiều phòng.
Bài tập tổng kết: Viết hàm nhận dài, rộng, đơn giá và trả về tổng chi phí.
Hiện source code mẫu
def estimate(length_m, width_m, price_usd):
        return length_m * width_m * price_usd

      print(estimate(5, 3.4, 12))
BUỔI 8 · B8đóng gói chương trình

Cỗ Máy Báo Giá Tự Động

Đầu vào tối thiểu là diện tích. Chương trình gọi hàm báo giá, áp dụng quy tắc cần thiết và xuất kết quả ngay. Đây là lúc các mảnh B1–B7 thành một tool hoàn chỉnh.

Sản phẩmCỗ Máy Báo Giá Tự Động.
Bài tập tổng kết: Đóng gói hàm báo giá thành chương trình có nhập liệu và kiểm tra dữ liệu cơ bản.
Hiện source code mẫu
def estimate(length_m, width_m, price_usd):
        if length_m <= 0 or width_m <= 0 or price_usd <= 0:
          return None
        return length_m * width_m * price_usd

      total = estimate(float(input("Dài: ")), float(input("Rộng: ")), float(input("Đơn giá: ")))
      print("Dữ liệu không hợp lệ" if total is None else f"Tổng: {total:.2f} USD")

Tương tác · logic đa điều kiện

Chạm vào ngưỡng 1.000 sqft

Thanh trượt mô phỏng điều kiện của B4. Tăng diện tích qua 1.000 sqft để thấy giảm 5%; bật “nhà cũ” để thấy phí dọn rác 10% được áp dụng đồng thời.

Giả định minh họa: đơn giá lát sàn 3,50 USD/sqft.

900 sqft
400 sqftNgưỡng giảm 1.000 sqft1.800 sqft
Giảm 5% diện tích lớn
Đang tắt · chưa vượt 1.000 sqft
Phí dọn rác nhà cũ
Đang tắt · nhà mới

Tổng minh họa: $3,150.00

Sơ đồ dòng dữ liệu của tool báo giá lát sàn từ chiều dài và chiều rộng đến Sqft, đơn giá USD và báo giá

B5–B6 · list, for và total

Clipboard vật tư biết cộng tiền

Sửa số lượng hoặc đơn giá để thấy cách một vòng lặp sẽ tính từng dòng rồi cộng vào total. Đây là mô hình nhỏ của Tool Quản Lý Vật Tư.

Bảng vật tư công trường gồm sơn, đinh và gỗ với số lượng, đơn giá và tổng tiền
Vật tưSố lượngĐơn giá USDThành tiền
Sơn$168.00
Đinh$51.00
Gỗ$216.00
Tổng cần chi trả tại Home Depot$435.00

Playground · sửa, chạy, đọc lỗi

Mỗi buổi một đoạn code ngắn

Các ví dụ đều giữ dưới 15 dòng. Bạn có thể sửa code, bấm chạy và quan sát thông báo theo đúng tư duy của buổi học. Nếu code thiếu ngoặc hoặc để trống, trình chạy trả về lỗi thân thiện thay vì im lặng.

Đọc đầu vào → đặt tên rõ → chạy một thay đổi → kiểm tra kết quả.

Đừng sửa cả công trường trong một lần chạy.

B1 · Biếnthùng chứa
B2 · Tính Sqftinput → số
B3 · if/elsekiểm tra
B4 · Hai quy tắcgiảm + phí
B5 · List + forvật tư
B6 · totalcộng dồn
B7 · Functionreturn
B8 · Đóng góitool hoàn chỉnh

Checkpoint · lưu tiến độ học

Bạn đã sẵn sàng bàn giao B1–B8?

Chọn một đáp án cho mỗi câu. Sau khi chấm, trang sẽ chỉ lưu điểm, skillTag và câu trả lời vào assessmentEntry — không yêu cầu tên hay email.

B1 · biến và phép gán1 điểm

Biến nào lưu chiều rộng sau width = 12?

B2 · nhập liệu và chuyển kiểu1 điểm

Vì sao cần đổi input thành số trước phép nhân?

B3 · điều kiện đơn1 điểm

Với sqft = 900if sqft > 1000, nhánh nào chạy?

B4 · logic đa điều kiện1 điểm

Nhà cũ 1.200 sqft cần áp dụng gì?

B5 · list và vòng lặp1 điểm

Công cụ phù hợp để đi qua từng vật tư là gì?

B6 · tích lũy tổng1 điểm

Biến total nên được khởi tạo ở đâu?

B7 · hàm và giá trị trả về1 điểm

Lợi ích chính của return trong hàm báo giá là gì?

B8 · đóng gói chương trình1 điểm

Đầu vào tối thiểu của Cỗ Máy Báo Giá Tự Động là gì?

Bảng bàn giao

0/8

Kỹ năng nào đã đạt, kỹ năng nào cần quay lại playground:

Tạo bài luyện tiếp theo từ kỹ năng còn yếu