Задачи python от Google

Welcome to Google’s Python Class — this is a free class for people with a little bit of programming experience who want to learn Python. The class includes written materials, lecture videos, and lots of code exercises to practice Python coding. These materials are used within Google to introduce Python to people who have just a little programming experience. The first exercises work on basic Python concepts like strings and lists, building up to the later exercises which are full programs dealing with text files, processes, and http connections.

The class is geared for people who have a little bit of programming experience in some language, enough to know what a «variable» or «if statement» is. Beyond that, you do not need to be an expert programmer to use this material.

To get started, the Python sections are linked at the left — Python Set Up to get Python installed on your machine, Python Introduction for an introduction to the language, and then Python Strings starts the coding material, leading to the first exercise. The end of each written section includes a link to the code exercise for that section’s material. The lecture videos parallel the written materials, introducing Python, then strings, then first exercises, and so on. At Google, all this material makes up an intensive 2-day class, so the videos are organized as the day-1 and day-2 sections.

Задача из Собеседования на 160,000 Евро в Год

This material was created by Nick Parlante working in the engEDU group at Google. Special thanks for the help from my Google colleagues John Cox, Steve Glassman, Piotr Kaminski, and Antoine Picard. And finally thanks to Google and my director Maggie Johnson for the enlightened generosity to put these materials out on the internet for free under the Creative Commons Attribution 2.5 license — share and enjoy!

Tip: Check out the Python Google Code University Forum to ask and answer questions.

Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2023-01-17 UTC.

Источник: developers.google.com

На собеседование в Google через челлендж Python #1

Python

Как-то раз я искал в гугле что-то насчёт Python, как вдруг всплыло приглашение принять участие в испытании по программированию от Google (так называемое foo.bar challenge ). Я не фанат состязаний по написанию кода или симуляций собеседований на Leetcode по ряду причин. Однако любопытство взяло верх, и я решил попробовать. Далее я расскажу, как подготовиться и пройти первое испытание.

Задача из Собеседования в Google на Динамическое Программирование: Количество Уникальных Путей

Skillfactory.ru

⚠️ Спойлер/Предупреждение: если вы получите приглашение и решите принять участие, старайтесь решить задание самостоятельно, иначе вы утратите возможность попасть на собеседование. При этом учтите, что каждое испытание сложнее предыдущего. Лично я достиг только третьего уровня (из 5) прежде, чем истекло отведённое время.

Пришлось признать, что мне необходимо существенно повысить свои знания продвинутых возможностей Python и CS, чтобы пытаться решить последние задачи. Как бы то ни было, это интересный способ выяснить свои карьерные возможности и навыки с точки зрения Google. Эта изначальная сложность на самом деле относится только к введению и, вероятно, дальше всё будет иначе.

Настройка:

Вам предоставляется безусловно крутая IDE, работающая по принципу обычного терминала. Для вывода релевантных команд наберите help . Вы можете открыть редактор кода справа после запроса испытания и обращения к файлу решения solution.py …

ВНИМАНИЕ: вам не обязательно писать код своего решения в предложенном IDE. Я всё делал в Atom, а уже затем перекопировал туда. Имейте в виду, что ваша среда разработки должна отвечать требованиям, иначе у вас может не найтись подходящего решения. В данном случае требовался Python 2.7, я же использовал Python 3. Поэтому было решено создать новую среду на Python 2.7 и использовать её.

Это легко можно сделать с помощью Anaconda, как я и поступил. Вы же можете пойти иным путём.

Предыстория:

Всё испытание представлено в виде sci-fi истории, которая очень забавная. Ознакомиться с ней необходимо для понимания задачи по написанию кода. Вот первая (мы ещё к ней вернёмся вместе с переводом):

Дополнительно вам даётся 2 тестовых случая и соответствующие им решения:

# solution(‘abcabcabcabc’) # 4# solution(‘abccbaabccba’) # 2

Самый серьёзный подводный камень здесь в том, что есть и другие скрытые тестовые случаи, которые вы должны пройти, чтобы решить задачу. Что они из себя представляют выяснить или выдумать предстоит вам самим. Этот факт вкупе с запутывающим описанием задачи сильно усложняет испытание. Далее.

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

Последнее, но при этом решающее ограничение — это время. Вам даётся определённое время и устанавливается счётчик (в данном случае два дня). Если вы решите покинуть испытание и закрыть окно, то таймер продолжит отсчёт. Для восстановления доступа к испытанию и достигнутому прогрессу вам потребуется авторизоваться. Повторно найти страницу испытания вы сможете в гугле или через заранее сохранённую ссылку.

Задача

