Задания для языка python. Язык программирования Python — с чего начинать? Официальная PyGame документация

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

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

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

Целевая аудитория сайта – начинающие web-разработчики. Именно им предназначено солидное количество задач по HTML, PHP, Python, JavaScript, на решение которых можно потратить не один день и даже неделю. Ни регистрации, ни дополнительного инструментария портал не требует: удобство пользования обеспечивает встроенный редактор, а также ссылки на правильные ответы, если решение задачи все же поставило вас в тупик.

Coding Bat

Схожей стратегии придерживается и Coding Bat. Создатели ресурса также предпочли узкую направленность, сконцентрировавшись на упражнениях по Java и Python. Малое разнообразие упражнений с лихвой компенсирует количество и качество задач, а также удобство пользования. Разумеется, опять же, встроенный редактор и ответы. Кроме того, портал подойдет как для начинающих, так и опытных разработчиков.

Code Abbey

Успех любого обучения кроется в правильной мотивации, которая, без сомнения, присутствует в Code Abbey. Так, любой пользователь, решивший 125 задач, может получить соответствующий сертификат. Разумеется, бесплатно. Еще один плюс ресурса – возможность выполнения заданий на практически любом распространенном языке (от C до Julia).

Top Coder

Впрочем, даже такая мотивация не столь действенна, как денежное вознаграждение. Так на Top Coder вы сможете не только повысить свой уровень, но и подзаработать: по факту ресурс представляет из себя список соревнований, победитель которых получит пусть и не поражающую воображение, но приятную награду. Наиболее же успешные участники вдобавок имеют шансы "засветиться". Мастодонты индустрии вроде Microsoft, Facebook или IBM периодически мониторят портал в поисках новых талантов.

Programmr

На данном портале в свое время также можно было участвовать в соревнованиях. Однако к текущему моменту все они потеряли актуальность. Тем не менее, ресурс по-прежнему являет собой богатую площадку для развития навыков. В первую очередь – за счет многочисленных задач по Java, C++, PHP, C#, Ruby, Python и Objective-C. В каждой из них нужно дописать большую часть кода. Как правило, на выполнение задания отводится 30 минут.

Programming Skills

Тем же, кто устал от написания кодов и хочет привнести большего разнообразия в учебный процесс, подойдет портал Programming Skills. На нем можно найти серии тестов из 20 вопросов по C, HTML, C#, Java и другим языкам. На выполнение каждого дается 25 минут. Помимо них, на ресурсе содержится богатый перечень вопросов, с которыми вам, возможно, доведется столкнуться на собеседовании.

SQL-EX.RU

Наконец, для изучающих SQL идеально подойдет данный портал. Он предлагает огромное количество задач, охватывающих все типажи запросов. Для мотивации же пользователей введена рейтинговая система всех зарегистрировавшихся посетителей – за каждый верный ответ вы получите определенное число очков. Количество оных зависит от сложности задачи, в чем, к слову, кроется и еще один плюс ресурса. Ведь он подойдет как начинающим (или тем, кому достаточно базовых знаний), так и тем, чья служба невозможна без конструирования сложных запросов.

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

Тем, кто только начинает свой путь в кодинге, рекомендуем бесплатный курс по .

Каждому изучающему Python нужно писать код для закрепления. Вашему вниманию предлагаются несколько задач для реализации (не слишком простых (кроме первой) и не слишком сложных).

Также для этих задач есть репозиторий с тестами и моими решениями (чтобы проверить себя).

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

А теперь, собственно, задачи:

Простейшие арифметические операции (1)

Написать функцию arithmetic , принимающую 3 аргумента: первые 2 - числа, третий - операция, которая должна быть произведена над ними. Если третий аргумент + , сложить их; если - , то вычесть; * - умножить; / - разделить (первое на второе). В остальных случаях вернуть строку " Неизвестная операция ".

Високосный год (2)

Написать функцию is_year_leap , принимающую 1 аргумент - год, и возвращающую True, если год високосный, и False иначе.

Квадрат (3)

