Питання і завдання по Python ∞. Де новачкові в програмуванні знайти вправи і ідеї для проектів? Прості вправи python 3

Кожному вивчає 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, яка по зашифрованою рядку і ключу відновлює вихідну рядок.

Мене періодично запитують про тестові завдання по 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.

Як ніколи популярний, використовується де тільки можливо, починаючи від бекенд серверів, закінчуючи розробкою фронтенд ігор, і так далі. Python по праву вважається мовою загального призначення і швидко стає мастхев інструментом в арсеналі будь-якого поважаючого себе програміста.

Але Python популярний не тільки тому що він популярний. Його легко вчити, читається він як псевдо-код і він дуже динамічний. Однак, вивчення нової мови може виявитися досить проблематичним заняттям, знайшовши правильне місце для навчання і людей від яких можна дізнатися нову інформацію, ви вирішите половину поставленого завдання. Наш путівник допоможе вам в цьому. Це буде ваш надійний план, який полегшить вивчення Python, зробить процес навчання веселим і цікавим.

Завдання 1: почніть з основ

На момент написання цієї статті, існує дві основні версії Python: Python 2.7 і Python 3.2. Яку версію ви виберете для вивчення не так важливо, тому що розходження будуть мінімальними-особливо для новачка. Але вам варто знати, що Python 2 підтримує більше сторонніх бібліотек, в той час, як Python 3 в основному фокусується на розробників працюють над поліпшенням мови. Вибір залишається за вами, якщо код з будь-якого туторіал працює не так як задумано, переконайтеся, що ви використовуєте відповідну версію Python з цього туторіал.

Wikibooks завжди був надійним джерелом для вивчення чогось нового і Python тут не виняток. Тут ви знайдете відмінну серію посібників, яка допоможе вам краще орієнтуватися в Python. Тут не буде безлічі технологічних термінів і ви можете приступити до написання коду досить швидко, що безсумнівно виявиться корисним досвідом. Тому я рекомендую цей сайт, як підходяще місце, з якого варто почати ваша подорож в мову Python.

Ви не знайдете найкраще джерело інформації, ніж офіційна документація на сайті python.org. Проте, якщо ви хочете почати відразу звідси, це може виявитися поганий ідей.

Контент тут є більш технічним, ніж wikibooks, що в свою чергу виявиться корисним пізніше, у міру просування у вивченні мови. Для новачка зміст може здатися складним і це виявиться перешкодою у вивченні цього простого і красивого мови.

Для початківців найпомітнішим відмінністю Python 2 від Python 3 швидше за все буде можливість в Python 2 використовувати print без дужок. Дужки в Python 3 обов'язкові, на цьому мабуть все.

Завдання 2: туторіали і скрінкасти

Плейлист NewBoston завжди чудовий і ви можете вивчити безліч мов. "Bucky" відмінний інструктор, його цікаво слухати, так як він знайшов баланс між бути смішним і інформативним, то що він намагається донести завжди легко сприймається. Я рекомендую ознайомитися з будь-яким з його плейлистів-особливо з плейлистом Python. Не потрібно мати які-небудь знаннями в програмуванні, після перегляду його відео туторіали у вас з'явитися міцне розуміння мови.

Nettuts + Python з нуля

Непоганим введенням в мову Python буде курс Giles Lavelle. Як і у випадку з серією від TheNewBoston, Lavelle має на увазі, що у вас немає досвіду в програмуванні.

Якщо ви хочете побачити реальні програми або хочете зрозуміти веб-розробку на Python, ця серія підійде, як не можна до речі.

У цьому скрінкасти ви створите динамічний веб-сайт з нуля, використовуючи Python фреймворк Django.

Скрінкасти по Python від ShowMeDo

StackOverflow відомий не тільки новачками, помилками і проблемами.

ShowMeDo володіє величезним каталогом відео відносяться до Python. Хоча може здатися, що на сайті не самий кращий користувальницький інтерфейс, там знаходиться величезний набір корисних відео, як інформація для новачків, так і просунуті методи використання Python. Вам обов'язково варто ознайомитися з цим сайтом.

