Собеседование python разработчик Игорь Шкода. Ведет Олег Кожанов

Поділитися
Вставка
  • Опубліковано 20 лют 2023
  • t.me/UA-camPronin
    Чат для общения pyhton разработчиков и им сочуствующих. Свободное общение, тестовые и вопросы с собесов и прочее. Заходите, там вам рады.
    Поддержать канал: www.tinkoff.ru/rm/pronin.andr...
    Обычно денежка идёт на книжки про питончик. Но иногда на светлое и тёмное.
    Виш лист
    Хорошие книги по Питончику, которые могу рекомендовать (и хочу купить с вашей помощью).
    Знакомство с Python | Бейдер Дэн (2023) - выглядит приятно для новичка
    Чистый Python. Тонкости программирования для профи | Бейдер Дэн (2022) - хорошо для продолжения
    Высоконагруженные приложения. Программирование, масштабирование, поддержка | Клеппман Мартин
    Изучаем Python. Двухтомник. Марк Лутц. Очень подробно и структурно (Хочу дождаться 6го издания.. )
    • Изучаем Python с Марко...
    Читаем и разбираем ее тут
    Куплено (огромное спасибо зрителям)
    Python. К вершинам мастерства | Рамальо Лучано - 2е издание - сложно для новичка, но интересно
    Паттерны разработки на Python: TDD, DDD и событийно-ориентированная архитектура -- хорошо про то, когда какой фреймворк применять
    Видимо, дальше появтся еще нескромные желания. Но пока - так
    Моя тележка andpronin -- стучите, если что.
    Мой канал про обучению python с нуля и до мидла Андрей+=Пронин
    / @pypronin
    Я в других сетях
    🔗Вконтакте: CaptPronin
    🔗Дзен: zen.yandex.ru/id/5fbd33919412...
    #python #питон #программирование #Андрей_Пронин #собеседование #