Написать функцию square , принимающую 1 аргумент - сторону квадрата, и возвращающую 3 значения (с помощью ): периметр квадрата, площадь квадрата и диагональ квадрата.

Времена года (4)

Написать функцию season , принимающую 1 аргумент - номер месяца (от 1 до 12), и возвращающую время года, которому этот месяц принадлежит (зима, весна, лето или осень).

Банковский вклад (5)

Пользователь делает вклад в размере a рублей сроком на years лет под 10% годовых (каждый год размер его вклада увеличивается на 10%. Эти деньги прибавляются к сумме вклада, и на них в следующем году тоже будут проценты).

Написать функцию bank , принимающая аргументы a и years , и возвращающую сумму, которая будет на счету пользователя.

Простые числа (6)

Написать функцию is_prime , принимающую 1 аргумент - число от 0 до 1000, и возвращающую True, если оно простое, и False - иначе.

Правильная дата (7)

Написать функцию date , принимающую 3 аргумента - день, месяц и год. Вернуть True, если такая дата есть в нашем календаре, и False иначе.

XOR-шифрование (8)

Написать функцию XOR_cipher , принимающая 2 аргумента: строку, которую нужно зашифровать, и ключ шифрования, которая возвращает строку, зашифрованную путем применения функции XOR (^) над символами строки с ключом. Написать также функцию XOR_uncipher , которая по зашифрованной строке и ключу восстанавливает исходную строку.

  • Цель 1 - помочь ссылками, материалами, тем, кто соберется изучать программирование и первым языком возьмет Python. Показать, что это не так сложно, как кажется.
  • Цель 2 - собрать в комментариях ссылки на полезные и интересные материалы по этой теме.

0. А получится ли у меня?

С самого начала я сомневался в том, что у меня получится сделать что-то большее чем Hello World. Мне казалось, что программирование это сверх сложно и сверх магия. К тому же есть работа, хобби, семья, что будет отвлекаться от полноценного изучения.

Зря боялся и вам не советую. Программирование наверное никогда не станет моей основной профессией, но это отличный способ творческой реализации. Это шахматы и Civilization в одном флаконе.

Все проще чем кажется и гораздо интереснее.

1. Литература

Марк Лутц “Программирование на Python” - его советуют читать на многих форумах и курсах. Мне он показался излишне подробным и нагруженным для новичка. Читать много, программировать мало. Гораздо полезнее его читать после овладевания Python минимума.

Марк Саммерфилд “Программирование на Python 3” - динамично, с отличными примерами и заданиями. Без излишнего углубления, которое только все усложняет в начале. Я рекомендую начать именно с этой книги, она поможет быстро вникнуть, не пугая сложностями.

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

2. Что читать в интернете

http://pythonworld.ru/ - простым и понятным языком рассказывается об азах языка, часто использовал, как шпаргалку.

Еще через два месяца я смог создать свое первое приложение на Django. Но главное, что теперь у меня достаточно знания для самостоятельного развития и обучения. Самое трудное - это добраться до этой точки.

Еще через месяц я подключился к двум проектам на GitHub и принимаю в них участие. Задачи решаю конечно пока простые, но взамен получаю советы и обучение.

Теги: обучение python, обучение программированию

Меня периодически спрашивают о тестовых заданиях по Python-тематике. Я решил обобщить вопросы и написать их в одном месте. Я не использую эти вопросы и задания в собеседованиях, но использую при обучении.

Типы данных, основные конструкции

  1. Как получить список всех атрибутов объекта
  2. Как получить список всех публичных атрибутов объекта
  3. Как получить список методов объекта
  4. В какой "магической" переменной хранится содержимое help?
  5. Есть два кортежа, получить третий как конкатенацию первых двух
  6. Есть два кортежа, получить третий как объединение уникальных элементов первых двух кортежей
  7. Почему если в цикле меняется список, то используется for x in lst[:] , что означает [:] ?
  8. Есть два списка одинаковой длины, в одном ключи, в другом значения. Составить словарь.
  9. Есть два списка разной длины, в одном ключи, в другом значения. Составить словарь. Для ключей, для которых нет значений использовать None в качестве значения. Значения, для которых нет ключей игнорировать.
  10. Есть словарь. Инвертировать его. Т.е. пары ключ: значение поменять местами — значение: ключ.
  11. Есть строка в юникоде, получить 8-битную строку в кодировке utf-8 и cp1251
  12. Есть строка в кодировке cp1251, получить юникодную строку