Створіть Python бота, який може грати в веб-гри

У цьому туторіали ви познайомитеся з специфічним матеріалом, я не рекомендую його абсолютним новачкам. Однак я думаю його варто згадати. В даному уроці, Chris Kiehl покаже як створити дуже цікавого Python бота, який буде грати в просту гру для вас. Туторіал покаже вам міць Python; він може стати в нагоді для вирішення повсякденних завдань, які можна застосувати для управління вашим комп'ютером.

Завдання 3: безкоштовні електронні книги

Хороша книга безсумнівно є надійним помічником під час вивчення чогось нового, навколо мови Python утворилося приголомшливе і доброзичливе співтовариство, в слідстві чого можна знайти великий вибір безкоштовних електронних книг. Нижче ви побачите невеликий список кращих книг. Можна завантажити безкоштовну електронну версію кожної з них або купити друковане видання (або пожертвувати) якщо хочете підтримати автора, я впевнений вони це оцінять.

Learn Python the Hard Way

Незважаючи на назву книги - "Чи не простий підхід вивчення Python", вивчення Python все також є простим заняттям-як це і повинно бути! У даній книзі, Zed A. Shaw дає вам повне і докладне керівництво, з завданнями і прикладами з допомогою яких ви можете перевірити свої сили в програмуванні. Книга написана неформальним мовою, однак описує детально безліч подробиць, тим самим у вас не виникне труднощів при її прочитанні і результат не змусить себе чекати.

Think Python: How to Think Like a Computer Scientist

Ви не знайдете найкраще джерело інформації, ніж офіційна python.org документація.

Як свідчить підзаголовок, "Думати, як програміст", тут ви знайдете багато теоретичного матеріалу. Можливо новачки можуть засмутиться і книга здасться їм складною, але повірте мені, вона варта того щоб її прочитали, тут ви знайдете інформацію про теорію алгоритмів і концепціях високого рівня.

Invent With Python

Якщо вас більше цікавить практична частина, створення своєї гри, буде дійсно корисним досвідом! У цій книзі, Al Sweigart передбачає, що ви не володієте впевненим знанням Python і допомагає створити вам гру. Незважаючи на те що ця книга про розробку ігор, вона також цілком підійде повним новачкам. Пізніше в цій статті, я згадав схожу книгу, однак для неї потрібно впевнене володіння Python. Якщо ви відчуваєте, що добре знаєте мову, того інша книга виявиться більш інформативним джерелом для вас.

The Django Book

У тому випадку, якщо хочете навчитися веб-розробки на Python, найімовірніше ви будете використовувати фреймворк Django. Ви можете бути не знайомі з фреймворком Django, проте повинні відмінно розбиратися в Python, для прочитання цієї книги. Інформація в ній незамінна для будь-якого початківця веб-розробника.

Книги по Python

Якщо всіх перерахованих вище книг недостатньо або вас цікавить специфічна тема, перейдіть за цим посиланням. Хлопці з python.org створили великий список книг, відсортували їх за складністю і тематиці.

Завдання 4: познайомтеся з StackOverflow

Тисячі розробників відчули ті ж самі проблеми, з якими вам доведеться зіткнутися віч-на-віч. StackOverflow чудове джерело інформації, де будь-який розробник може знайти рішення своєї проблеми. Коли ви зіткнетеся з черговим багом і у вас не буде ідей як його виправити, шукайте відповідь на StackOverflow. Швидше за все там, вже є інформація, як інші люди вирішують аналогічне завдання.

Але StackOverflow відомий не тільки новачками, помилками і проблемами; на цьому сайті повно дуже розумних людей, готових допомогти - вчіться у них!

Більшості хитрощів і рад, які ви тут знайдете, немає ні в одному з туторіали, вони будуть дуже корисні просунутим користувачам або користувачем із середнім рівнем знань Python.

Завдання 5: проект Euler


