Skip to content

Commit 3d73b0e

Browse files
rootroot
authored andcommitted
fix: prereq-safe tasks in lessons 4-6 + if-result syntax (P0.2)
1 parent abc54a0 commit 3d73b0e

2 files changed

Lines changed: 26 additions & 24 deletions

File tree

app/content.py

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -285,20 +285,17 @@ def lesson(
285285
),
286286
text(
287287
"if-result",
288-
"Что выведет `if 3 > 5: print('да') else: print('нет')`?",
288+
"Что выведет этот код?\n\nif 3 > 5:\n print('да')\nelse:\n print('нет')",
289289
["нет"],
290290
"3 не больше 5, поэтому выполняется ветка else.",
291291
),
292292
code(
293293
"if-code",
294-
"Напиши `is_adult(age)`, возвращающую True при возрасте 18 и больше.",
295-
"def is_adult(age):\n # твой код\n pass\n",
296-
[
297-
{"kind": "call", "call": "is_adult(18)", "expected": True},
298-
{"kind": "call", "call": "is_adult(17)", "expected": False},
299-
],
300-
"Условие внутри функции помогает вернуть нужный логический результат.",
301-
"Сравни age с 18 и верни результат сравнения либо используй if/else.",
294+
"Дано `temperature = 22`. Если температура >= 25, выведи `Надень шорты`, иначе — `Возьми куртку`.",
295+
"temperature = 22\n# твой код\n",
296+
[{"kind": "stdout", "expected": "Возьми куртку"}],
297+
"Условие выбирает одежду по температуре.",
298+
"Проверь temperature >= 25: в одной ветке выведи про шорты, в другой — про куртку.",
302299
),
303300
],
304301
),
@@ -338,14 +335,11 @@ def lesson(
338335
text("for-sum", "Чему равна сумма чисел в `range(1, 4)`?", ["6"], "Это 1 + 2 + 3 = 6."),
339336
code(
340337
"for-code",
341-
"Напиши `sum_to(number)`, возвращающую сумму от 1 до number включительно.",
342-
"def sum_to(number):\n # твой код\n pass\n",
343-
[
344-
{"kind": "call", "call": "sum_to(1)", "expected": 1},
345-
{"kind": "call", "call": "sum_to(5)", "expected": 15},
346-
],
347-
"Цикл избавляет от ручного сложения каждого числа.",
348-
"Создай total = 0 и пройди range(1, number + 1).",
338+
"Выведи числа от 1 до 5, каждое с новой строки.",
339+
"# Напиши цикл\n",
340+
[{"kind": "stdout", "expected": "1\n2\n3\n4\n5"}],
341+
"Цикл for и range позволяют вывести числа без повторения print().",
342+
"Пройди по range(1, 6) и выведи каждое число через print().",
349343
),
350344
],
351345
),
@@ -391,14 +385,11 @@ def lesson(
391385
),
392386
code(
393387
"while-code",
394-
"Напиши `countdown(start)`, возвращающую список от start до 1 через while.",
395-
"def countdown(start):\n # твой код\n pass\n",
396-
[
397-
{"kind": "call", "call": "countdown(1)", "expected": [1]},
398-
{"kind": "call", "call": "countdown(4)", "expected": [4, 3, 2, 1]},
399-
],
388+
"Дано `start = 5`. Выведи обратный отсчёт до 1, каждое число с новой строки, затем `Пуск!`.",
389+
"start = 5\n# твой код\n",
390+
[{"kind": "stdout", "expected": "5\n4\n3\n2\n1\nПуск!"}],
400391
"while хорош, когда счётчик меняется до достижения границы.",
401-
"Начни с result = [] и уменьшай start после добавления в список.",
392+
"Пока start больше 0, выводи его и уменьшай на 1. После цикла выведи «Пуск!».",
402393
),
403394
],
404395
),

tests/test_curriculum.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,14 @@ def test_every_module_has_a_valid_exam() -> None:
2525
for exam in EXAMS.values():
2626
assert len(exam["question_ids"]) >= 4
2727
assert all(question_id in QUESTION_BY_ID for question_id in exam["question_ids"])
28+
29+
30+
def test_lessons_four_to_six_do_not_require_future_topics() -> None:
31+
assert QUESTION_BY_ID["if-result"]["prompt"] == (
32+
"Что выведет этот код?\n\nif 3 > 5:\n print('да')\nelse:\n print('нет')"
33+
)
34+
assert QUESTION_BY_ID["if-code"]["tests"] == [{"kind": "stdout", "expected": "Возьми куртку"}]
35+
assert QUESTION_BY_ID["for-code"]["tests"] == [{"kind": "stdout", "expected": "1\n2\n3\n4\n5"}]
36+
assert QUESTION_BY_ID["while-code"]["tests"] == [
37+
{"kind": "stdout", "expected": "5\n4\n3\n2\n1\nПуск!"}
38+
]

0 commit comments

Comments
 (0)