Repository navigation
3. Раджабов Руслан Ильгамович. 614 - #109
Hidden character warning
somet1me123 wants to merge 14 commits into
Conversation
|
|
||
| for item in storage: | ||
| if new_name == item[NAME_INDEX]: | ||
| print(f"product name '{new_name}' is already taken") |
There was a problem hiding this comment.
Можно кавычки к строковым литералам добавлять за счет форматирования f-строк:
| print(f"product name '{new_name}' is already taken") | |
| print(f"product name {new_name!r} is already taken") |
| print("product name must not be blank") | ||
| return None | ||
|
|
||
| f = False |
There was a problem hiding this comment.
Нарушение критерия M2. Минус 0.5 балла
| return None | ||
|
|
||
| f = False | ||
| for i in range(len(storage)): |
There was a problem hiding this comment.
Нарушение критерия T5. Минус 0,25 балла
| if product_id == storage[i][PRODUCT_ID_INDEX]: | ||
| f = True | ||
| break | ||
| if f == False: |
There was a problem hiding this comment.
Нарушение критерия T2. Минус 0.25 балла
| if product_id == storage[i][PRODUCT_ID_INDEX]: | ||
| f = True | ||
| break | ||
| if f == False: |
There was a problem hiding this comment.
Это сравнение вообще не нужно. Вы могли в предыдущем цикле при выполнении условия if product_id == storage[i][PRODUCT_ID_INDEX]: напечатать нужное сообщение и выйти из функции с помощью return. return немедленно прерывает выполнение тела функции.
Или вы так маскируете факт списывания? :)
| # TODO: реализуйте функцию | ||
| return "" | ||
| mx_len_id = len(TABLE_HEADERS[0]) + 2 | ||
| mx_len_name = len(TABLE_HEADERS[1]) + 2 |
There was a problem hiding this comment.
Нарушение критерия S3. Минус балл
| mx_len_price = len(TABLE_HEADERS[2]) + 2 | ||
| mx_len_quantity = len(TABLE_HEADERS[3]) + 2 | ||
| for item in storage: | ||
| mx_len_id = max(mx_len_id, len(str(item[PRODUCT_ID_INDEX])) + 2) |
There was a problem hiding this comment.
Очень много дублирующейся логики. Нарушение критерия S1. Минус балл
| mx_len_quantity = max(mx_len_quantity, len(str(item[QUANTITY_INDEX])) + 2) | ||
|
|
||
| s = ( | ||
| f"| {TABLE_HEADERS[0]}{' ' * (mx_len_id - 3)}| {TABLE_HEADERS[1]}{' ' * (mx_len_name - 5)}| {TABLE_HEADERS[2]}{' ' * (mx_len_price - 6)}| {TABLE_HEADERS[3]}{' ' * (mx_len_quantity - 9)}|\n" |
There was a problem hiding this comment.
ruff не ругается, потому что с его точки зрения форматирование f-строк разбивать нельзя. Но честно говоря, так делать никогда не надо. Очень длинная строка - плохо. Вы заставляете читающего отвлекаться от основной части кода, сосредоточенной по правому краю экрана. А еще длинные строки не дают выводить на экран более одного листинга кода одновременно, т.к. длинные строки не умещаются на половине экрана, и постоянно приходится скролить.
В общем, пока что предупреждение, в будущем я за такое буду снижать. Разбивайте длинные строки на несколько физических строк.
| mx_len_quantity = max(mx_len_quantity, len(str(item[QUANTITY_INDEX])) + 2) | ||
|
|
||
| s = ( | ||
| f"| {TABLE_HEADERS[0]}{' ' * (mx_len_id - 3)}| {TABLE_HEADERS[1]}{' ' * (mx_len_name - 5)}| {TABLE_HEADERS[2]}{' ' * (mx_len_price - 6)}| {TABLE_HEADERS[3]}{' ' * (mx_len_quantity - 9)}|\n" |
There was a problem hiding this comment.
А еще здесь форматирование пробелов и длины полей следовало бы реализовать через синтаксис форматирования f-строк
| return new_name | ||
|
|
||
|
|
||
| def get_storage_str_representation(storage: list[Product]) -> str: |
There was a problem hiding this comment.
Нарушение критерия S2. Функция нарушает принцип единой ответственности, выполняя и вычисление максимальной длины полей, и форматирование строки. Минус балл
No description provided.