Project Euler (вимовляється 'Oil-er ", запам'ятайте це, щоб не вдарити в бруд обличчям, в майбутньому) один з моїх улюблених веб-сайтів. Після створення облікового запису, ви можете взяти участь і вирішити приблизно 400 завдань, на цьому веб-сайті . Кожне завдання на 50 відсотків математика, на 50 відсотків програмування, на мій погляд, найправильніший підхід вивчення кожного з цих предметів.

Завдання починаються з простих, щоб перевірити ваш рівень знань мови, після чого складність буде зростати, надалі з'являться завдання, які не зможе вирішити, навіть досвідчений програміст. В кінці-кінців, вам доведеться знайти найефективніший алгоритм - на той випадок якщо у вас немає часу, чекати кілька годин на обчислення правильної відповіді.

Ніщо не зможе зробити вас чудовим програмістом швидше, ніж пошук найефективнішого вирішення завдань на Project Euler.

Коли вам вдасться отримати рішення чергової проблеми, для вас відкриється сторінка форуму, де люди обговорюють рішення і ідеї один з одним, щодо цього завдання. Більшість цих рішення будуть на мові Python. Це той самий ключ, який допоможе значно поліпшити здатності програмування. Якщо хтось знайшов більш швидке рішення, не бійтеся витратити час і проаналізуйте його, тим самим ви зможете зрозуміти які моменти варто переробити. Згодом, ви почнете розуміти всі хитрощі і навик володіння мовою Python покращитися, результат не змусить себе чекати.

В доповнення до цього, є кілька інформативних блогів, де можна знайти рішення задач по Python на Project Euler. Якщо застрягли на який-небудь задачі, нічого страшного якщо ви ознайомитеся з рішенням інших розробників, найголовніше навчитися чомусь новому від них. Ось два моїх улюблених блогу:

Завдання 6: створіть гру

Крім створення своєї гри, лише кілька речей можуть приносити задоволення.

Крім створення своєї гри, лише кілька речей можуть приносити задоволення. Це може виявитися досить крутий кривий під час процесу навчання, але це точно того варто. PyGame найвідоміша бібліотека для розробки ігор на Python, і вам не важко буде знайти безкоштовні туторіали про неї. Нижче найкращі з них.

Офіційна PyGame документація

Як і у випадку з туторіали по Python, розробники PyGame зробили документацію - введення. У матеріалі повно технічної термінології, на випадок якщо хочете приступити відразу до розробки ігор. Однак, як завжди, документація для розробників, буде найкращим джерелом інформації; тому я і рекомендую цей сайт.

Invent With Python (With PyGame)

Безкоштовна електронна книга від AI Sweigart знайомить читача з бібліотекою PyGame, навіть якщо ви нічого не знаєте про цю бібліотеки, після прочитання ви будете в змозі зробити пару ігор. Прості ігри, будуть відмінним фундаментом, для створення власного проекту, Якщо у вас є бажання. Sweigart надає докладні коментарі до свого коду, щоб допомогти в процесі навчання.

Це черговий плейлист від TheNewBoston. Відмінне введення в PyGame. Знову ж можна бути обізнаним із цією бібліотекою, читаючи книгу ви почнете розбиратися в PyGame, проте на відміну від InventWithPython ви не будете робити повноцінну гру.

Завдання 7: вивчіть популярні бібліотеки і інструменти

Python мову загального призначення, з яким можна зробити майже все що завгодно; в нашому розпорядженні нескінченний набір бібліотек та інструментів. Нижче список найпопулярніших.

PyPy

Якщо у вас виникне бажання зібрати інформацію з HTML старніцах ... BeautifulSoup зробить все необхідне і заощадить величезну кількість часу.

Виконуючи дії який, які вимагають багато ресурсів процесора і вам здається, що Python споживає ці ресурси, PyPy прийде на допомогу. PyPy альтернативний компілятор для Python, який може прискорити обчислення.

NumPy + SciPy

