А как вы думаете, насколько важно писать чистый код, если это занимает больше времени? я сам недавно выбирал курсы по IT, рассматривал разные компании, но остановился на Skypro. Лично мне помогли их наставники, и я смог найти первого заказчика))
кажется что в начале надо было просто строчку из букв сделать и все "абв.." и на ее основе уже делать словарь. Понадобились пробелы? Добавил пробелы. Понадобились цифры? добавил цифры и не надо потом весь код переписывать думая куда там пробелы влепить и почему они не ставятся.
А нельзя просто для каждой задачи сделать свой словарь? Для полученя списка номеров букв из слова dict1 (ключ: значение) = (буква: число), а для полученя слова из списка чисел dict2 (ключ: значение) = (число: буква). Просто искать ключ по значению не очень удобно, а в нашем случае и числа и буквы алфавита не повторяются и могут быть ключами. И тогда функции станут прямо очень простыми: def str_to_lst(str, dict1): return [dict1.get(key) for key in str] def lst_to_str(lst, dict2): return "".join([dict2.get(key) for key in lst])
Не кажется что вот такое оборванное тех задание только запутало кандидатов? Если бы подход к решению подобной задачи был построен итеративно, и четко разделялся между кандидатами, чтобы по завершению одной такски, следующий кандидат мог перейти к выполнению второй, имея у себя на руках хоть какие то данные (готовый словарь) и конкретную реализацию. А не представлять с чем им придется работать и не писать функцию наугад, с путаницей ключей/значений в этом же словаре?
# формируем словарь согласно первоначальной задачи, до того как барышня изменила задачу что бы сильно облегчить задачу chars = {number: chr(number) for number in range(1072, 1104)} # решение пробегаем по словарику, если находим ключ берем значение, а если нет то оставляем символ не тронутым def convert_string(any_string: str) -> str: return " ".join([str(ord(char)) if chars.get(ord(char)) else char for char in any_string]) if __name__ == '__main__': print(convert_string("привет? как дела?"))
Как по мне ее замечание к тз максимально адекватное и показывает глубокое понимание. Потому что сложность алгоритма сильно растет n^2, по сравнению с ее O(n) за 2n памяти. Умение предлагать свои поправки к тз, а не тупого выполнения показало ее с лучшей стороны
В изначальной формулировке задачи фигурировали 33 буквы. Вангую, у вас недостача букв и утечка алфавита. Идея с ord очень хрупкая изначально, не понимаю, почему она вам понравилась.
@@AndyPronin Думаю да. Причём сгенерировать список можно с помощью ord(), а потом просто добавить "ё" в нужное место def create_code(): chr_list = [chr(x) for x in range(1072, 1104)] chr_list.insert(6, 'ё') abc_dict = {key: value for key, value in enumerate(chr_list, 1)} return abc_dict
приветствую, а где посмотреть программу курса яндекс практикума? Там учат деплоить готовые проекты, работать с докером, фастапи или джанго может хоть основы взаимодействия бекенда и фронтенда, работа с базой. Или проще самому обучаться по книгам и сайтам?
Джанго посвящена существенная часть курса Python разработчика. Есть раздел про управление удаленным сервером с докером и т.п. FastAPI есть в расширенном варианте курса (дороже). Программы все есть на сайте Практикума. Но мой ответ со ссылкой ютуб тупо спрятал.
@@dmitriyb2438 привет 👋, набираешь Яндекс практикум и вуаля там все есть. По поводу докера и fast-api. Скажу так Яндекс даёт теорию, ставит задачу и сроки выполнения и дальше все сам. Какие то бэст практики не даёт. Из хорошего есть код ревью но по мне не всегда результат тот что ученик хотел бы увидеть. В моем случае я как раз хотел что бы мне показали как надо делать а не то что здесь плохо переделай. У Яндекса есть мидл python там как раз есть все что ты хочешь . только курс не для новичка, скорее для сильного джуна, который может работать самостоятельно и имеет азы проектирования средней сложности приложения.
RUSSIAN_ALPHABET: str = "".join(chr(code) for code in range(ord("а"), ord("я") + 1)) def encode(text: str) -> list[int | str]: """Encodes the text""" encoder: dict[str, int] = { letter: number for number, letter in enumerate(RUSSIAN_ALPHABET, 1) } encoded_text = [encoder.get(char, char) for char in text] return encoded_text def decode(encoded_text: list[int | str]) -> str: """Decodes the text""" decoder: dict[int, str] = { number: letter for number, letter in enumerate(RUSSIAN_ALPHABET, 1) } decoded_text = "".join(decoder.get(code, code) for code in encoded_text) return decoded_text
@@finemechanic у нас нет буквы ё, точнее она находится отдельно от алфавита. тут уж либо писать руками весь алфавит, либо жить с 32 буквами. но предусмотреть да, стоило
Для таких задач чем выдумывать велосипед, проще просто 33 клавиши в строку загнать руками за 10 секунд, и спокойно энумерейтом вернуть искомый словарь. Алфавит же русский масштабировать никто не планирует, н
столько пафоса, я работаю там и там и делаю то и то, а элементарные вопросы просто заганяют в ступор
Задания лучшие наверное как то писать в чат им, или что то в этом роде, потому как очень много переспрашивали. А так все молодцы 🎉
Да. Хорошая идея. Спасибо
А как вы думаете, насколько важно писать чистый код, если это занимает больше времени? я сам недавно выбирал курсы по IT, рассматривал разные компании, но остановился на Skypro. Лично мне помогли их наставники, и я смог найти первого заказчика))
Код читают чаще, чем пишут. Лучше писать чисто, что бы потом тебе или твоим коллегам не разбирать странное
Молодцы. Респект им, что помогают. Если захотят заглянуть на канал, буду рад пообщаться. Мой телеграм andpronin.
Привет Никите Помидору, Лёне Петрову и прочим обитателям эльфийского леса!
кажется что в начале надо было просто строчку из букв сделать и все "абв.." и на ее основе уже делать словарь. Понадобились пробелы? Добавил пробелы. Понадобились цифры? добавил цифры и не надо потом весь код переписывать думая куда там пробелы влепить и почему они не ставятся.
В принципе, решение) когда упёрлись в проблему, можно было рефакторниг предложить
А нельзя просто для каждой задачи сделать свой словарь? Для полученя списка номеров букв из слова dict1 (ключ: значение) = (буква: число), а для полученя слова из списка чисел dict2 (ключ: значение) = (число: буква). Просто искать ключ по значению не очень удобно, а в нашем случае и числа и буквы алфавита не повторяются и могут быть ключами. И тогда функции станут прямо очень простыми:
def str_to_lst(str, dict1):
return [dict1.get(key) for key in str]
def lst_to_str(lst, dict2):
return "".join([dict2.get(key) for key in lst])
Доброго времени суток
Не кажется что вот такое оборванное тех задание только запутало кандидатов?
Если бы подход к решению подобной задачи был построен итеративно, и четко разделялся между кандидатами, чтобы по завершению одной такски, следующий кандидат мог перейти к выполнению второй, имея у себя на руках хоть какие то данные (готовый словарь) и конкретную реализацию. А не представлять с чем им придется работать и не писать функцию наугад, с путаницей ключей/значений в этом же словаре?
Попробуйте вызвать функцию
# формируем словарь согласно первоначальной задачи, до того как барышня изменила задачу что бы сильно облегчить задачу
chars = {number: chr(number) for number in range(1072, 1104)}
# решение пробегаем по словарику, если находим ключ берем значение, а если нет то оставляем символ не тронутым
def convert_string(any_string: str) -> str:
return " ".join([str(ord(char)) if chars.get(ord(char)) else char for char in any_string])
if __name__ == '__main__':
print(convert_string("привет? как дела?"))
А если цифра в тексте? Как обратно декодировать?
Так же только в обратном порядке.
Как по мне ее замечание к тз максимально адекватное и показывает глубокое понимание. Потому что сложность алгоритма сильно растет n^2, по сравнению с ее O(n) за 2n памяти. Умение предлагать свои поправки к тз, а не тупого выполнения показало ее с лучшей стороны
Печалька😢
на рутуб дублировать контент не планируете?
Да. На вк видео и рутуб
когда новое видео ?)
В изначальной формулировке задачи фигурировали 33 буквы. Вангую, у вас недостача букв и утечка алфавита. Идея с ord очень хрупкая изначально, не понимаю, почему она вам понравилась.
А какая лучше? Список из букв?
@@AndyPronin Думаю да. Причём сгенерировать список можно с помощью ord(), а потом просто добавить "ё" в нужное место
def create_code():
chr_list = [chr(x) for x in range(1072, 1104)]
chr_list.insert(6, 'ё')
abc_dict = {key: value for key, value in enumerate(chr_list, 1)}
return abc_dict
@@Vjqifg Явное лучше неявного, магические числа - лучше просто из списка букв.
@@Vjqifg магические числа это очень не ок
@@Hope-h7x Чем они здесь могут навредить?
Пройдитесь по строке, у словарика есть гет
Напомните им про get
на каком моменте?
Зачем переводить все в список,можно пробегать по строке
Тут нет единствено верного варианта. Задача на собесе не задачку решить, а посмотреть, как человек думает
Пустая строка
приветствую, а где посмотреть программу курса яндекс практикума? Там учат деплоить готовые проекты, работать с докером, фастапи или джанго может хоть основы взаимодействия бекенда и фронтенда, работа с базой. Или проще самому обучаться по книгам и сайтам?
Джанго посвящена существенная часть курса Python разработчика. Есть раздел про управление удаленным сервером с докером и т.п. FastAPI есть в расширенном варианте курса (дороже).
Программы все есть на сайте Практикума. Но мой ответ со ссылкой ютуб тупо спрятал.
Ютуп не любит ссылки. Да. В целом поиском легко находится
@@dmitriyb2438 привет 👋, набираешь Яндекс практикум и вуаля там все есть. По поводу докера и fast-api. Скажу так Яндекс даёт теорию, ставит задачу и сроки выполнения и дальше все сам. Какие то бэст практики не даёт. Из хорошего есть код ревью но по мне не всегда результат тот что ученик хотел бы увидеть. В моем случае я как раз хотел что бы мне показали как надо делать а не то что здесь плохо переделай. У Яндекса есть мидл python там как раз есть все что ты хочешь . только курс не для новичка, скорее для сильного джуна, который может работать самостоятельно и имеет азы проектирования средней сложности приложения.
Скуфчик совсем обленился и собесит сразу двух
print({i-1071: chr(i) for i in range(1072, 1104)})
как то так
RUSSIAN_ALPHABET: str = "".join(chr(code) for code in range(ord("а"), ord("я") + 1))
def encode(text: str) -> list[int | str]:
"""Encodes the text"""
encoder: dict[str, int] = {
letter: number for number, letter in enumerate(RUSSIAN_ALPHABET, 1)
}
encoded_text = [encoder.get(char, char) for char in text]
return encoded_text
def decode(encoded_text: list[int | str]) -> str:
"""Decodes the text"""
decoder: dict[int, str] = {
number: letter for number, letter in enumerate(RUSSIAN_ALPHABET, 1)
}
decoded_text = "".join(decoder.get(code, code) for code in encoded_text)
return decoded_text
assert len(RUSSIAN_ALPHABET) == 33, "Утечка алфавита"
@@finemechanic у нас нет буквы ё, точнее она находится отдельно от алфавита. тут уж либо писать руками весь алфавит, либо жить с 32 буквами. но предусмотреть да, стоило
@@4got10_man2 Я и говорю, алфавит строится с ошибкой.
Для таких задач чем выдумывать велосипед, проще просто 33 клавиши в строку загнать руками за 10 секунд, и спокойно энумерейтом вернуть искомый словарь. Алфавит же русский масштабировать никто не планирует, н