Halimbawa (tested): bago
import csv
from datetime import date
def report(path):
total = 0
for row in csv.DictReader(open(path)):
total += int(row["qty"]) * float(row["price"])
if date.today().weekday() == 5:
total = total * 0.9
print("Total:", round(total, 2))
Gumagana ito (Total: 33.0 para sa order file mula sa course 7.5.3 kapag Biyernes), pero ang isang function ay nagbabasa ng file, gumagawa ng math, tumitingin sa totoong kalendaryo at nagpi-print. Maite-test mo lang ang diskwento sa Sabado kapag Sabado, at hindi tahasang isinasara ang file.
Halimbawa (tested): pagkatapos
"""Order totals: pure logic, with the outside world passed in."""
import csv
from datetime import date
SATURDAY = 5
WEEKEND_DISCOUNT = 0.10
def read_lines(path):
"""Return (qty, price) pairs from an order CSV file."""
with open(path, newline="", encoding="utf-8") as f:
return [(int(r["qty"]), float(r["price"])) for r in csv.DictReader(f)]
def order_total(lines, day):
"""Return the total of the lines, with the Saturday discount on that day."""
total = sum(qty * price for qty, price in lines)
if day.weekday() == SATURDAY:
total *= 1 - WEEKEND_DISCOUNT
return round(total, 2)
def main(path, today=date.today):
print(f"Total: {order_total(read_lines(path), today()):.2f}")
Hindi na umaasa ang mga test sa totoong kalendaryo:
from datetime import date
from after import main, order_total
LINES = [(10, 2.50), (2, 4.00)]
def test_friday_has_no_discount():
assert order_total(LINES, date(2026, 11, 13)) == 33.0
def test_saturday_has_ten_percent_off():
assert order_total(LINES, date(2026, 11, 14)) == 29.7
def test_main_with_a_fixed_day(tmp_path, capsys):
f = tmp_path / "order.csv"
f.write_text("product,qty,price\nPen,10,2.50\nNotebook,2,4.00\n", encoding="utf-8")
main(f, today=lambda: date(2026, 11, 14))
assert capsys.readouterr().out == "Total: 29.70\n"
Ang python3 -m pytest -q ay nag-print ng 3 passed. Ang 13 Nobyembre 2026 ay Biyernes at ang 14 Nobyembre 2026 ay Sabado. Ginagamit pa rin ng main ang totoong petsa kapag walang nagpasa ng today, kaya walang pagkakaibang makikita ang mga normal na user.
ClaudeStuck? Copy a ready-made prompt for Claude
Copy this, open Claude, paste it, and Claude will walk you through the lesson step by step.
For a grown-up: Claude is for adults (18+). Copy this, paste it into Claude, and use the answer to explain the lesson to your child.
I'm learning "Python Engineering: disenyo, review at mentoring" on The Future Market. Lesson 1: "Disenyo para sa pagbabago".
What the lesson teaches:
- Bago ang course na ito: Python Projects: testing, packaging and version control (course 7.5.3). Dapat alam mo na ang mga module at ang src layout, sarili mong exception class, pytest na may fixture at parametrize, mga git branch at merge, pyproject.toml at semantic versioning. Hindi na uulitin ng course na ito ang mga iyon.
- Malaking bahagi ng trabaho sa code ay nangyayari pagkatapos itong unang isulat: binabasa ito ng mga tao, inaayos at binabago. Simpleng sinasabi ng PEP 8, ang style guide ng Python: mas madalas basahin ang code kaysa isulat.
- Ang Zen of Python (PEP 20, i-type ang import this sa Python para makita) ay nagbibigay ng maiikling patakaran sa disenyo na puwede mong banggitin sa mga review, halimbawa "Readability counts.", "Simple is better than complex.", "Errors should never pass silently." at "If the implementation is hard to explain, it's a bad idea."
- Cohesion: ang lahat ng nasa isang function o module ay para sa isang trabaho. Coupling: gaano kalaki ang pag-asa ng isang bahagi sa mga detalye ng iba. Layunin ang mataas na cohesion at mababang coupling.
- Pure core, manipis na shell. Ilagay ang mga kalkulasyon at desisyon sa mga pure function: parehong input, parehong output, walang pagpi-print, walang file, walang orasan, walang network. Ilagay ang panlabas na mundo (mga file, input(), pagpi-print, petsa ngayon, mga web call) sa manipis na panlabas na layer.
- Ipasa papasok ang mga dependency. Kung kailangan ng function ang petsa ngayon, price list o file, ipasa ito bilang argument sa halip na abutin sa loob. Makakapagpasa na ang mga test ng nakapirming petsa o pekeng price list. Tinatawag itong dependency injection, at sa Python ay madalas na dagdag na argument lang na may makatwirang default.
- Pangalanan ang mga bagay ayon sa kahulugan nila: mas mahusay ang WEEKEND_DISCOUNT = 0.10 kaysa hubad na 0.9 sa gitna ng formula. Ang mga constant na malaking letra na may underscore ay ayon sa PEP 8.
The exercise I'm working on:
Kumuha ng isang script na isinulat mo sa course 7.5.2 o 7.5.3. Maghanap ng function na naghahalo ng kalkulasyon sa mga file, pagpi-print, orasan o network. Hatiin ito sa isang pure function at manipis na shell, ipasa ang panlabas na bagay bilang argument, at sumulat ng dalawang test para sa pure na bahagi. Sumulat ng tatlong pangungusap: ano ang mahirap i-test noon, ano ang binago mo, at ano ang mas madali na ngayon.
I'm stuck. Please:
1. Explain the main idea in plain, simple words with one everyday example.
2. Walk me through the exercise one small step at a time. Ask me what I've done so far before giving the next step.
3. Don't just give me the final answer. Help me do it myself, and check my work when I share it.
I'm a parent helping my child (about 8 years old) with a lesson called "Disenyo para sa pagbabago" from the course "Python Engineering: disenyo, review at mentoring".
Here's what the lesson says:
Isipin ang toaster na ang plug ay nakabuo na sa dingding. Gumagana ito, pero hindi mo ito mailipat, hindi mo ma-test sa mesa sa kusina at hindi mo mapalitan ang plug. Ang magandang disenyo ay nagbibigay ng plug sa bawat bahagi: ang bahaging nagto-toast ay may isang trabaho lang, at ang kuryente ay pumapasok sa pamamagitan ng kordon na puwede mong hugutin. Kaya mo na itong i-test kahit saan at magbago ng isang bahagi nang hindi nasisira ang iba.
The activity:
Kumuha ng isang script na isinulat mo sa course 7.5.2 o 7.5.3. Maghanap ng function na naghahalo ng kalkulasyon sa mga file, pagpi-print, orasan o network. Hatiin ito sa isang pure function at manipis na shell, ipasa ang panlabas na bagay bilang argument, at sumulat ng dalawang test para sa pure na bahagi. Sumulat ng tatlong pangungusap: ano ang mahirap i-test noon, ano ang binago mo, at ano ang mas madali na ngayon.
Please explain this so an 8-year-old understands: short sentences, a fun everyday example, and no hard words.
Then give me 3 simple questions I can ask my child to check they understood, and a way to do the activity together, one tiny step at a time.