Repository navigation
3.Кривчанская Елена Ивановна. 614 - #113
Flounderena wants to merge 17 commits into
Conversation
first task 25.09.2026
first task 25.09.2026
update
Second task utils
second task crud
second task storage
second task cart
| """ | ||
| # TODO: реализуйте функцию (используйте своё решение части 2) | ||
| return 0 | ||
| if len(storage) == 0: |
There was a problem hiding this comment.
Нарушение критерия T4. Минус 0,25 балла
| ) | ||
| storage[ind] = new_product | ||
| return storage[ind] | ||
| if storage[ind][NAME_INDEX] == name: |
There was a problem hiding this comment.
Эта проверка неверная. Если занятое имя будет принадлежать записи, которая хранится после записи с искомым ID, то эта проверка просто не будет выполнена, и в сторадж попадет дубликат имени. Из-за этой ошибки некоторые тесты не пройдены
| """ | ||
| # TODO: реализуйте функцию | ||
| return 0 | ||
| name = normalize_product_name(fields[0]) |
There was a problem hiding this comment.
Использование магических констант для индексации полей продуктов. Нарушение критерия S3. Минус балл
| quantity = int(s_quantity) | ||
| fields = (name, price, quantity) | ||
| res = create_product(storage, fields) | ||
| if res: |
There was a problem hiding this comment.
Здесь не следовало использовать явную проверку с принтом. Вы же определили функцию print_result для этих целей. А так получилось явное дублирование логики.
Нарушение критерия S1. Минус балл
| match command: | ||
| case ["help"]: | ||
| show_help() | ||
| return True |
There was a problem hiding this comment.
Можно было не писать return в каждом case. Достаточно было ограничиться return False для кейса с командой "exit", а return True написать в конце функции. В Python нет провала кейсов, как в C++, так что это корректно бы работало, и сократило бы объем кода
| case ["show"]: | ||
| print(get_storage_str_representation(storage)) | ||
| return True | ||
| case ["create", name, s_price, s_quantity]: |
There was a problem hiding this comment.
Очень хвалю вас за использование match-case. Но, к сожалению, для команд "create" и "update" в шаблонах допущена ошибка. Такой шаблон требует, чтобы имя товара name состояло строго из одного слова. Поэтому команды типа create cordless drill 89.90 12 не обрабатываются, что является ошибкой. Часть тестов не проходит.
Чтобы избежать этой ошибки, следовало записать шаблон следующим образом:
| case ["create", name, s_price, s_quantity]: | |
| case ["create", *name, s_price, s_quantity]: |
| if res_d: | ||
| print(res_d) | ||
| return True | ||
| case [_]: |
There was a problem hiding this comment.
В этом шаблоне допущена ошибка. Шаблон [_] обозначает следующее: коллекция из одного элемента. Т.е. мы будем корректно обрабатывать неизвестные команды только в том случае, если они состоят из одного слова. Если слов будет больше, то мы рискуем не найти нужного обработчика. Обработчика по умолчанию нет, поэтому функция вернет False, что приведет к ошибкам тестирования.
Корректно определять случай по умолчанию следует так:
| case [_]: | |
| case _: |
| print(HELP_TEXT) | ||
|
|
||
|
|
||
| def print_result(result: object) -> None: |
There was a problem hiding this comment.
Из-за того, что этот код нигде не используется, он является мертвым. Нарушение критерия M4. Минус 0.5 балла
| # TODO: при необходимости добавьте свои вспомогательные функции | ||
|
|
||
|
|
||
| def get_storage_str_representation(storage: list[Product]) -> str: |
There was a problem hiding this comment.
Эта функция нарушает принцип единой ответственности. В ней определена и логика определения максимальной длины полей, и логика форматирования текста.
Нарушение критерия S2. Минус балл
No description provided.