Дані бібліотеки зазвичай використовуються разом (SciPy залежить від NumPy). Якщо вам належить виконати роботу пов'язану з математичними обчисленнями або науковими дослідженнями, ці бібліотеки послужать відмінним помічником. NumPy і SciPy розширюють математичні функції і можливості Python, в слідстві чого значно прискорять вирішення поставлених завдань.

BeautifulSoup

BeautifulSoup просто приголомшливий. Збір інформації з HTML сторінокможе виявитися досить стомлюючим заняттям і вас чекає багато розчарування. BeautifulSoup зробить все за вас і заощадить величезну кількість часу. Дуже рекомендую цю бібліотеку, з нею цікаво працювати.

Python Image Library

Бібліотека для роботи з зображеннями (PIL) відмінно підходить для будь-яких завдань пов'язаних з обробкою зображень. Якщо є необхідність якимось чином взаємодіяти з зображенням, швидше за все PIL допоможе виконати це завдання.

Django

Як я вже згадував у цій статті, якщо вас цікавить веб-розробка, ваш вибір - фреймворк Django. Це найпопулярніший фреймворк на Python і по ньому існує величезна кількість навчальних ресурсів.

Завдання 8: візьміть участь в проектах з відкритим вихідним кодом

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

Тому проекти з відкритим вихідним кодом настільки популярні. Github і Bitbucket веб-сайти звідки вам варто почати. Не хвилюйтеся, в тому випадку якщо люди будуть критикувати ваш код, ви не повинні робити внесок в ці проекти, негайно. Завжди можна працювати на окремій гілці цього проекту, розібратися як він влаштований і робити з ним все що завгодно. Якщо раптом ви знайдете моменти, які слід поліпшити, відмінно! Зробіть це і відправте ваші поліпшення. Проекти з відкритим вихідним кодом для цього й існують.

висновок

Сподіваюся мені вдалося надати надійну базу з вивчення мови Python для вас. На той випадок якщо я забув згадати будь-які ресурси, дайте знати в коментарях нижче, щоб допомогти іншим користувачам!

  • мета 1- допомогти посиланнями, матеріалами, тим, хто збереться вивчати програмування і першою мовою візьме Python. Показати, що це не так складно, як здається.
  • мета 2- зібрати в коментарях посилання на корисні і цікаві матеріали по цій темі.

0. А чи вийде у мене?

З самого початку я сумнівався в тому, що у мене вийде зробити щось більше ніж Hello World. Мені здавалося, що програмування це понад складно і понад магія. До того ж є робота, хобі, сім'я, що буде відволікатися від повноцінного вивчення.

Даремно боявся і вам не раджу. Програмування напевно ніколи не стане моєю основною професією, але це відмінний спосібтворчої реалізації. Це шахи і Civilization в одному флаконі.

Все простіше ніж здається і набагато цікавіше.

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

Марк Лутц "Програмування на Python"- його радять читати на багатьох форумах і курсах. Мені він видався надто докладним і навантаженим для новачка. Читати багато, програмувати мало. Набагато корисніше його читати після оволодівання Python мінімуму.

Марк Саммерфілд "Програмування на Python 3"- динамічно, з відмінними прикладами і завданнями. Без зайвого поглиблення, яке тільки все ускладнює на початку. Я рекомендую почати саме з цієї книги, вона допоможе швидко вникнути, що не лякаючи складнощами.

Всі інші книги виявилися мене корисними і інформативними. Взагалі, хорошу літературу по цій темі важко просто так взяти і купити в магазині або в цифровій версії.

2. Що читати в інтернеті

http://pythonworld.ru/ - простим і зрозумілим мовою розповідається про ази мови, часто використовував, як шпаргалку.

Ще через два місяці я зміг створити своє перше додаток на Django. Але головне, що тепер у мене досить знання для самостійного розвитку і навчання. Найважче - це дістатися до цієї точки.

Ще через місяць я підключився до двох проектів на GitHub і приймаю в них участь. Завдання вирішую звичайно поки прості, але натомість отримую поради та навчання.

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

