Виктор обнови решението на 01.11.2022 21:58 (преди над 2 години)
Въпреки, че вероятно ползваш функцията само в nums_to_text е хубаво такива функции (особено долната, която е в пъти по-голяма) да се дефинират top-level.
Когато ще ги ползваш на много места ясно - нямаш избор. Но дори и в случая ще е по-четимо.
Знам, че е малко неефикасно да подавам 4ти параметър, когато не ми трябва, но смятам, че е по добре да имам една функция, от колкото да направя две почти идентични функции.
Винаги можеш да имаш следното:
def numbers_to_letter(nums, string, i, in_case, letter_one, letter_two, letter_three, letter_four=''):
По този начин можеш да викаш функцията както с 3, така и с 4 букви.
Това настрана обаче, такъв тип сигнатури обикновено говорят за лош дизайн. Многото вложени if-ове също.
Би следвало нещо от този сорт, да върши същата работа:
def numbers_to_letter(nums, string, i, in_case, *letters):
for next, letter in enumerate(letters):
if not next_digit(nums, i, next, in_case):
string += letter
i += next
Примерно... Не съм тествал, пиша го наизуст. Решава част от проблемите на функцията (не че не работи, просто е много Fortran-ска логика, Python има по-добри начини).
За точките и запетаи ще взимаме точки. :)
На практика нямаш ли nums += [button_digit] * button_letters.index(letter)
? Или греша?
(Говоря за целият if-elif-else)
Страшно кофти начин да кажеш if letter in ['A', 'B', 'C']
.
Бих се радвал да ми кажете, че има по-добър начин да го направя от тези 11 if-а, защото това изглежда ужасно.
Има, но трябва да мислиш в математически операции, а не булеви такива. :)
Адаш, има прекалено много if-ове, много логика като за C и най-страшното - табулации.
Не съм ти оставял бележки на всичко, което ми е направило впечатление, защото нерядко самият дизайн, който си избрал те обвързва с лошата практика, която бих коментирал.
Не ме разбирай грешно, покрил си изискванията много екстензивно и вероятно решението ти ще работи доста добре. Но ако не гледаме успешните тестове, а написаният код - твърдо не-питонски е. :)
Въпреки, че вероятно ползваш функцията само в nums_to_text е хубаво такива функции (особено долната, която е в пъти по-голяма) да се дефинират top-level.
Когато ще ги ползваш на много места ясно - нямаш избор. Но дори и в случая ще е по-четимо.
Знам, че е малко неефикасно да подавам 4ти параметър, когато не ми трябва, но смятам, че е по добре да имам една функция, от колкото да направя две почти идентични функции.
Винаги можеш да имаш следното:
def numbers_to_letter(nums, string, i, in_case, letter_one, letter_two, letter_three, letter_four=''):
По този начин можеш да викаш функцията както с 3, така и с 4 букви.
Това настрана обаче, такъв тип сигнатури обикновено говорят за лош дизайн. Многото вложени if-ове също.
Би следвало нещо от този сорт, да върши същата работа:
Примерно... Не съм тествал, пиша го наизуст. Решава част от проблемите на функцията (не че не работи, просто е много Fortran-ска логика, Python има по-добри начини).
За точките и запетаи ще взимаме точки. :)
На практика нямаш ли
nums += [button_digit] * button_letters.index(letter)
? Или греша?(Говоря за целият if-elif-else)
Страшно кофти начин да кажеш
if letter in ['A', 'B', 'C']
.Бих се радвал да ми кажете, че има по-добър начин да го направя от тези 11 if-а, защото това изглежда ужасно.
Има, но трябва да мислиш в математически операции, а не булеви такива. :)