КОМЕНТАРІ • 92

  • @KiriyaIP
    @KiriyaIP Рік тому +23

    Воспитание офисного планктона и корпоративных лжецов, с искусственными эмоциями. Очень познавательно. Спасибо.

  • @flabbergastedbylife
    @flabbergastedbylife 7 місяців тому +1

    спасибо, что выкладываете реальные интервью, очень полезно посмотреть как выглядит соискатель во время ответов на стандартные и теоретические вопросы и решает задачи. подписка и лайк. однозначно. (хочу к вам на интервью!)))

    • @user-zm2fm5mr9d
      @user-zm2fm5mr9d 6 місяців тому

      это не совсем реальное, а тестовое

  • @katyafervent
    @katyafervent 11 місяців тому

    Игорь, желаю успехов😊
    ты молодец💪

  • @alexk7665
    @alexk7665 5 місяців тому +1

    Здравствуйте.
    1. Удивляет что, что задание из Python "Курс для НАЧИНАЮЩИХ" на степике )
    2. Именно хотели что бы через ord делал задание? Кажется проще, но и "тОпорнее", конечно, через индекс
    3. А есть ли у вас волонтерство? Допустим, я начинающий изучающий и готов поучаствовать в чем-нибудь для вашей и своей пользы.
    Спасибо

  • @user-yj1on3bf1v
    @user-yj1on3bf1v Місяць тому +1

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

  • @ericbelecov3115
    @ericbelecov3115 Рік тому +4

    не помешало бы научиться делать правильный нейминги переменных

  • @Nonstop4ik
    @Nonstop4ik 7 місяців тому

    Здравствуйте. Было бы здорово, если бы в описании указывали тайм-коды с ключевыми вопросами. Небольшое пожелание. Спасибо за контент

    • @AndyPronin
      @AndyPronin  7 місяців тому +1

      Добрый день. Рад, что нравится. Прошу прощения, на это нет ресурса у меня. ( если получится помочь - буду благодарен

  • @oleg_kishinskii
    @oleg_kishinskii Рік тому

    Хочу сидеть, спокойно делать задачку и что бы подсказывали если что не получается, ага, я тоже о таком мечтал когда в Devops полез, потом стал искать куда залезть в Python что бы мне больше не приходилось доказывать что такой то и такой то подход верный, инструменты надежные и не натыкаться на случаи когда единственный ответ на StackOverFlow это твой вопрос.

  • @NikitaGriboedov
    @NikitaGriboedov Рік тому +5

    остановил видео на момент когда дали задание со сдвигом букв, вроде не тупой решал сотни различных задач. Но сразу
    решение через for не получилось, проходит полдня и в голове созрело решение через while. задача решена минут за 10. Вот как быть таким тугодумам как я на собеседованиях?

    • @NikitaGriboedov
      @NikitaGriboedov Рік тому

      from string import ascii_lowercase as alph
      def func(shift):
      lst = []
      count = len(alph)+1
      while count := count - 1:
      lst.append(alph[shift])
      shift = (shift + 1) % len(alph)
      return ''.join(lst)

    • @experto180
      @experto180 Рік тому

      Нужно больше практики и решение (или хотя бы подход к решению) будет всплывать намного быстрее.

    • @Andrew_Petrovich_Zykov
      @Andrew_Petrovich_Zykov 8 місяців тому

      хз, я в программировании недавно, но решил за 10 сек, без доп памяти

  • @Artem_Pie
    @Artem_Pie Рік тому +1

    Возьмите меня в след раз, я хоть завалю хард скиллы, но пообщаюсь

  • @user-ip4mx1up4k
    @user-ip4mx1up4k Рік тому +4

    Хороший выпуск
    По фидбеку все четко и грамотно
    Задачу специально такую слабую дали, зная потенциальный уровень студента или как?
    Сколько лет герою? Рассказывать про свой распорядок дня - жесть. Когда ты менять его собрался? Когда работу найдёшь?

    • @AndyPronin
      @AndyPronin  9 місяців тому

      Распорядок это вопрос с подвохом

  • @user-vt7nf4kc2k
    @user-vt7nf4kc2k 11 місяців тому

    Это фиаско

  • @AleksandrAru
    @AleksandrAru Рік тому

    Очень крутой ролик получился! Много нового для себя выяснил! Спасибо

  • @luckytima2315
    @luckytima2315 Рік тому +2

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

  • @Andrew_Petrovich_Zykov
    @Andrew_Petrovich_Zykov 8 місяців тому

    человек видимо только только начал изучать программирование, чтож удачи ему

  • @user-bv2ww2fg6w
    @user-bv2ww2fg6w Рік тому +1

    Разве выбор кандидата не должен быть сфокусирован на качествах кандидата? Ведь знания разработчика «всё обо всём» в рабочих задачах не определяют эффективность их выполнения. Важнее, наверно, смотреть на качество, оригинальность выполнения, работоспособность и вовлечённость кандидата, способности к обучению и применению новых знаний и т.д. В общем, современные методики отбора персонала вряд ли можно назвать совершенными.

  • @pretcb
    @pretcb Рік тому +2

    было скучно решил сделать через очередь + translate (только маленькие буквы English)
    from string import ascii_lowercase as ALPHA
    from collections import deque
    def alpha_rotate(s: str, offset: int = 3) -> str:
    # abcdefghijklmnopqrstuvwxyz & num=3 -> defghijklmnopqrstuvwxyzabc
    res = deque(ALPHA)
    res.rotate(-offset)
    translate = ''.join(res)
    table = s.maketrans(ALPHA, translate)
    return s.translate(table)

  • @idontknow_
    @idontknow_ Місяць тому

    Задача решается при помощи ord(i) и chr(ord(i)+3) с проверкой диапазона ascii символов конечно же.

    • @user-yj1on3bf1v
      @user-yj1on3bf1v Місяць тому

      батенька, чатгпт ругался на ваше решение, вы смещаете вправо :))

  • @shlyapa-konya
    @shlyapa-konya 5 місяців тому

    Какой же пассивный чел попался

  • @user-zb9yx7li6m
    @user-zb9yx7li6m 8 місяців тому +1

    Тоже учу пайтон как первый язык, теперь боюсь, что меня так же на первом собесе разорвут fullstack senior разрабы(

    • @clever_human
      @clever_human 6 місяців тому

      А кто тебе сказал, что в этой жизни будет легко?

    • @user-tg7lg8yl8g
      @user-tg7lg8yl8g 4 місяці тому

      а кто тебе сказал, что здесь разорвали?

  • @ioxvorm9613
    @ioxvorm9613 5 місяців тому

    Посмотрим как мой ревьюер будет отвечать))

  • @albrehtdurer557
    @albrehtdurer557 Рік тому

    скоро спокойно делать задачку будет ЧатЖПТ...так, что несколко поздновато....

  • @jewgenijmoldawski3306
    @jewgenijmoldawski3306 Рік тому

    34:40 ну разве можно так спрашивать? Ну скажет он: архитектор проекта может запретить. И будет прав. А имелось ввиду другое.

  • @NikitaGriboedov
    @NikitaGriboedov Рік тому +4

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

    • @user-ui4ss6fy5q
      @user-ui4ss6fy5q Рік тому

      Какой злой дядька, ругает всех собеседующих под каждым роликом. В начале же чётко говорят, что собеседование максимально приближено к настоящему, для этого и нужны тестовые собеседования, чтобы на них можно было потупить

    • @NikitaGriboedov
      @NikitaGriboedov Рік тому +1

      @@user-ui4ss6fy5q в видео дали понять что код работает, а по факту нет, достаточно просто было запустить его

    • @user-gb5op3sc4i
      @user-gb5op3sc4i Рік тому

      @@NikitaGriboedov раньше проверяли код же. Сейчас парню повезло прост

    • @memantulov
      @memantulov 8 місяців тому

      @@NikitaGriboedov зачем его запускать, если и так видно, что он не работает?

  • @bigbluepie8983
    @bigbluepie8983 Рік тому +8

    Обожаю эти моменты радости и улыбку на лице Ольги)) заряжает позитивом^_^

  • @user-uf1eq6ct3x
    @user-uf1eq6ct3x Рік тому

    Мне показалось слишком много воды от испытуемого, причём даже намёки давали, я бы сразу отказался работать, не в обиду, это фидбэк)

  • @BritScientist
    @BritScientist Рік тому +1

    def caesar(string: str, shift: int) -> str:
    letters = [chr(i) for i in range(97, 123)]
    res = ""
    for sym in string:
    res += letters[(letters.index(sym) + shift) % 26]
    return res

  • @AleksandrAru
    @AleksandrAru Рік тому +1

    Слушай Андрей а что бывает на закрытом фитбэке?😂

    • @AndyPronin
      @AndyPronin  Рік тому +1

      ) есть только один способ узнать

    • @AleksandrAru
      @AleksandrAru Рік тому +1

      @@AndyPronin спросить у Игоря? Думаю не прокатит😂

  • @genylivnev7822
    @genylivnev7822 Рік тому

    Так что ж можно наверн сделать
    st = string.ascii_lowercase
    def silver(text):
    num = 3
    a = [i for i in text]
    res = ''.join([a[i] for i in range(num, len(a))] + a[:num])
    return res
    print(silver(st))

    • @anton_1992
      @anton_1992 10 місяців тому +1

      в этом алгоритме немного другая суть

  • @zargerion7399
    @zargerion7399 Рік тому

    Где дискорд????

    • @AndyPronin
      @AndyPronin  Рік тому

      t.me/UA-camPronin у нас всё в тележке

  • @seoonlyRU
    @seoonlyRU Рік тому +2

    норм тема) лайк от СЕООНЛИ!

    • @Bibliophilos
      @Bibliophilos Рік тому +1

      Уважаемый СЕОнли, простите за любопытство, Вы любите шаверму?

    • @seoonlyRU
      @seoonlyRU Рік тому +1

      @@Bibliophilos обожаю

  • @SergMirny_yt
    @SergMirny_yt 9 місяців тому +1

    Непонятно зачем спрашивать вопросы, зная, что оффер не получишь))

    • @AndyPronin
      @AndyPronin  9 місяців тому +1

      Тренировка

    • @SergMirny_yt
      @SergMirny_yt 9 місяців тому +2

      @@AndyPronin честно, когда проходил интервью и понимал, что я откровенно слаб, единственное, что я просил - это пожалуйста дайте фидбек и укажите пожалуйста, в чем у меня пробел 🙂

  • @sergeiryzhov9043
    @sergeiryzhov9043 Місяць тому

    Ольга красивая)

  • @kubitre_motonos
    @kubitre_motonos 7 місяців тому +1

    ух. лютый собес, я бы не выдержал, и по быстрее б завершил собес. Очень тягомотный кандидат, как будто впервые код увидел. (и по зп как будто он тоже чет загнул, у него объективно навыки начинающего джуна, я бы больше 30-40к не предложил, и то, в него еще надо было б вкладываться дополнительно в его натаскивание). Слабо верится в то, что он кого-либо обучает

  • @7IdE
    @7IdE Рік тому +7

    Фидбек в этом видосе - вообще огонь. Причем от всех. 70% длительности видоса - это фидбек.
    Чуваку нужно чисто обрезать себе этот фидбек и использовать его в качестве гайда для дальнейшего саморазвития.
    А по собесу: использование i НЕ для индексации, переменная a, параметр stroka(с одной стороны - это было сделано, скорее всего, для того, чтобы не использовал зарезервированное слово str, с другой - можно было бы что-то еще придумать. К примеру - str_, это, насколько мне известно, хорошая практика), не проговаривал свои действия при написании, написал решение с асимптотикой в О(n ** 2) по времени, и при этом сказал, что там по времени О(n). Не ответил на вопрос "можно ли сделать решение за О(1) по памяти" - тут сразу чувствуется, что нет понимания того, как работают строки: и что такое конкатенация, и что они не изменямые и тд. Да и в целом нет "алгоритмической нарешанности".
    Еще я слегка пропустил условие задачи - если на входе всегда будет алфавит, а смещение фиксированное - то тут вообще через срезы проще решить.
    Если это, все же, шифр Цезаря - то я вообще не понял его решения.
    Думаю, что это задачка была каким-то частным случаем шифра Цезаря.
    Еще бросилось в уши, что на стандартный вопрос "маршрут запроса от клиента до джанги включительно" ушел вообще не в ту степь и отвечал о другом.
    Да и он как-то "без огонька в глазах" на все софтовые вопросы отвечал.
    Ну а плюсов не будет - и так в фидбеке много плюсов насыпали. Я токсик-душнила, мне нельзя о плюсах говорить. :D

    • @user-li7qf4me7s
      @user-li7qf4me7s Рік тому

      Вот вопрос, а почему там по времени n ** 2, если там один раз проходится по циклу?

    • @7IdE
      @7IdE Рік тому

      @@user-li7qf4me7s, конкатенация.

    • @harrior1
      @harrior1 Рік тому

      @@user-re2mu8hj4v скорее просто слабый английский

  • @user-zb4qi5fz4o
    @user-zb4qi5fz4o Рік тому

    Насколько неправильно будет сделать вот так?
    a = 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'
    b = 'Hello, world!'
    s = ''
    for i in b:
    if i.lower() in a:
    s+=a[a.index(i.lower())+3]
    else:
    s+=i

    • @furiousrunner4388
      @furiousrunner4388 Рік тому

      лишние переменные и неоптимизировано

    • @user-zb4qi5fz4o
      @user-zb4qi5fz4o Рік тому

      @@furiousrunner4388 где лишние? тут всего одна переменная s

    • @furiousrunner4388
      @furiousrunner4388 Рік тому

      @@user-zb4qi5fz4o велком ту зе основы Пайтон, глава 1: переменные)))
      пссс...*попробуйте посчитать ещё раз*

    • @user-zb4qi5fz4o
      @user-zb4qi5fz4o Рік тому

      @@furiousrunner4388 давайье источник тогда, где читать первую главу. а еще можете ответить по делу, и сказать какие переменные считаете лишними ВЫ, и почему он неоптимизирован. Могли бы сказать, что .index ресурсозатратный метод. а переменная лишняя какая? Их всего тут 3, в отличии от двух. где 1 - то, что нужно зашифровать, и 2-я, результат шифровки.

    • @codingjerk
      @codingjerk Рік тому

      @@user-zb4qi5fz4o помимо алфавита, входа, выхода и результата ещё есть i, но я тут "лишних" переменных не вижу.
      Насчёт правильности: используется `in`, который по всему алфавиту будет пробегать и это не очень хорошо, но допустимо и a.index, который делает тоже самое. Также из-за `lower` алгоритм заменяет большие буквы на маленькие, что меня бы как интервьювера не устроило.
      В остальном решение рабочее, с "правильной" ассимптотикой, но не оформлено в функцию и offset захардкожен. Также нужно не забывать, что оно даёт ограничение на offset: нельзя сделать его отрицательным, нельзя сделать его больше размера алфавита.
      Если бы собеседуемый написал такой код во время лайв-кодинг сессии, я бы это скорее зачёт, чем нет.

  • @jen24499
    @jen24499 Рік тому +1

    import string
    def caesar(string_, offset_number):
    alp = string.ascii_lowercase
    offset_letters, remainder = alp[offset_number:], alp[:offset_number]
    shifted_alp = offset_letters + remainder
    all_cases = shifted_alp + shifted_alp.upper()
    pattern = str.maketrans(alp + alp.upper(), all_cases)
    res = string_.translate(pattern)
    return res

    • @FyftyTony
      @FyftyTony Рік тому

      def word_rotated(some_word: str, index: int) -> str:
      return some_word[index:] + some_word[:index]

    • @user-bv2ww2fg6w
      @user-bv2ww2fg6w Рік тому

      @@FyftyTony Я приблизительно так и думал срезами, они куда-то в дебри забрались

  • @babyizanyat
    @babyizanyat 4 місяці тому +1

    Решение:
    def foo(str):
    return "".join([chr((ord(str[i]) - ord('a') + 3) % 26 + ord('a')) for i in range(len(str))])

  • @lifenow6078
    @lifenow6078 4 місяці тому

    вот до чего на коленках додумался) все работает, но любому можно это дело оптимизировать и вылизать. не учитывает регистр при выводе(заглавные буквы будут прописными)
    example = "hello worldxyz"
    example= example.lower()
    ending= "xyz"
    a =[]
    for i in example:
    if i !=" ":
    if i in "xyz":
    a.append(chr(ord(i)-23))
    else:
    a.append(chr(ord(i)+3))
    else:
    a.append(i)


    print("".join(a))

  • @TheMonigoral
    @TheMonigoral Рік тому

    Мне так в голову пришло. Не являюсь разработчиком. Сисадмин...
    origin = "abcdefghijklmnopqrstuvwxyz"
    l_origin = len(origin)
    def translate(s: str, offset: int) -> str:
    factor = int(abs(offset) / l_origin)
    if factor > 0 and offset > l_origin:
    offset = offset - l_origin * factor
    elif factor > 0 > offset:
    offset = offset + l_origin * factor
    converter = dict(map(lambda x, y: (x, y), origin, (origin[offset:] + origin[:offset])))
    return ''.join((converter[a] for a in s))
    if __name__ == "__main__":
    print(translate("asd", -1))
    print(translate("asd", 40))
    print(translate("asd", 5))

  • @MrBeltalowda
    @MrBeltalowda Рік тому +2

    from string import ascii_lowercase as lower
    from string import ascii_uppercase as upper
    def rotate_by_offset(input: str, offset: int) -> str:
    enc_table = {c: lower[(i+offset) % 26] for i, c in enumerate(lower)} | {c: upper[(i+offset) % 26] for i, c in enumerate(upper)}
    return "".join([enc_table[c] if c in enc_table else c for c in input])

    • @7IdE
      @7IdE Рік тому

      В string есть ascii_letters - там все буквы.
      Это решение за О(n) по времени и О(n) по памяти из-за словаря. Если без него все делать - можно за О(1) по памяти сделать.
      И, блин, for i, c ... Назови ты их index, element - путаницы не будет.

    • @MrBeltalowda
      @MrBeltalowda Рік тому

      @@7IdE в словаре всегда будет 54 символа, причем здесь он?

    • @7IdE
      @7IdE Рік тому

      52.
      Потому с точки зрения асимптотики - это линейная сложность, а не константная.

    • @MrBeltalowda
      @MrBeltalowda Рік тому

      @@7IdE да, 52. но словарь на сложность алгоритма никак не влияет, сложность O(n) по памяти неизбежна, если мы хотим собирать ответ в памяти. O(1) можно сделать только если yieldить ответ посимвольно.

    • @7IdE
      @7IdE Рік тому +1

      ​@@MrBeltalowda, во1, это не ты ли в чате писал, что на видосе временная сложность О(n) и не согласился со мной, что там О(n ** 2)? Если ты, то рекомендую прям по пунктам переосмыслить тему "асимптотика и с чем ее едят".
      Во2, если у тебя есть массив из 1000 элементов и тебе нужно найти последний элемент. И искать ты его будешь линейным перебором - от первого к последнему - у тебя будет сложность О(n) или О(1000) == О(1)? А если 10_000 - О(n) или О(10_000) == О(1)?
      И там, и там у тебя будет сложность О(n). Несмотря на то, что выполняться этот алгоритм будет за фиксированное время равное обходу 1000 или 10_000 элементов.
      Константная сложность О(1) говорит о том, что алгоритм не зависит от размерности массива. Или, другими словами, если массив изменит свою размерность - то время выполнения алгоритма не изменится.
      Если Байден завтра добавит еще 1 букву в алфавит - это повлияет на твой алгоритм?
      Если ответ "нет", то это О(1). Если "да", то это О(n).
      Конкретно в данном случае, в целом, можно сказать, что длина алфавита - это константа, да. Но я бы не сказал, что это будет прям-таки корректная оценка.
      Касательно о неизбежности О(n) по памяти - я, кстати, сам не так давно был на твоей стороне, но я "прозрел". Ну или если быть точнее - меня прозрели.
      Оценка асимптотики по памяти - это использование ДОПОЛНИТЕЛЬНОЙ памяти. Не в целом памяти - а именно дополнительной, которая нужна будет, чтобы сформировать ответ и на этом все.
      И если так, то: то, что выводится - это не включено в "дополнительную память".
      Ну или если более аккуратно подойти, то: словарь - О(n) + вывод О(n) = O(2 * n). Константа тут равна 2, а можно сделать за 1, т.е. за чистые О(n).
      Нормас я так расписал. :D

  • @furiousrunner4388
    @furiousrunner4388 Рік тому +2

    from string import ascii_lowercase, ascii_uppercase
    def cezar(string, pos):
    min_lower_alphabet = 97
    min_upper_alphabet = 65
    n = 26
    return ''.join([chr((ord(i) - min_lower_alphabet + pos) % n + min_lower_alphabet) if i in ascii_lowercase else
    chr((ord(i) - min_upper_alphabet + pos) % n + min_upper_alphabet) if i in ascii_uppercase else
    i for i in string])
    try:
    enter = int(input())
    print(cezar('lowercase cezar', enter))
    except ValueError:
    print('Uncorrected Type of POSITION')
    На решение задачи без оптимизации: 2 минуты, знание таблицы аски, мощность алфавита и знание генератора списка, с оптимизацией досконально до уровня аля для дураков - 5 минут + знания обработки исключений, задача изи))))

  • @endresk9403
    @endresk9403 8 місяців тому

    Что то никто не предложил такой вариант решения:
    def func_str(stR, value):
    return "".join(list("".join(stR[0]))[value:] + list("".join(stR[0]))[:value])
    if __name__ == '__main__':
    print(func_str(["abcdefghijklmnopqrstuvwxyz"], 3))

    • @WDemidenko
      @WDemidenko 6 місяців тому

      А разве не нужно было переводить строку в новый смещенный алфавит, а ты вместо строки типо "Hello world!" передал алфавит. Там нужно юзать дефолтный алфавит внутри функции, искать индекс для каждой буквы в строке, и потом собирать новую строку из смещенного алфавита используя полученный индекс из оригинального алфавита.

  • @s_e_r_g_i_k
    @s_e_r_g_i_k 9 місяців тому

    Не смотрел, но осуждаю))
    ALPHABET = 'abcdefghijklmnopqrstuvwxyz'
    def coding(text_line: str, shift: int = 3) -> str:
    code = {a: b for a, b in zip(ALPHABET, ALPHABET[shift:] + ALPHABET[:shift])}
    return ''.join(code.get(ch.lower(), '?') for ch in text_line)
    Ну или однострочником типа:
    def coding(text_line: str, shift: int = 3) -> str:
    return ''.join(chr((ord(ch.lower()) + shift - ord('a')) % (ord('z') - ord('a')) + ord('a')) for ch in text_line)
    Мимо сантехник

  • @killping231
    @killping231 11 місяців тому

    word = 'abcdefgh'
    n = 3
    ''.join((chr((ord(i)-19+n)%26+97) if i.islower() else chr((ord(i)-13+n)%26+65) for i in word))

  • @samoylov1973
    @samoylov1973 Рік тому +1

    text = 'Hello, World!'
    a = 'abcdefghijklmnopqrstuvwxyz'
    b = a[3:]+a[:3]
    t = str.maketrans(a + a.upper(), b + b.upper())
    t = text.translate(t)
    print(f'Hello, World!
    {t}') # вишенка на торте))

  • @articooper3906
    @articooper3906 Рік тому

    def str_offset(string: str, num: int):
    alphabet = 'abcdefghijklmnopqrstuvwxyz'
    result = ''
    if not isinstance(string, str):
    return 0
    for i in string:
    little_letter = i.lower()
    if little_letter in alphabet:
    letter_index = alphabet.index(little_letter)
    letter_needed_index = letter_index + num % 26
    if letter_needed_index >= 26:
    letter_needed_index = letter_needed_index % 26
    if i == little_letter:
    result += alphabet[letter_needed_index]
    else:
    result += alphabet[letter_needed_index].upper()
    else:
    result += i
    return result
    def test():
    assert str_offset('Hello, World!', 3) == 'Khoor, Zruog!'
    assert str_offset('abc', 3) == 'def'
    assert str_offset('xyz', 3) == 'abc'
    assert str_offset(1234, 3) == 0
    assert str_offset('xyz', 26+26+3) == 'abc'
    print("RUN - OK")
    test()

  • @stepansamankov7129
    @stepansamankov7129 Рік тому +4

    максимально не понравился испытуемый