Підготовка до співбесіди на позицію Python-розробника

При підготовці використовувалися матеріали: The Vital Guide to Python Interviewing, Must Have Python Interview Questions, 15 Essential Python Interview Questions, Python Interview Questions and Answers

На сьогоднішній день число Python-програмістів продовжує зростати, проте кількість робочих місць для них збільшується не так швидко. Сучасному розробнику потрібно бути конкурентоспроможним, щоб пробитися на бажану позицію. Ми підготували статтю з темами і питаннями, які роботодавець може торкнутися на співбесіді, і доповнили їх невеликими поясненнями - по суті, це завдання з програмування на Python з рішеннями. Матеріал буде корисний продовжують для повторення, а початківцям допоможе зорієнтуватися, куди робити перші кроки, на що звернути увагу. Сприймайте як своєрідний маяк.

Робота зі списками

Лямбда-вирази, генератори списків та вирази-генератори

Лямбда-вирази- скорочений метод створення однолінійних анонімних функцій. Їх простота часто (але не завжди) робить код більш струнким і читабельним, ніж класичне оголошення функцій. З іншого боку, та ж простота обмежує можливості і зони застосування лямбда-виразів.

Генератори списківзабезпечують короткий синтаксис для створення списків. Вони використовуються для складання списків, в яких кожен елемент - результат деякої операції (операцій) з елементами іншої послідовності або ітератором. Генератори списків можуть використовуватися для створення підпослідовності тих елементів, члени яких задовольняють певним умові. Генератори списків в Python - своєрідна альтернатива вбудованим функціям map () і filter ().

Лямбда-вирази з функціями map () і filter () і генератори списків схожі, тому вибір одного з цих інструментів суб'єктивний і залежить від випадку. Але слід зазначити, що генератори списків виконуються трохи швидше - виклик лямбда-функції створює новий стековий кадр.

Вирази-генераторисинтаксично і функціонально схожі на генератори списків, але є важливі відмінності між їх механізмами роботи і областями застосування. Ітерація при накладенні вираження-генератора або генератора списку буде робити все те ж саме, але генератор списків спочатку створить цілий список в пам'яті, в той час як вираз-генератор буде створювати елементи на ходу в міру необхідності. Вирази-генератори можуть бути використані в великому або навіть нескінченну кількість послідовностей. А генерування значень на вимогу забезпечує підвищення продуктивності і зниження використання пам'яті. Однак слід зазначити, що стандартні методи списків listв Python можуть застосовуватися на результатах виконання генератора, але не на самому генераторі.

У чому різниця між списком і кортежем?

Основна різниця: список може змінюватися, а кортеж - немає. Робота з кортежами швидше, ніж зі списками. Якщо необхідно визначити постійний набір значень, і все, що з ним коли-небудь треба робити, - це перебирати його елементи, раціональніше використовувати кортеж замість списку. Кортеж також може виступати в якості ключа для словників, на відміну від списку.

Найбільш просунуті кандидати скажуть, що кортежі неоднорідні і їх використання аналогічно використанню struct в мові програмування С. Списки ж аналогічні звичним масивів.

Налагодження коду і тестування

Який підхід ви використовуєте для модульного тестування в Python?

Фундаментальну відповідь на це питання відноситься до використання фреймворка Python - unittest.

Unittest підтримує автоматизацію тестів, використання загального коду для настройки і завершення тестів, об'єднання тестів в групи, а також дозволяє відокремлювати тести від фреймворка для формування звітів. Модуль unittest представляє класи, що спрощують підтримку цих якостей для набору тестів.

Вас можуть попросити описати ключові елементиструктури unittest, а саме:

  • випробувальний стенд (test fixture);
  • тестовий випадок (test case);
  • набір тестів (test suite);
  • виконавець тестів (test runner).

ітератори

Що таке итератор?