Функции

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

    >>> f(1, 2, 3) 6 >>> f() 6 >>> f((3, 5, 6)) 14 >>> f(3, (5, 6)) 14

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

    >>> add5 = addition(5) # функция addition возвращает функцию сложения с 5 >>> add5(3) # вернет 3 + 5 = 8 8 >>> add5(8) # вернет 8 + 5 = 13 13 >>> add8 = addition(8) >>> add8(2) # вернет 2 + 8 = 10 10 >>> add8(4) # вернет 4 + 8 = 12 12

    Написать варианты с обычной "внутренней" и анонимной lambda-функцией.

    Написать фабрику, аналогичную п.2, но возвращающей список таких функций

    >>> additionals = addition_range(0, 5) # список из функций сложения от 0 до 5 включительно

    т.е. аналогичное

    Написать аналог map:

    • первым аргументом идет либо функция, либо список функций
    • вторым аргументом — список аргументов, которые будут переданы функциям
    • полагается, что эти функции — функции одного аргумента
    >>> mymap(, ) [(1, 2, 3), (2, 3, 4), (3, 4, 5)]

    в данном случае "развернутая" запись будет: [(add0(1), add0(2), add0(3)), (add1(1), add1(2), add1(3)), (add2(1), add2(2), add2(3))]

Итераторы

    Написать функцию-генератор cycle которая бы возвращала циклический итератор.

    >>> i = iter() >>> c = cycle(i) >>> c.next() 1 >>> c.next() 2 >>> c.next() 3 >>> c.next() 1

    Написать функцию-генератор chain, которая последовательно итерирует переданные объекты (произвольное количество)

    >>> i1 = iter() >>> i2 = iter() >>> c = chain(i1, i2) >>> c.next() 1 >>> c.next() 2 >>> c.next() 3 >>> c.next() 4 >>> c.next() 5 >>> c.next() Traceback (most recent call last): ... StopIteration

Для функций и итераторов написать доктесты

Модули

  1. У нас есть импортированный модуль foo, как узнать физический путь файла, откуда он импортирован?
  2. Из модуля foo вы импортируете модуль feedparser. Версия X feedparser"а есть в общесистемном каталоге site-packages, версия Y — рядом с модулем foo. Определена переменная окружения PYTHONPATH , и там тоже есть feedparser, версии Z. Какая версия будет использоваться?
  3. Как посмотреть список каталогов, в которых Python ищет модули?
  4. У вас есть модуль foo, внутри него импортируется модуль bar. Рядом с модулем foo есть файлы bar.py и bar/__init__.py Какой модуль будет использоваться.
  5. Что означает и для чего используется конструкция __name__ == "__main__"

Классы

    Написать базовый класс Observable, который бы позволял наследникам:

    1. при передаче **kwargs заносить соответствующие значения как атрибуты
    2. сделать так, чтобы при print отображались все публичные атрибуты
    >>> class X(Observable): ... pass >>> x = X(foo=1, bar=5, _bazz=12, name="Amok", props=("One", "two")) >>> print x X(bar=5, foo=1, name="Amok", props=("One", "two")) >>> x.foo 1 >>> x.name "Amok" >>> x._bazz 12
  1. Написать класс, который бы по всем внешним признакам был бы словарем, но позволял обращаться к ключам как к атрибутам.

    >>> x = DictAttr([("one", 1), ("two", 2), ("three", 3)]) >>> x { "one": 1, "three": 3, "two": 2} >>> x["three"] 3 >>> x.get("one") 1 >>> x.get("five", "missing") "missing" >>> x.one 1 >>> x.five Traceback (most recent call last): ... AttributeError

    Пункт 2 с усложнением: написать родительский класс XDictAttr так, чтобы у наследника динамически определялся ключ по наличию метода get_ .

    >>> class X(XDictAttr): ... def get_foo(self): ... return 5 ... def get_bar(self): ... return 12 >>> x = X({"one": 1, "two": 2, "three": 3}) >>> x X: { "one": 1, "three": 3, "two": 2} >>> x["one"] 1 >>> x.three 3 >>> x.bar 12 >>> x["foo"] 5 >>> x.get("foo", "missing") 5 >>> x.get("bzz", "missing") "missing"

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

    >>> x = Reg() >>> x >>> y = Reg() >>> y >>> z = Reg() >>> for i in Reg: ... print i

