Repository navigation
Conversation
|
|
||
| def generate_product_id(storage: list[Product]) -> int: | ||
| """Choose the identifier for the next product added to ``storage``. | ||
| if len(storage) == 0: |
There was a problem hiding this comment.
Нарушение критерия T4. Минус 0.25 балла
| print("product name must not be blank") | ||
| return None | ||
|
|
||
| for i in range(len(storage)): |
There was a problem hiding this comment.
Нарушение критерия T5. Минус 0.25 балла
| case ["show"]: | ||
| print(get_storage_str_representation(storage)) | ||
| return True | ||
| case ["create", *command]: |
There was a problem hiding this comment.
Вы могли бы проверять состав команды прямо тут, т.к. конструкция match-case как раз и нужна для сопоставления шаблонов:
| case ["create", *command]: | |
| case ["create", *name_parts, price, quantity]: |
А так у вас получилось дублирование логики проверки числа слова. Это нарушение критерия S1. Минус балл
| if len(command) < 3: | ||
| print(f"'{line}' is not a command") | ||
| return True | ||
| quantity = int(command[-1]) |
There was a problem hiding this comment.
Нарушение критерия S3. Минус балл
| match line.split(): | ||
| case ["help"]: | ||
| show_help() | ||
| return True |
There was a problem hiding this comment.
Нет необходимости писать return True в каждом кейсе. Достаточно было бы написать return False в кейсе для обработки команды exit и return True - в конце функции. Т.к. в Python, в отличие от C/C++, нет провала кейсов, это бы работало корректно, и вам не нужно было бы писать лишний код
| max(len_headers[3], len_quantity), | ||
| ] | ||
|
|
||
| s = ( |
There was a problem hiding this comment.
Нарушение критерия M2. Минус 0.5 балла
| ) | ||
|
|
||
| for product in storage: | ||
| s += "\n" |
There was a problem hiding this comment.
Нарушение критерия T8. Минус 0.25 балла
| ] | ||
|
|
||
| s = ( | ||
| f"| ID {' ' * (len_headers[0] - 2)}| name {' ' * (len_headers[1] - 4)}| price {' ' * (len_headers[2] - 5)}| quantity {' ' * (len_headers[3] - 8)}|\n" |
There was a problem hiding this comment.
ruff не ругается, но фактически, это очень длинная строка. Такие строки сложно читать. Также из-за таких строк сложнее анализировать код в двух и более параллельно открытых вкладках. Длинные строки и строковые литералы старайтесь записывать на нескольких физических строках. Следить за тем, чтобы длина строки не превышала ограничений, принятых на проекте (в рамках нашего курса - это 88 символов)
| len_price = len(str(product[PRICE_INDEX])) | ||
| len_quantity = len(str(product[QUANTITY_INDEX])) | ||
|
|
||
| s += f"| {product[PRODUCT_ID_INDEX]} {' ' * (len_headers[0] - len_id)}| {product[NAME_INDEX]} {' ' * (len_headers[1] - len_name)}| {product[PRICE_INDEX]} {' ' * (len_headers[2] - len_price)}| {product[QUANTITY_INDEX]} {' ' * (len_headers[3] - len_quantity)}|" |
| # TODO: при необходимости добавьте свои вспомогательные функции | ||
|
|
||
|
|
||
| def get_storage_str_representation(storage: list[Product]) -> str: |
There was a problem hiding this comment.
Функция нарушает принцип единой ответственности: в ней происходит и расчет ширины столбцов, и форматирование строк. Нарушение критерия S2. Минус балл
No description provided.