Давайте вернёмся к конкретной задаче, повторим (выделим жирным соответствующие части) и заново сформулируем её:

Честный торт.
===================== У командира Лямбды выдалась невероятно удачная неделя: она завершила первый тест своего устройства судного дня, захватила шесть ключевых участников Кроличьего восстания и побила свой личный рекорд в тетрисе. Чтобы это отпраздновать, она заказала торт на всех — даже для самых младших миньонов.

Однако среди миньонов царит лютая конкуренция, и если вы не сможете отрезать каждому одинаковый кусок торта, то возникнут серьёзные неприятности. Торт круглый и украшен MMs нет: они имеют разные цвета, и каждый миньон должен получить одинаковую последовательность MMs в строку: каждая возможная буква (между a и z) соответствует уникальному цвету, при этом MMs, и возвращает максимальное число равных частей, на которые торт может быть порезан без остатка.

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

Пока что может быть непонятно. Теперь давайте отделим каждую букву:

И в завершении отделим повторяющийся шаблон:

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

Skillfactory.ru

def solution(s): sub = s[0:len(set(s))] return(s.count(sub)) print(solution(‘abcabcabcabc’)) >> 4 print(solution(‘abccbaabccba’)) >> 2 Это работает для двух указанных примеров, т.к. set(s) получает повторяющиеся знаки abc, а затем находит их включения в обеих строках, но.

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

Разделяй и властвуй

Чтобы перейти далее, нам нужно сначала выяснить, имеет ли шаблон чётное или нечётное число знаков. Это может показаться нелогичным, но при этом будет простым способом обнаружения пограничных случаев. Рассмотрите этот:

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

def solution(s): if (len(s) % 2 != 0): print(‘Odd’) else: print(‘Even’)solution(‘abcabcN’) >> ODD solution(‘abcabc’) >> EVEN

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

def solution(s): print(‘INPUT:’ + s) i = (s+s).find(s,1, -1) sub = s[:i] print(‘Substring:’, sub) solution(‘abccbaabccba’) >> INPUT:abccbaabccba >> Substring: abccba solution(‘xyztxyztxyzt’) >> INPUT:xyztxyztxyzt >> Substring: xyzt // Единственное, что здесь странно — это индекс -1 в методе find(). Он будет использован для перехвата ситуации, в которой шаблон нечётный. Рассмотрите 2 следующих случая: def solution(s): print(‘INPUT:’ + s) i = (s+s).find(s,1, -1) sub = s[:i] print(«i:», i) print(‘Substring_1:’, sub) s2 = s s2 = s2[:-1] sub2 = s2[0:len(set(s2))] print(‘Substring_2:’ + sub2) solution(‘wewewe’) >> INPUT:wewewe >> i: 2 >> Substring_1: we >> Substring_2:we solution(‘weweweT’)>> INPUT:weweweT >> i: -1 >> Substring_1: wewewe >> Substring_2:we Подробности по методу find() вы можете узнать здесь https://www.programiz.com/python-programming/methods/string/find

Следующим, требующим рассмотрения пограничным случаем будет один знак, повторяющийся согласно шаблону, приведённому ниже:

Это делается простым сравнением длины шаблона после предыдущего шага:

if len(set(s)) == 1:

Компоновка сценария:

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

def solution(s): print(‘——-‘) print(‘INPUT:’ + s) i = (s+s).find(s, 1, -1) print (i)if (len(s) % 2 != 0): print(‘ODD’) if(len(set(s)) == 1): print(«CASE: ODD SINGLE CHARACTER») print(‘pattern:’ + (s[0])) print(‘Divisions:’ + str(len(s))) return else: s = s[:-1] if len(set(s)) == 1: print(‘pattern:’ + (s[0])) print(«CASE: ODD SINGLE CHARACTER EXTRA CHARACTER») print(‘Divisions:’ + str(len(s))) return elif i == -1: sub = s[0:len(set(s))] print(‘pattern:’ + sub) print(‘Divisions:’ + str(s.count(sub))) print(«CASE: MULTI CHARACTER EXTRA CHARACTER») return else: sub = s[:i] print(‘pattern:’ + sub) print(‘Divisions:’ + str(s.count(sub))) print(«CASE: ODD MULTI CHARACTER») return else: print(‘EVEN’) if len(set(s)) == 1: print(‘pattern:’ + (s[0])) print(‘Divisions:’ + str(len(s))) print(«CASE: EVEN SINGLE CHARACTER») return else: sub = s[:i] print(‘pattern:’ + sub) print(‘Divisions:’ + str(s.count(sub))) print(«CASE: EVEN MULTI CHARACTER») return