Написать юнит-тесты, за основу брать тесты выше, но не ограничиваясь ими.

Метаклассы и дескрипторы

  1. Для чего используются, какие аргументы получают, что должны возвращать: методы __new__ и __init__ классов
  2. Какие аргументы получает __new__ и __init__ у метакласса?

    Реализовать дескрипторы, которые бы фиксировали тип атрибута

    >>> class Image(object): ... height = Property(0) ... width = Property(0) ... path = Property("/tmp/") ... size = Property(0) >>> img = Image() >>> img.height = 340 >>> img.height 340 >>> img.path = "/tmp/x00.jpeg" >>> img.path "/tmp/x00.jpeg" >>>

    Реализовать базовый класс (используя метакласс), который бы фиксировал тип атрибута

    >>> class Image(Object): ... height = 0 ... width = 0 ... path = "/tmp" ... size = 0 >>> img = Image() >>> img.height = 340 >>> img.height 340 >>> img.path = "/tmp/x00.jpeg" >>> img.path "/tmp/x00.jpeg" >>> img.path = 320 Traceback (most recent call last): ... TypeError

    Реализовать базовый класс (используя метакласс) и дескрипторы, которые бы на основе класса создавали SQL-схему (ANSI SQL) для модели:

    >>> class Image(Table): ... height = Integer() ... width = Integer() ... path = Str(128) >>> print Image.sql() CREATE TABLE image (height integer, width integer, path varchar(128))

    реализовывать NULL , PRIMARY KEY , FOREIGN KEY , CONSTRAINTS не нужно. Достаточно реализации двух типов: Integer и Str .

  • Цель 1 - помочь ссылками, материалами, тем, кто соберется изучать программирование и первым языком возьмет Python. Показать, что это не так сложно, как кажется.
  • Цель 2 - собрать в комментариях ссылки на полезные и интересные материалы по этой теме.

0. А получится ли у меня?

С самого начала я сомневался в том, что у меня получится сделать что-то большее чем Hello World. Мне казалось, что программирование это сверх сложно и сверх магия. К тому же есть работа, хобби, семья, что будет отвлекаться от полноценного изучения.

Зря боялся и вам не советую. Программирование наверное никогда не станет моей основной профессией, но это отличный способ творческой реализации. Это шахматы и Civilization в одном флаконе.

Все проще чем кажется и гораздо интереснее.

1. Литература

Марк Лутц “Программирование на Python” - его советуют читать на многих форумах и курсах. Мне он показался излишне подробным и нагруженным для новичка. Читать много, программировать мало. Гораздо полезнее его читать после овладевания Python минимума.

Марк Саммерфилд “Программирование на Python 3” - динамично, с отличными примерами и заданиями. Без излишнего углубления, которое только все усложняет в начале. Я рекомендую начать именно с этой книги, она поможет быстро вникнуть, не пугая сложностями.

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

2. Что читать в интернете

http://pythonworld.ru/ - простым и понятным языком рассказывается об азах языка, часто использовал, как шпаргалку.

Еще через два месяца я смог создать свое первое приложение на Django. Но главное, что теперь у меня достаточно знания для самостоятельного развития и обучения. Самое трудное - это добраться до этой точки.

Еще через месяц я подключился к двум проектам на GitHub и принимаю в них участие. Задачи решаю конечно пока простые, но взамен получаю советы и обучение.

Теги: обучение python, обучение программированию