Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 24, 2022 11:58:05

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Функция, которая возвращает True, если две строки рифмуются

ntram
вдруг че то просто упустил
конечно упустил, кэмэл-кейс в питоне используют только для совместимости с портируемыми из других языков библиотеками



Офлайн

#2 Июнь 24, 2022 13:08:49

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9727
Репутация: +  843  -
Профиль   Отправить e-mail  

Функция, которая возвращает True, если две строки рифмуются

ntram
The vowels in English are a, e, i, o, u, and sometimes y.
Делай её гласной. В слове happy, например, ты её упустишь, а она там есть.
I ate the poppy, but was not happy. - рифмуется? рифмуется. А твой код покажет, что не рифмуется. И таких примеров можно придумать ещё сколько? Ещё несколько тысяч? Очень чудненько, твой код таким образом потеряет несколько тысяч хороших фраз.

ntram
Этот отрывок кода вам ни о чем не говорит?
Слушай, он слишком далеко стоит и не относится к этому куску, который я привёл. Я думаю, что ты там уменьшение регистра использовал неправильно с точки зрения стиля, слишком рано. То есть представим, например, что там на вход подали одни цифры, ты их будешь уменьшать в регистре? Сначала ведь лучше проверить, содержит ли строка предложение из букв и пунктуации. А если там пустые строки пришли, ты их тоже будешь уменьшать в регистре?

В общем, вопрос регистра возникает на этапе выбора подходящих элементов. Значит, и уменьшение регистра в коде должно стоять максимально близко к коду выбора. Тогда не возникает вопроса, а что именно и как он выбирает, потому что при чтении этой строки это всё видно, оно сразу читается. А в твоём варианте надо сначала перелопатить весь код функции, чтобы убедиться сначала, что там нет никакой ошибки. Чтобы убедиться, что в конце функции нет ошибки, нужно идти в начало функции и читать начало функции. То есть тебе для каждой строки функции нужно вообще всю функцию держать в голове, чтобы что-нибудь не упустить.

Ещё оптимизацию берём. Ты делаешь уменьшение регистра для всей строки, и делаешь это для обеих строк. Если строка весит мегабайт, то ты будешь весь мегабайт переводить в нижний регистр. И потом вторую строку на мегабайт тоже будешь переводить в нижний регистр. А зачем? Надо, наборот, сначала из каждой строки взять последнее слово, а потом только эти слова на пять или десять символов перевести в нижний регистр. Оптимальнее это? Ну да.

Главное не это всё-таки. Главное, что ты конец функции привязал к её началу, а нужно, наоборот, отделять их друг от друга при первой возможности. Просто когда этих функций будет не одна и не десять, а сто пятьдесят, тогда тебя очень обрадует чтение всех этих функций от начала до конца каждый раз, чтобы понять, что там ошибок каких-то банальных нет. Так что изолируй участки кода, делай их независимыми. Даже если это внутри функции участки кода, их всё равно надо делать независимыми друг от друга. Тогда ты легко сможешь эти участки кода выносить в отдельные функции. Проводить рефакторинг сможешь тогда без каких-либо проблем.



Отредактировано py.user.next (Июнь 24, 2022 13:11:34)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version