В нём присутствует 6 тестовых случаев:

solution(‘a’) solution(‘aa’) solution(‘abcabc’) solution(‘abcabcabc’) solution(‘aaT’) solution(‘ababT’)

И соответствующий вывод:

—— INPUT:a -1 ODD CASE: ODD SINGLE CHARACTER pattern:a Divisions:1 ——- INPUT:aa 1 EVEN pattern:a Divisions:2 CASE: EVEN SINGLE CHARACTER ——- INPUT:abcabc 3 EVEN pattern:abc Divisions:2 CASE: EVEN MULTI CHARACTER ——- INPUT:abcabcabc 3 ODD pattern:abc Divisions:2 CASE: ODD MULTI CHARACTER ——- INPUT:aaT -1 ODD pattern:a CASE: ODD SINGLE CHARACTER EXTRA CHARACTER Divisions:2 ——- INPUT:ababT -1 ODD pattern:ab Divisions:2 CASE: MULTI CHARACTER EXTRA CHARACTER

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

Покупатель несёт ответственность

Зоркие наблюдатели могли заметить ошибочный 4 случай abcabcabc , где мой сценарий утверждает, что максимальное число кусков 2, хотя ожидается 3. Я решил оставить эту ошибку, потому что обнаружил её только в процессе написания статьи (можете исправить её в качестве упражнения). Она также показывает, что вы можете пройти тесты, допустив ошибку, что ведёт к следующей проблеме…

Вы можете справиться с этой задачей несколькими способами. Я точно уже и не помню, какие из ответов со Stack Overflow использовал, но помню, что в какой-то момент вариантов было очень много. Это как раз и является ещё одной проблемой испытаний по программированию. Ваши познания в области (как языка, так и самой задачи) с течением времени увеличиваются, и ответы становятся лучше (если только не истекает время, как в моём случае). Это и многие другие испытания ставят на первое место быстрое создание кода для решения конкретных задач, к чему вы можете быть подготовлены или нет.

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

Более того, если бы я оказался перед терминалом без доступа к интернету, то наверняка бы провалился. Вероятно, потому что мои повседневные задачи не связаны со строками (на данный момент я работаю с разработкой нейронных сетей, Python GUI и Quant). В любом случае, это и интересное наблюдение, и ориентир для подготовки к таким задачам и их решению (не поддавайтесь стрессу — практикуйтесь):

“Я люблю дедлайны, а в особенности этот свистящий звук, который они издают, пролетая.” ~Дуглас Адамс

Я по-прежнему недолюбливаю испытания, даже если они обёрнуты в крутой IDE и дразнят потенциальным собеседованием в Google. Но независимо от моего мнения, они являются нормой, и я полностью понимаю, что большинство людей хотят побольше узнать о них и лучше к ним подготовиться.

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

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

Благодарю за чтение!

  • Вы умеете говорить на Python?
  • Магические методы в Python
  • Анализ аудиоданных с помощью глубокого обучения и Python (часть 1)

Источник: nuancesprog.ru

Помогите

Для новичка вполне нормально сталкиваться с сообщениями об ошибках и проблемами.

К счастью, у Python сильное сообщество, которое может вам сильно помочь.

Но если вы попытались, у вас может возникнуть иллюзия, что эти «мастера Python» недружелюбны, потому что вы уже давно задавали вопросы, но никто не дал вам никакого ответа.

На самом деле, это, вероятно, из-за неправильной постановки этих вопросов.

Представьте, что вы описали сообщение об ошибке, может быть десятки или даже сотни причин, которые могут привести к нему У кого может быть такое терпение, чтобы помочь вам изучить и исключить их одного за другим?

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

Это может быть связано с тем, что вашей информации по-прежнему недостаточно.

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

Эти возможности безграничны. Опять же, никто не хочет тратить время на изучение их один за другим.

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

Вы можете достичь этого,обментвой блокнот

Как показано выше, вы можете нажать на кнопку поделиться в верхнем правом углу.

В диалоговом окне необходимо обратить внимание при выборе разрешений. Мое предложение состоит в том, чтобы выбрать «Любой, кто имеет ссылку, можетПосмотреть».

Затем выберите «Копировать ссылку», и ссылка будет сохранена в вашем буфере обмена. Соедините ссылку и описание проблемы и разместите их на официальном форуме Python или на доске обсуждений курса.

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

Хотя вы оба можете использовать разные операционные системы и / или разные браузеры, ваши вычислительные среды Python полностью идентичны благодаря Google Colab.

Когда кто-то решил проблему, он или она может поделиться записными книжками по ссылке, и все готово.

