В цепочке условий сверху стоит проверка amount > 100, а ниже — amount > 200 и заключительная ветка. Для значения 250 нужно отдельное поведение, отличающееся от значений в диапазоне от 100 до 200. Что не так с таким порядком проверок?
AСработает первая проверка
amount > 100, и в эту же ветку попадут значения, для которых хотели отдельный сегмент свыше 200BСработает проверка
amount > 200, потому что интерпретатор выбирает наиболее специфичное условие из всей цепочкиCСработает заключительная ветка
else, потому что обе проверки конфликтуют между собой и интерпретатор пропускает их обеDЛогика будет работать неверно: для значения 250 нужно поставить проверку
amount > 200 выше, чтобы значения свыше 200 попали в свою веткуПравильный ответ. Срабатывает первая истинная проверка, поэтому более узкое условие должно стоять выше более широкого.
Разбор
Условия проверяются сверху вниз, и срабатывает первая истинная проверка. При значении 250 условие amount > 100 уже истинно, поэтому управление никогда не дойдёт до проверки amount > 200, и обе группы значений сольются в одну ветку. Чтобы значения свыше 200 попадали в отдельный сегмент, более специфичную проверку amount > 200 нужно ставить выше, чем amount > 100. Заключительная ветка в этой ситуации не срабатывает, потому что одна из верхних проверок уже истинна.
Проверь себя · 1/3разбор после ответа
Нужно сегментировать пользователей по
orders_cnt: 0 → 'new', 1–4 → 'low', 5+ → 'high'. Какой порядок условий в цепочке if/elif/else корректный?Ещё вопросы по теме «Циклы и условия»
- Есть словарь выручки по странам `revenue_by_country = {'RU': 100, 'KZ': 50}`. Как корректно посчитать сумму значений через цикл `for`?
- Нужно найти индекс первого отрицательного значения в списке `amounts = [10, 0, -5, 7]`. Выполняется `idx = None`, затем цикл `for i, a in enumerate(amounts):`, и при `if a < 0:` выполняются `idx = i` и `break`. Чему будет равно `idx` после выполнения?
- Есть списки пользователей и трат: `users = ['u1', 'u2']` и `spends = [100, 200]`. После `d = {}`, в цикле `for u, s in zip(users, spends):` выполняется `d[u] = s`. Чему равно `d['u2']`?
- Нужно сегментировать пользователей по `orders_cnt`: 0 → `'new'`, 1–4 → `'low'`, 5+ → `'high'`. Какой порядок условий в цепочке `if`/`elif`/`else` корректный?
- Какой фрагмент `while` вероятнее всего приведёт к бесконечному циклу, если список `events` непустой?
- Все вопросы по «Циклы и условия» →