Итератор - інтерфейс, що надає доступ до елементів колекції (масиву або контейнера) і навігацію по ним. У різних системах ітератори можуть мати різні загальноприйняті назви. У термінах систем управління базами даних ітератори називаються курсором. У найпростішому випадку ітератором в низькорівневих мовах є покажчик.

У чому різниця між ітератором і генератором?

Ці терміни тісно пов'язані (будь-генератор - це ітератор), їх досить часто плутають, що іноді призводить до нерозуміння. Итератор - більш загальна концепція. Це об'єкт, у якого визначені два методу: __next__ і __iter__. З іншого боку, генератор - це ітератор. Але не навпаки. Генератор може виходити використанням ключового слова yield в тілі функції.

Def squares (start, stop): for i in range (start, stop): yield i * i generator = squares (a, b)

GIL

Концепція GIL полягає в тому, що в кожен момент часу тільки один потік може виконуватися процесором. Це зроблено для того, щоб між потоками не було боротьби за окремі змінні. Виконуваний потік отримує доступ до всього оточення. Така особливість реалізації потоків в Python значно спрощує роботу з потоками і дає певну потокобезпечна (thread safety).

передача аргументів

Як передаються незмінні об'єкти?

Незмінні об'єкти передаються «за значенням». Такі об'єкти, як цілі числа і рядки, передаються у вигляді посилань на об'єкти, а не у вигляді копій об'єктів.

Як передаються змінні об'єкти?

Змінні об'єкти передаються «за вказівником». Такі об'єкти, як списки і словники, також передаються у вигляді посилань на об'єкти, що дуже схоже на те, як в мові C передаються покажчики на масиви - змінювані об'єкти допускають можливість безпосереднього зміни всередині функції так само, як і масиви в мові C.

>>> def f (a): # Імені a присвоюється переданий об'єкт ... a = 99 # Змінюється тільки локальна змінна ... >>> b = 88 >>> f (b) # Спочатку імена a і b посилаються на одне і те ж число 88 >>> print (b) # Мінлива b не змінилася 88

У цьому фрагменті в момент виклику функції f (b) змінної a присвоюється об'єкт 88, але змінна a існує тільки всередині викликаної функції. Зміна змінної a всередині функції не впливає на оточення, звідки була викликана функція, - просто в момент виклику створюється абсолютно новий об'єкт a.

Що буде виведено після другого виклику append () в коді нижче?

>>> def append (list =): ... # додавання довжини списку в список ... list.append (len (list)) ... return list ... >>> append ([ "a", " b "]) [" a "," b ", 2] >>> >>> append () # виклик без аргументу використовує значення list за замовчуванням >>> >>> append () # Але що станеться при повторному виклику append без аргументу?

Коли значенням за замовчуванням для аргументу функції є вираз, воно обчислюється тільки один раз, а не завжди при виконанні функції. Таким чином, після того як аргумент list був инициализирован в порожній масив, наступні виклики функції без аргументів продовжать використовувати той же самий масив, що був инициализирован спочатку.

>>> append () # при першому виклику без аргументу використовується значення за замовчуванням >>> append () # але потім ... >>> append () # послідовні виклики розширюють список за замовчуванням >>> append () # і так триває ...

Як можна змінити застосування методу append в попередньому питанні, щоб уникнути небажаного поведінки, описаного там?

Є альтернативна реалізація методу append, яка вирішить проблему:

>>> def append (list = None): ... if list is None: list = # Збільшує довжину списку ... list.append (len (list)) return list ... >>> append () >> > append ()

Питання поза певними категорій

Як можна поміняти місцями значення двох змінних усередині рядка в Python?

Розглянемо простий приклад:

>>> x = "X" >>> y = "Y"

У багатьох інших мовах програмування при заміні значень X і Y потрібно виконати щось на зразок цього:

>>> tmp = x >>> x = y >>> y = tmp >>> x, y ( "Y", "X")

Але в Python існує можливість зробити це за допомогою одного рядка коду наступним чином:

>>> x, y = y, x >>> x, y ( "Y", "X")

Що буде виведено останнім оператором нижче?