Обратите внимание, что задание вопроса — это только один из способов получения помощи.

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

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

Нажмите кнопку, и Google Colab будет использовать поисковую систему Google, чтобы найти похожие проблемы и возможные ответы на Stackoverflow.com Веб-сайт.

В большинстве случаев вы найдете соответствующие ответы в первых нескольких ссылках.

В нашем примере вам повезло на этот раз, так как ответ объяснил, что проблема была связана с различием синтаксиса между Python 2 и 3.

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

сотрудничество

Вы когда-нибудь пытались писать коды вместе с другими?

В моем курсе некоторые задания являются групповыми заданиями. Студенты должны работать в группах, чтобы решить проблемы с Python.

Некоторые студенты пытались сотрудничать так:

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

Это, очевидно, совершенно неэффективно.

Есть ли лучшие методы там?

Конечно. Вы можете продолжать использовать функцию обмена, которую мы представили.

Однако на этот раз при выборе разрешения укажите другой стороне: «Любой, у кого есть ссылка, можетредактироватьРазрешение.

Мы по-прежнему используем проблему, когда print Команда идет без «круглых скобок». Но на этот раз, помимо просмотра ваших проблем, другие люди также могут редактировать ваши коды напрямую.

Ваш партнер может создать новый фрагмент кода и ввести правильное утверждение.

С вашей стороны изменения будут синхронизированы, и вы увидите это.

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

Например, комментарий, подобный следующему, может быть сделан.

Комментарий также будет мгновенно синхронизирован с вашей записной книжкой.

Таким образом, совместная работа команды может быть гораздо более эффективной.

Обязательно ограничьте права на «редактирование» соавторам, которым вы доверяете.

Если вы намерены показать свою работу широкой публике, вы можете использовать функции интеграции Github, предоставляемые Google Colab.

Вы можете сохранить копию в Github.

Затем выберите проект Github, который вы хотите сохранить.

После этого соответствующая страница Github будет открыта автоматически и готова для предварительного просмотра.

Предварительный просмотр может содержать все тексты, изображения, коды и выходные данные. Обратите внимание на верхнюю часть тетради, там есть ссылка «Открыть в Colab».

Нажмите на нее, и вы сможете открыть среду Google Colab и запустить копию блокнота в этом репозитории Github напрямую.

Версия

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

И Google Colab предоставил вам машину.

Нажмите на «История изменений» в меню, вы увидите все исторические версии, сохраненные в текущей записной книжке.

Время модификации, пользователи, которые внесли изменения, и размер
документ и т. д., все показано здесь. Если вы хотите вернуться к любой версии, просто нажмите кнопку «Восстановить».

Кроме того, вы также можете загрузить блокноты Google Colab прямо в .ipynb файл и сохранить копию локально.

Обязательно тщательно выберите путь хранения, иначе вы не сможете найти его позже.

Когда студентам необходимо отправить задания, я обычно прошу их предоставить как разделяемую ссылку Google Colab, так и .ipynb файл.

Зачем? Разве эти два не идентичны?

Я оставлю это вам думать как задание. Надеюсь, что вы можете получить правильный ответ мгновенно.

Вы можете открыть .ipynb файл путем запуска сервера Jupyter Notebook в командной строке. Тем не менее, было бы удобнее использовать классное приложение под названием nteract просматривать содержимое .ipynb файл напрямую.

Резюме

В этой статье я представил Google Colab, чтобы помочь начинающему Python более эффективно практиковать программирование на Python. Таким образом, он может справиться со следующими болевыми точками, с которыми вы можете столкнуться:

  1. Установка рабочей среды и пакетов;
  2. Обработка сообщений об ошибках и проблемах;
  3. Низкая эффективность в сотрудничестве ;
  4. Хаос Версий.

В этом случае вы можете потратить больше времени на практику и понимание Python, а не на конфигурации.

Я рекомендовал классический, но знаменитый учебник Изучите Python трудный путь ”Для моих учеников и читателей много раз.

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

Счастливого программирования на Python!

Связанные блоги

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

  • Углубленное изучение на Python, часть 0: настройка Fast.ai 1.0 в Google Cloud
  • Глубокое обучение с использованием Python и fast.ai: Часть 1. Классификация изображений с предварительно обученной моделью
  • Глубокое обучение с Python и fast.ai, Часть 2. Классификация НЛП с трансферным обучением
  • Как предсказать серьезные пробки с помощью Python и рекуррентных нейронных сетей?
  • Как ускорить ваше глубокое изучение Python с помощью облачного GPU?

Подтверждение

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

Источник: machinelearningmastery.ru

Рейтинг
Загрузка ...