>>> flist = >>> for i in range (3): ... flist.append (lambda: i) ... >>> # що буде виведено?

У будь-якому замиканні в Python змінні зв'язуються по імені. Таким чином, у наведеній вище рядку коду буде виведено наступне:

>>> flist = >>> for i in range (3): ... flist.append (lambda i = i: i) ... >>>

Для чого служить ключове слово «self»?

Ключове слово self - змінна, яка відноситься до примірника об'єкта. Коли створюється клас, явна посилання на об'єкт того ж типу класу відсутній. Тому, щоб посилатися на поточний клас або об'єкт, в Python використовується ключове слово self.

Class User: def __init __ (self): self.name = "Ivan Ivanov" self.age = 16 user_obj = User () user_obj.name # self.name містить "Ivan Ivanov" в якості значення

Для чого служить ключове слово «yield»?

Ключове слово yield може звернути будь-яку функцію в генератор. Воно працює подібно оператору return, з тією різницею, що ключове слово буде повертати об'єкт-генератор. Також функція може здійснювати кілька викликів ключового слова yield.

Def testgen (index): weekdays = [ "sun", "mon", "tue", "wed", "thu", "fri", "sat"] yield weekdays yield weekdays day = testgen (0) print next ( day), next (day) #output: sun mon

Що таке __init__.py? Як імпортувати клас з іншого каталогу?

Init__.py в основному використовується для ініціалізації пакетів Python.

Файл __init__.py в каталозі lstm_m вказує інтерпретатора Python, що цей каталог повинен оброблятися як пакет Python.

Як імпортувати клас з іншого каталогу?

Зазвичай __init__.py є порожнім файлом. А якщо нам потрібно використовувати lstm.py в файлі run.py, то його потрібно імпортувати в такий спосіб:

From lstm_m import lstm

Крім того, всередині папки модуля повинен бути файл __init__.py, призначений для імпорту.

Які вбудовані типи існують в Python?

Існують змінювані і незмінні вбудовані типи Python.

Змінні:

  • списки;
  • безлічі;
  • словники.

незмінні:

  • рядки;
  • кортежі;
  • числа.

Слід пам'ятати, що вище перераховані тільки основні типи. Насправді їх більше шести.

Що таке docstring в Python?

Рядок документації в Python (docstring) - спосіб документування функцій, модулів і класів. Стандарти оформлення - на офіційному сайті.

Як можна конвертувати число в рядок?

Для перетворення числа в рядок, як правило, використовують вбудовану функцію str (), хоча є й інші способи, такі як "(0: d)". Format (число) і "% d"% число. Якщо ви хочете перетворити десяткове число в вісімкове (oct - octal) або шістнадцяткове (hex - hexadecimal), використовуйте вбудовану функцію oct () або hex () відповідно.

У чому різниця між Xrange і range?

Функція xrange () повертає об'єкт xrange, в той час як range () повертає список і використовує ту ж кількість пам'яті, незалежно від розміру функції.

Як побачити методи або атрибути об'єкта?

Команда dir (x) повертає відсортований список імен атрибутів для будь-якого переданого в неї об'єкта. Якщо жоден об'єкт не вказано, dir () повертає імена в поточній області видимості.

додатково

Якщо ви володієте англійською мовою, то рекомендуємо пройти онлайн-тести та перевірити свої знання перед співбесідою.

Збірки матеріалів для вивчення Python від нас:,. Короткі, а також. Не забудьте повирішувати завдання: ось, де це можна зробити.

висновок

Питання і поради, представлені в цій статті, можуть бути дуже цінними допоміжними засобами для підготовки здобувачів до співбесід. Ми сподіваємося, розробники знайдуть їх корисними для самостійного тестування своїх знань перед зустріччю з роботодавцем. Але не слід забувати, що всі представлені вище питання - один з декількох інструментів відбору кандидатів на посаду в складі певної стратегії. Готуйтеся уважно і ретельно. Успіхів!

Сподобалася стаття? Поділіться з друзями!