Praktik python tapşırıqları. Python proqramlaşdırma dili - haradan başlamaq lazımdır? Metsinflər və deskriptorlar

Həmişəkindən daha populyardır, o, mümkün olan hər yerdə istifadə olunur, backend serverlərindən tutmuş frontend oyunlarının inkişafına və s. Python haqlı olaraq ümumi təyinatlı dil hesab olunur və tez bir zamanda özünə hörmət edən hər hansı bir proqramçının arsenalında zəruri alətə çevrilir.

Lakin Python populyar olduğu üçün populyar deyil. Öyrənmək asandır, psevdokod kimi oxuyur və çox dinamikdir. Bununla belə, yeni bir dil öyrənmək, öyrənmək üçün doğru yer tapmaq olduqca çətin ola bilər və yeni məlumatları öyrənə biləcəyiniz insanlar problemin yarısını həll edəcəkdir. Bələdçimiz bu işdə sizə kömək edəcəkdir. Bu, Python öyrənməni asanlaşdıracaq və öyrənməni əyləncəli və maraqlı edəcək mükəmməl planınız olacaq.

Tapşırıq 1: Əsaslardan başlayın

Bu yazıya görə, Python-un iki əsas versiyası var: Python 2.7 və Python 3.2. Hansı versiyanı öyrənməyi seçdiyiniz o qədər də vacib deyil, çünki fərqlər, xüsusən də yeni başlayanlar üçün minimal olacaqdır. Ancaq bilməlisiniz ki, Python 2 daha çox üçüncü tərəf kitabxanalarını dəstəkləyir, Python 3 isə əsasən dilin təkmilləşdirilməsi üzərində işləyən tərtibatçılara diqqət yetirir. Seçim sizin ixtiyarınızdadır, əgər hər hansı dərslikdəki kod nəzərdə tutulduğu kimi işləmirsə, həmin dərslikdəki uyğun Python versiyasını istifadə etdiyinizə əmin olun.

Vikikitablar həmişə yeni bir şey öyrənmək üçün etibarlı mənbə olub və Python da istisna deyil. Burada Python ilə daha yaxından tanış olmağa kömək edəcək bir sıra dərsliklər tapa bilərsiniz. Çox texnoloji jarqon olmayacaq və siz olduqca tez kod yazmağa başlaya bilərsiniz, bu, mütləq faydalı təcrübə olacaq. Buna görə də, bu saytı Python səyahətinizə başlamaq üçün yaxşı bir yer kimi tövsiyə edirəm.

Siz python.org saytındakı rəsmi sənədlərdən daha yaxşı məlumat mənbəyi tapa bilməzsiniz. Ancaq dərhal buradan başlamaq istəyirsinizsə, bu yaxşı fikir olmaya bilər.

Buradakı məzmun vikikitablardan daha texniki xarakter daşıyır ki, bu da öz növbəsində sonradan dil öyrənmə prosesində irəliləyiş əldə etdikcə faydalı olacaq. Yeni başlayanlar üçün məzmun mürəkkəb görünə bilər və bu, bu sadə və gözəl dili öyrənməkdə maneə olacaq.

Yeni başlayanlar üçün Python 2 və Python 3 arasındakı ən nəzərə çarpan fərq, çox güman ki, Python 2-də mötərizəsiz çapdan istifadə etmək bacarığı olacaq. Python 3-də mötərizələr tələb olunur, hamısı budur.

Tapşırıq 2: Dərsliklər və ekran görüntüləri

NewBoston pleylist həmişə əladır və siz bir çox dil öyrənə bilərsiniz. "Bucky" əla təlimatçıdır, onu dinləmək maraqlıdır, çünki o, gülməli və məlumatlı olmaq arasında tarazlıq tapıb, onun çatdırmağa çalışdığı şeyi başa düşmək həmişə asandır. Mən onun pleylistlərindən hər hansı birini yoxlamağı məsləhət görürəm - xüsusən də Python pleylistini. Heç bir proqramlaşdırma biliyinə ehtiyacınız yoxdur, onun video dərslərinə baxdıqdan sonra dili yaxşı başa düşəcəksiniz.

Nettuts+ Python sıfırdan

Python-a yaxşı giriş Giles Lavellenin kursudur. TheNewBoston seriyasında olduğu kimi, Lavelle sizin proqramlaşdırma təcrübəniz olmadığını güman edir.

Əgər real dünyada tətbiqləri görmək və ya Python veb inkişafını anlamaq istəyirsinizsə, bu seriya mükəmməldir.

Bu ekran görüntüsündə siz Django Python çərçivəsini istifadə edərək sıfırdan dinamik veb sayt yaradacaqsınız.

ShowMeDo-dan Python ekran görüntüsü

StackOverflow yalnız yeni başlayanlar, səhvlər və problemlər üçün tanınmır.

ShowMeDo-da Python ilə əlaqəli videoların böyük kataloqu var. Sayt ən yaxşı istifadəçi interfeysinə malik kimi görünməsə də, yeni başlayanlar üçün məlumatlardan Python-dan istifadə üçün qabaqcıl üsullara qədər çoxlu faydalı videolara malikdir. Bu saytı mütləq yoxlamalısınız.

Veb oyunları oynaya bilən Python botu yaradın

Bu dərslikdə siz konkret materialla tanış olacaqsınız, mən bunu mütləq yeni başlayanlara tövsiyə etmirəm. Bununla belə, məncə qeyd etməyə dəyər. Bu dərslikdə Chris Kiehl sizə sadə bir oyun oynayacaq çox maraqlı Python botunu necə yaratacağınızı göstərəcək. Dərslik sizə Python-un gücünü göstərəcək; kompüterinizi idarə etmək üçün istifadə edilə bilən gündəlik vəzifələri həll etmək üçün faydalı ola bilər.

Tapşırıq 3: Pulsuz elektron kitablar

Yaxşı kitab yeni bir şey öyrənərkən böyük köməkdir və Python heyrətamiz və mehriban bir cəmiyyətə malikdir, nəticədə pulsuz elektron kitabların böyük seçimi var. Aşağıda ən yaxşı kitabların kiçik bir siyahısını görəcəksiniz. Onların hər birinin pulsuz elektron versiyasını yükləyə və ya çap nəşrini ala bilərsiniz (yaxud ianə edə bilərsiniz), əgər müəllifə dəstək olmaq istəyirsinizsə, əminəm ki, onlar bunu qiymətləndirəcəklər.

Python'u çətin yoldan öyrənin

Kitabın "Python öyrənmək üçün asan olmayan yanaşma" başlığına baxmayaraq, Python dilini öyrənmək hələ də asan deyil - olması lazım olduğu kimi! Bu kitabda Zed A. Shaw sizə proqramlaşdırma bacarıqlarınızı yoxlamaq üçün problemlər və nümunələrlə tam və ətraflı bələdçi verir. Kitab qeyri-rəsmi bir dildə yazılmışdır, lakin bir çox təfərrüatları ətraflı təsvir edir, ona görə də onu oxumaqda çətinlik çəkməyəcəksiniz və nəticə özünü çox gözlətməyəcək.

Python düşünün: Kompüter alimi kimi necə düşünmək olar

Rəsmi python.org sənədlərindən daha yaxşı məlumat mənbəyi tapa bilməzsiniz.

Altyazıda deyildiyi kimi, "Thinking Like a Programmer", burada çoxlu nəzəri material tapa bilərsiniz. Yeni başlayanlar əsəbiləşə və kitabı çətin tapa bilər, amma mənə inanın, alqoritm nəzəriyyəsi və yüksək səviyyəli anlayışlar haqqında məlumat tapa biləcəyiniz üçün oxumağa dəyər.

Python ilə ixtira edin

Əgər siz praktiki hissə ilə daha çox maraqlanırsınızsa, öz oyununuzu yaratmaq həqiqətən faydalı təcrübə olacaq! Bu kitabda Al Sweigart Python ilə rahat olmadığınızı fərz edir və oyun yaratmağınıza kömək edir. Bu kitab oyun inkişafı haqqında olsa da, tam yeni başlayanlar üçün də olduqca uyğundur. Daha sonra bu məqalədə oxşar bir kitabdan bəhs etdim, lakin bu, Python-un güclü əmrini tələb edir. Əgər dili yaxşı bildiyinizi hiss edirsinizsə, başqa bir kitab sizin üçün daha çox məlumat mənbəyi olacaq.

Djanqo Kitabı

Python-da veb inkişafı öyrənmək istəyirsinizsə, çox güman ki, Django çərçivəsini istifadə edəcəksiniz. Django çərçivəsi ilə tanış olmaya bilərsiniz, lakin bu kitabı oxumaq üçün Python dilini yaxşı başa düşməlisiniz. İçindəki məlumatlar hər hansı bir təcrübəsiz veb tərtibatçısı üçün əvəzolunmazdır.

Python üzrə kitablar

Yuxarıdakı kitabların hamısı kifayət deyilsə və ya konkret mövzu ilə maraqlanırsınızsa, bu linki izləyin. Python.org-dan olan uşaqlar kitabların geniş siyahısını tərtib edərək, onları mürəkkəblik və mövzuya görə çeşidləyiblər.

Tapşırıq 4: StackOverflow ilə tanış olun

Minlərlə tərtibatçı sizin üz-üzə gəlməli olduğunuz eyni problemlərlə üzləşib. StackOverflow hər hansı bir tərtibatçının probleminin həllini tapa biləcəyi əla məlumat mənbəyidir. Başqa bir səhvlə qarşılaşdıqda və onu necə düzəltmək barədə heç bir fikrin yoxdursa, cavabı StackOverflow-da axtarın. Çox güman ki, başqa insanların oxşar problemi necə həll etmələri barədə artıq məlumat var.

Lakin StackOverflow yalnız yeni başlayanlar, səhvlər və problemlər üçün tanınmır; Bu sayt kömək etməyə hazır olan çox ağıllı insanlarla doludur - onlardan öyrənin!

Burada tapacağınız fəndlərin və məsləhətlərin əksəriyyəti heç bir dərslikdə tapılmır və qabaqcıl və ya orta səviyyəli Python istifadəçiləri üçün çox faydalı olacaq.

Tapşırıq 5: Eyler layihəsi


Project Euler ("Oil-er" kimi tələffüz olunur, gələcəkdə üzünüzü itirməmək üçün bunu xatırlayın) mənim sevimli veb saytlarımdan biridir. Siz bir hesab yaratdıqdan sonra bu saytda iştirak edə və təxminən 400 problemi həll edə bilərsiniz 50 faiz riyaziyyat, 50 faiz proqramlaşdırma, məncə, bu fənlərin hər birini öyrənmək üçün ən düzgün yanaşma.

Tapşırıqlar dil bilik səviyyənizi yoxlamaq üçün sadə tapşırıqlardan başlayır, bundan sonra mürəkkəblik artacaq və nəticədə təcrübəli proqramçının belə həll edə bilməyəcəyi problemlər yaranacaq. Sonda siz ən səmərəli alqoritmi tapmalı olacaqsınız - vaxtınız yoxdursa, düzgün cavabı hesablamaq üçün bir neçə saat gözləyin.

Project Euler problemlərinin ən səmərəli həllini tapmaqdan daha sürətli heç nə sizi daha yaxşı proqramçı edə bilməz.

Başqa bir problemin həllini tapdığınız zaman sizin üçün forum səhifəsi açılacaq, burada insanlar bu problemlə bağlı həll yollarını və fikirləri bir-biri ilə müzakirə edirlər. Bu həllərin əksəriyyəti Python-da olacaq. Bu, proqramlaşdırma bacarıqlarınızı əhəmiyyətli dərəcədə təkmilləşdirməyə kömək edəcək açardır. Kimsə daha sürətli həll yolu tapıbsa, onu təhlil etmək üçün vaxt ayırmaqdan qorxmayın ki, hansı məqamların yenidən işlənməsi lazım olduğunu başa düşəsiniz. Zaman keçdikcə siz bütün fəndləri başa düşməyə başlayacaqsınız və Python dil bacarıqlarınız təkmilləşəcək, nəticə özünü çox gözlətməyəcək.

Bundan əlavə, Project Euler-də Python problemlərinin həlli yollarını tapa biləcəyiniz bir neçə informativ bloq var. Əgər bir problemdə ilişib qalırsınızsa, digər tərtibatçıların həllinə baxsanız, eybi yoxdur, ən əsası onlardan yeni bir şey öyrənməkdir. Budur mənim sevimli bloqlarımdan ikisi:

Tapşırıq 6: Oyun yaradın

Öz oyununuzu yaratmaqdan başqa, əyləncəli ola biləcək bir neçə şey var.

Öz oyununuzu yaratmaqdan başqa, əyləncəli ola biləcək bir neçə şey var. Bu, olduqca dik bir öyrənmə əyrisi ola bilər, lakin buna mütləq dəyər. PyGame, Python-da oyunlar hazırlamaq üçün ən məşhur kitabxanadır və bu barədə pulsuz dərslər tapmaqda çətinlik çəkməyəcəksiniz. Aşağıda onlardan ən yaxşıları var.

Rəsmi PyGame sənədləri

Python dərsliklərində olduğu kimi, PyGame tərtibatçıları da sənədlər təqdim etmişlər - giriş. Dərhal oyunları inkişaf etdirməyə başlamaq istəsəniz, material texniki terminologiya ilə doludur. Bununla belə, həmişə olduğu kimi, tərtibatçı sənədləri ən yaxşı məlumat mənbəyi olacaqdır; ona görə də bu saytı tövsiyə edirəm.

Python ilə ixtira edin (PyGame ilə)

AI Sweigart-dan pulsuz elektron kitab oxucunu PyGame kitabxanası ilə tanış edir, hətta bu kitabxana haqqında heç nə bilmirsinizsə belə, onu oxuduqdan sonra bir neçə oyun qura biləcəksiniz. Sadə oyunlar, arzunuz varsa, öz layihənizi yaratmaq üçün əla əsas olacaqdır. Sweigart öyrənmə prosesinə kömək etmək üçün kodu haqqında ətraflı şərhlər təqdim edir.

Bu TheNewBoston-dan başqa bir pleylistdir. PyGame-ə əla giriş. Yenə də bu kitabxana ilə tanış olmaya bilərsiniz, kitabı oxumaqla siz PyGame-i anlamağa başlayacaqsınız, lakin InventWithPython-dan fərqli olaraq tam hüquqlu bir oyun yaratmayacaqsınız.

Tapşırıq 7: Populyar Kitabxanaları və Alətləri araşdırın

Python, demək olar ki, hər şeyi edə biləcəyiniz ümumi təyinatlı bir dildir; Bizim ixtiyarımızda sonsuz sayda kitabxana və alətlərimiz var. Aşağıda ən populyarların siyahısı verilmişdir.

PyPy

Əgər HTML səhifələrindən məlumat toplamaq istəyirsinizsə... BeautifulSoup sizə lazım olan hər şeyi edəcək və böyük vaxta qənaət edəcək.

Çoxlu CPU resursu tələb edən işlər görəndə və Python-un bu resursları istehlak etdiyini hiss edirsinizsə, PyPy köməyə gələcək. PyPy hesablamaları sürətləndirə bilən Python üçün alternativ kompilyatordur.

NumPy + SciPy

Bu kitabxanalar adətən birlikdə istifadə olunur (SciPy NumPy-dən asılıdır). Əgər siz riyazi hesablamalar və ya elmi araşdırmalarla bağlı işlə məşğul olmalısınızsa, bu kitabxanalar əla köməkçi kimi xidmət edəcək. NumPy və SciPy Python-un riyazi funksiyalarını və imkanlarını genişləndirir, bunun nəticəsində onlar tapşırıqların həllini əhəmiyyətli dərəcədə sürətləndirəcəklər.

Gözəl şorba

BeautifulSoup tamamilə heyrətamizdir. HTML səhifələrindən məlumatların təhlili olduqca yorucu və sinir bozucu ola bilər. BeautifulSoup sizin üçün hər şeyi edəcək və sizə çox vaxt qənaət edəcək. Bu kitabxananı çox tövsiyə edirəm, onunla işləmək əyləncəlidir.

Python Şəkil Kitabxanası

Şəkil Kitabxanası (PIL) istənilən şəkil emal tapşırığı üçün mükəmməldir. Şəkillə hər hansı bir şəkildə qarşılıqlı əlaqəyə ehtiyac varsa, PIL çox güman ki, bu tapşırığı yerinə yetirməyə kömək edəcəkdir.

Djanqo

Bu məqalədə qeyd etdiyim kimi, əgər veb inkişafı ilə maraqlanırsınızsa, seçiminiz Django çərçivəsidir. Bu, ən populyar Python çərçivəsidir və onun üzərində çoxlu sayda təlim resursları var.

Çağırış 8: Açıq mənbəli layihələrə töhfə verin

Dili layiqincə başa düşməklə, digər insanların kodunu oxumaq və naviqasiya etmək vacib bir bacarıqdır və həm də öyrənmək üçün əla bir yol olacaqdır.

Buna görə açıq mənbə layihələri çox populyardır. Github və Bitbucket veb saytları başlamalı olduğunuz yerdir. Narahat olmayın, əgər insanlar sizin kodunuzu tənqid edərlərsə, siz dərhal həmin layihələrə töhfə verməməlisiniz. Siz həmişə bu layihənin ayrı bir bölməsində işləyə, onun necə işlədiyini anlaya və onunla istədiyinizi edə bilərsiniz. Birdən təkmilləşdirilməsi lazım olan şeylər tapsanız, əla! Bunu edin və təkmilləşdirmələrinizi təqdim edin. Açıq mənbə layihələri bunun üçündür.

Nəticə

Ümid edirəm ki, sizin üçün Python öyrənmək üçün etibarlı baza təmin edə bildim. Hər hansı resursu qeyd etməyi unutmuşamsa, digər istifadəçilərə kömək etmək üçün aşağıdakı şərhlərdə mənə bildirin!

Məndən vaxtaşırı Python mövzuları üzrə test tapşırıqları soruşulur. Sualları ümumiləşdirib bir yerə yazmaq qərarına gəldim. Mən bu sual və tapşırıqlardan müsahibələrdə istifadə etmirəm, amma təlimdə istifadə edirəm.

Məlumat növləri, əsas konstruksiyalar

  1. Bir obyektin bütün atributlarının siyahısını necə əldə etmək olar
  2. Bir obyektin bütün ictimai atributlarının siyahısını necə əldə etmək olar
  3. Bir obyektdə metodların siyahısını necə əldə etmək olar
  4. Hansı "sehrli" dəyişən yardımın məzmununu saxlayır?
  5. İki tuple var, üçüncünü ilk ikisinin birləşməsi kimi alın
  6. İki dəzgah var, üçüncünü ilk iki tuplenin unikal elementlərinin birliyi kimi alın
  7. Niyə bir dövrədə siyahı dəyişdirilirsə, lst[:]-də for x istifadə olunur, bu da [:] deməkdir?
  8. Eyni uzunluqda iki siyahı var, birində açarlar, digərində isə dəyərlər var. Lüğət yaradın.
  9. Müxtəlif uzunluqlu iki siyahı var, birində açarlar, digərində isə dəyərlər var. Lüğət yaradın. Heç bir dəyəri olmayan açarlar üçün dəyər kimi None istifadə edin. Açarları olmayan dəyərlərə məhəl qoymayın.
  10. lüğət var. Onu çevirin. Bunlar. cüt açar: dəyər mübadiləsi - dəyər: açar.
  11. Unicode-da sətir var, utf-8 və cp1251 kodlaşdırmasında 8 bitlik sətir əldə edin
  12. Cp1251 kodlaşdırmasında bir sətir var, Unicode sətrini əldə edin

Funksiyalar

    Arqumentləri siyahıya/dəstəyə və ya bir-bir ötürə biləcəyiniz funksiyanı yazın. Funksiya bütün arqumentləri cəmləşdirir.

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

    Arqumentlə əlavə funksiyanı qaytaracaq zavod funksiyasını yazın.

    >>> add5 = add(5) # əlavə funksiyası 5 ilə əlavə funksiyasını qaytarır >>> add5(3) # qaytaracaq 3 + 5 = 8 8 >>> add5(8) # 8 + 5 = 13 qaytaracaq 13 >>> add8 = add(8) >>> add8(2) # qaytaracaq 2 + 8 = 10 10 >>> add8(4) # qaytaracaq 4 + 8 = 12 12

    Adi "daxili" və anonim lambda funksiyaları ilə variantları yazın.

    2-ci addıma bənzər bir zavod yazın, lakin bu cür funksiyaların siyahısını qaytarın

    >>> əlavələr = əlavə_aralıq(0, 5) # 0-dan 5-ə qədər əlavə funksiyaların siyahısı

    olanlar. oxşar

    Xəritənin analoqunu yazın:

    • birinci arqument ya funksiya, ya da funksiyaların siyahısıdır
    • ikinci arqument funksiyalara ötürüləcək arqumentlərin siyahısıdır
    • bu funksiyaların bir arqumentin funksiyaları olduğu güman edilir
    >>> xəritəm(, ) [(1, 2, 3), (2, 3, 4), (3, 4, 5)]

    bu halda, “genişlənmiş” giriş belə olacaq: [(əlavə0(1), əlavə et0(2), əlavə et0(3)), (əlavə1(1), əlavə1(2), əlavə1(3)), (əlavə2() 1), əlavə 2 (2), əlavə 2 (3))]

İteratorlar

    Siklik iteratoru qaytaracaq bir generator funksiya dövrü yazın.

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

    Keçirilmiş obyektləri ardıcıl olaraq təkrarlayan zəncir generatoru funksiyasını yazın (ixtiyari nömrə)

    >>> i1 = iter() >>> i2 = iter() >>> c = zəncir(i1, i2) >>> c.next() 1 >>> c.next() 2 >>> c. next() 3 >>> c.next() 4 >>> c.next() 5 >>> c.next() Traceback (ən son zəng): ... StopIteration

Funksiyalar və iteratorlar üçün doktestlər yazın

Modullar

  1. Bizdə idxal edilmiş foo modulumuz var, faylın idxal edildiyi yerdən fiziki yolunu necə öyrənə bilərik?
  2. foo modulundan feedparser modulunu idxal edirsiniz. Feedparserin X versiyası sistem miqyasında sayt paketləri kataloqundadır, Y versiyası foo modulunun yanındadır və PYTHONPATH mühit dəyişəni müəyyən edilmişdir və feedparser də Z versiyasıdır. Hansı versiya istifadə olunacaq?
  3. Python-un modulları axtardığı qovluqların siyahısını necə görə bilərəm?
  4. Sizin foo modulunuz var, onun daxilində modul çubuğu idxal olunub. foo modulunun yanında bar.py və bar/__init__.py faylları var Hansı moduldan istifadə olunacaq.
  5. Tikinti __name__ == "__main__" nə deməkdir və nə üçün istifadə olunur?

Dərslər

    Nəsillərə imkan verən əsas Müşahidə edilə bilən sinif yazın:

    1. **kvarqları keçərkən, müvafiq dəyərləri atributlar kimi daxil edin
    2. çap edərkən bütün ictimai atributların göstərildiyinə əmin olun
    >>> sinif X(Müşahidə edilə bilən): ... keçid >>> x = X(foo=1, bar=5, _bazz=12, name="Amok", rekvizit=("Bir", "iki")) >>> çap x X(bar=5, foo=1, name="Amok", rekvizit=("Bir", "iki")) >>> x.foo 1 >>> x.name "Amok" > >> x._bazz 12
  1. Bütün görünüşlərinə görə lüğət olacaq, lakin açarlara atribut kimi daxil olmaq imkanı verən bir sinif yazın.

    >>> x = DictAttr([("bir", 1), ("iki", 2), ("üç", 3)]) >>> x ( "bir": 1, "üç": 3, "iki": 2) >>> x["üç"] 3 >>> x.get("bir") 1 >>> x.get("beş", "itkin") "itkin" >>> x .one 1 >>> x.five Traceback (ən son zəng): ... AttributeError

    Çətinliklə 2-ci bənd: XDictAttr ana sinfini yazın ki, varisin açarı get_ metodunun mövcudluğu ilə dinamik şəkildə müəyyən edilsin. .

    >>> sinif X(XDictAttr): ... def get_foo(self): ... qaytar 5 ... def get_bar(self): ... qaytar 12 >>> x = X(("bir": 1 , "iki": 2, "üç": 3)) >>> x X: ( "bir": 1, "üç": 3, "iki": 2) >>> x["bir"] 1 > >> x.üç 3 >>> x.bar 12 >>> x["foo"] 5 >>> x.get("foo", "itkin") 5 >>> x.get("bzz", "itkin") "itkin"

    Nümunələrini qeyd edən və onların üzərində iterator interfeysi təmin edən sinif yazın

    >>> x = Reg() >>> x >>> y = Reg() >>> y >>> z = Reg() >>> Reg-də i üçün: ... çap i

Yuxarıdakı testlərə əsaslanaraq, lakin onlarla məhdudlaşmayan vahid testləri yazın.

Metsinflər və deskriptorlar

  1. Onlar nə üçün istifadə olunur, hansı arqumentləri alırlar, nəyi qaytarmalıdırlar: metodlar __new__ və __init__ sinifləri
  2. __new__ və __init__ metaklass üçün hansı arqumentləri alır?

    Atribut tipini tutan deskriptorları tətbiq edin

    >>> sinif Şəkil(obyekt): ... hündürlük = Mülk (0) ... genişlik = Mülk (0) ... yol = Mülk ("/tmp/") ... ölçüsü = Mülk (0) > >> img = Image() >>> img.height = 340 >>> img.height 340 >>> img.path = "/tmp/x00.jpeg" >>> img.path "/tmp/x00.jpeg " >>>

    Atribut tipini tutan baza sinfini (metaklassdan istifadə edərək) həyata keçirin

    >>> sinif Şəkil(Obyekt): ... hündürlük = 0 ... genişlik = 0 ... yol = "/tmp" ... ölçüsü = 0 >>> img = Şəkil() >>> img.height = 340 >>> img.height 340 >>> img.path = "/tmp/x00.jpeg" >>> img.path "/tmp/x00.jpeg" >>> img.path = 320 İzləmə (ən son sonuncu zəng): ... TypeError

    Sinif əsasında model üçün SQL sxemini (ANSI SQL) yarada biləcək əsas sinfi (metaklassdan istifadə etməklə) və deskriptorları həyata keçirin:

    >>> sinif Şəkil(Cədvəl): ... hündürlük = Tam() ... eni = Tam() ... yol = Str(128) >>> çap Image.sql() CƏDVƏL şəklini YARAT (hündürlükdə tam ədəd, eni tam, yol varchar(128))

    NULL, PRIMARY KEY, XARİCİ KEY, MƏHDUDLARIN həyata keçirilməsinə ehtiyac yoxdur. İki növü həyata keçirmək kifayətdir: Integer və Str.

  • Məqsəd 1- proqramlaşdırmanı öyrənməyi və Python dilini ilk dil kimi qəbul etməyi planlaşdıranlar üçün bağlantılar, materiallarla köməklik. Bunun göründüyü qədər çətin olmadığını göstərin.
  • Məqsəd 2- şərhlərdə bu mövzuda faydalı və maraqlı materiallara bağlantılar toplayın.

0. Mən uğur qazanacammı?

Əvvəldən mən “Salam Dünya”dan başqa bir şey edə bilməyəcəyimə şübhə edirdim. Mənə elə gəldi ki, proqramlaşdırma son dərəcə çətin və son dərəcə sehrlidir. Bundan əlavə, tam təhsildən yayındıracaq iş, hobbi, ailə var.

Mən qorxmamalıydım və bunu sizə tövsiyə etmirəm. Proqramlaşdırma yəqin ki, heç vaxt mənim əsas peşəmə çevrilməyəcək, lakin yaradıcı olmaq üçün əla bir yoldur. Bu bir şüşədə şahmat və Sivilizasiyadır.

Hər şey göründüyündən daha sadə və daha maraqlıdır.

1. Ədəbiyyat

Mark Lutz "Python Proqramlaşdırması"- bir çox forumlarda və kurslarda oxumaq tövsiyə olunur. Mənə yeni başlayanlar üçün çox təfərrüatlı və yüklü göründü. Çox oxu, az proqramla. Minimum Python dilini mənimsədikdən sonra onu oxumaq daha faydalıdır.

Mark Summerfield “Python 3 Proqramlaşdırma”- dinamik, əla nümunələr və tapşırıqlarla. Yalnız başlanğıcda hər şeyi çətinləşdirən lazımsız dərinlik olmadan. Bu kitabla başlamağı məsləhət görürəm, o, sizi çətinliklə qorxutmadan tez başa düşməyə kömək edəcək.

Bütün digər kitablar daha az faydalı və məlumatlı oldu. Ümumiyyətlə, mağazada və ya rəqəmsal versiyada bu mövzuda yaxşı ədəbiyyatı götürüb almaq çətindir.

2. İnternetdə nə oxumaq lazımdır

http://pythonworld.ru/ - sadə və başa düşülən dildə dilin əsasları haqqında danışır, tez-tez fırıldaqçı vərəq kimi istifadə olunur.

Daha iki aydan sonra ilk Django tətbiqimi yarada bildim. Amma əsas odur ki, indi müstəqil inkişaf və öyrənmək üçün kifayət qədər biliyə malikəm. Ən çətini bu nöqtəyə gəlməkdir.

Daha bir ay sonra mən GitHub-da iki layihəyə qoşuldum və onlarda iştirak edirəm. Təbii ki, mən yenə də sadə məsələləri həll edirəm, amma əvəzində məsləhət və təlim alıram.

Teqlər: python təlimi, proqramlaşdırma təlimi

Hər bir Python öyrənicisi yapışqan kod yazmalıdır. Diqqətinizə həyata keçirmək üçün bir neçə tapşırıq təqdim edirik (çox sadə deyil (birincisi istisna olmaqla) və çox mürəkkəb deyil).

Testlər və mənim həllərim (özünüzü sınamaq üçün) ilə bu tapşırıqlar üçün bir depo da var.

Funksiyanız üçün testlər aparmaq üçün ən asan yol testlər qovluğundan funksiya faylının sonuna kodu əlavə etməkdir.

İndi, əslində, vəzifələr:

Sadə arifmetik əməliyyatlar (1)

3 arqument götürən funksiya arifmetikasını yazın: ilk 2 ədəd rəqəmlər, üçüncüsü onlar üzərində yerinə yetirilməli olan əməliyyatdır. Üçüncü arqument + olarsa, onları əlavə edin; əgər - , onda çıxın; * - çoxaltmaq; / - bölmək (birinci saniyə). Əks halda, "Naməlum əməliyyat" sətirini qaytarın.

Artıq il (2)

1 arqument - il alan is_year_leap funksiyasını yazın və əgər il sıçrayış ilidirsə True, əks halda isə False qaytarır.

Kvadrat (3)

1 arqument götürən kvadrat funksiyasını yazın - kvadratın tərəfi və 3 dəyəri qaytarır (istifadə edərək): kvadratın perimetri, kvadratın sahəsi və kvadratın diaqonalı.

Mövsümlər (4)

1 arqument - ay nömrəsini (1-dən 12-yə qədər) götürən və bu ayın aid olduğu mövsümü (qış, yaz, yay və ya payız) qaytaran funksiya mövsümünü yazın.

Bank depoziti (5)

İstifadəçi illik 10% ilə illər müddətinə rubl məbləğində əmanət qoyur (hər il onun əmanətinin ölçüsü 10% artır. Bu pul əmanət məbləğinə əlavə olunur və gələn il də ona faizlər olacaq. ).

a və il arqumentlərini götürən və istifadəçinin hesabında olacaq məbləği qaytaran funksiya bankı yazın.

Sadə ədədlər (6)

1 arqument qəbul edən is_prime funksiyasını yazın - 0-dan 1000-ə qədər rəqəm və əsasdırsa True, əks halda isə False qaytarır.

Düzgün tarix (7)

3 arqument götürən tarix funksiyasını yazın - gün, ay və il. Təqvimimizdə belə bir tarix varsa True, əks halda isə Yanlış qaytarın.

XOR şifrələməsi (8)

2 arqument götürən XOR_cipher funksiyasını yazın: şifrələnəcək sətir və açarlı sətirin simvollarını XOR etməklə şifrələnmiş sətri qaytaran şifrələmə açarı. Şifrələnmiş sətir və açardan istifadə edərək orijinal sətri bərpa edən XOR_uncipher funksiyasını da yazın.

Python developer vəzifəsi üçün müsahibəyə hazırlaşır

Hazırlıqda istifadə olunan materiallar: Python müsahibəsi üçün həyati bələdçi, olmalıdır Python müsahibə sualları, 15 əsas Python müsahibə sualları, Python müsahibə sualları və cavabları

Bu gün Python proqramçılarının sayı artmaqda davam edir, lakin onlar üçün iş yerlərinin sayı o qədər də sürətlə artmır. Müasir bir tərtibatçı istənilən mövqeyə düşmək üçün rəqabətə davamlı olmalıdır. Biz işəgötürənin müsahibə zamanı qaldıra biləcəyi mövzular və suallarla məqalə hazırlamışıq və onları kiçik izahatlarla tamamlamışıq – mahiyyətcə bunlar həlli ilə Python proqramlaşdırma problemləridir. Material nəzərdən keçirməyə davam edənlər üçün faydalı olacaq və yeni başlayanlara ilk addımlarını harada atacaqlarını və nələrə diqqət etməli olduqlarını tapmağa kömək edəcək. Bunu bir növ mayak kimi düşünün.

Siyahılarla işləmək

Lambda İfadələri, Siyahı Generatorları və Generator İfadələri

Lambda ifadələri- bir sətirli anonim funksiyalar yaratmaq üçün qısa yol üsulu. Onların sadəliyi çox vaxt (lakin həmişə deyil) kodu klassik funksiya bəyannamələrindən daha təmiz və oxunaqlı edir. Digər tərəfdən, eyni sadəlik lambda ifadələrinin imkanlarını və tətbiq sahələrini məhdudlaşdırır.

Generatorların siyahısı siyahıları yaratmaq üçün qısa sintaksisi təmin edin. Onlar hər bir elementin başqa ardıcıllığın və ya iteratorun elementləri üzərində bəzi əməliyyat(lar)ın nəticəsi olduğu siyahıları qurmaq üçün istifadə olunur. Siyahı generatorları üzvləri müəyyən bir şərti ödəyən elementlərin alt ardıcıllığını yaratmaq üçün istifadə edilə bilər. Python-da siyahı generatorları daxili map() və filter() funksiyalarına unikal alternativdir.

map() və filter() funksiyaları və siyahı generatorları olan lambda ifadələri oxşardır, ona görə də bu alətlərdən birini seçmək subyektivdir və hər bir halda fərdi olur. Ancaq qeyd etmək lazımdır ki, siyahı generatorları bir qədər sürətlidir - lambda funksiyasının çağırılması yeni yığın çərçivəsi yaradır.

Generator ifadələri sintaktik və funksional cəhətdən siyahı generatorlarına bənzəyir, lakin onların mexanizmləri və tətbiq sahələri arasında mühüm fərqlər var. Generator ifadəsi və ya siyahı generatoru üzərində təkrarlamaq hər şeyi eyni edəcək, lakin siyahı generatoru əvvəlcə yaddaşda bütün siyahını yaradacaq, generator ifadəsi isə lazım olduqda tez elementlər yaradacaq. Generator ifadələri çoxlu və hətta sonsuz sayda ardıcıllıqla istifadə edilə bilər. Və tələb üzrə dəyərlər yaratmaq performansı yaxşılaşdırır və yaddaş istifadəsini azaldır. Bununla belə, qeyd etmək lazımdır ki, Python-un standart siyahı üsulları generatorun özündə deyil, generatorun çıxışında istifadə edilə bilər.

Siyahı ilə tuple arasındakı fərq nədir?

Əsas fərq: siyahı dəyişə bilər, lakin bir dəst dəyişə bilməz. Tuple ilə işləmək siyahılardan daha sürətlidir. Daimi dəyərlər toplusunu təyin etməlisinizsə və onunla etməli olduğunuz hər şey onun elementləri üzərində təkrarlamaqdırsa, siyahı əvəzinə bir dəst istifadə etmək daha məntiqlidir. Lüğət siyahıdan fərqli olaraq lüğətlər üçün də açar rolunu oynaya bilər.

Ən qabaqcıl namizədlər deyəcəklər ki, kortejlər heterojendir və onların istifadəsi C proqramlaşdırma dilində struct istifadəsinə bənzəyir Lists adi massivlərə bənzəyir.

Kodun sazlanması və sınaqdan keçirilməsi

Python-da vahid testi üçün hansı yanaşmadan istifadə edirsiniz?

Bu sualın əsas cavabı Python çərçivəsinin istifadəsi ilə bağlıdır - unittest.

Unittest test avtomatlaşdırılmasını, testləri qurmaq və başa çatdırmaq üçün kodu paylaşmağı, testləri qruplaşdırmaq və testləri hesabat çərçivəsindən ayırmağa imkan verir. Unittest modulu test paketi üçün bu keyfiyyətləri dəstəkləməyi asanlaşdıran siniflər təqdim edir.

Sizdən vahid test strukturunun əsas elementlərini təsvir etməyiniz xahiş oluna bilər, yəni:

  • sınaq dəzgahı (sınaq qurğusu);
  • sınaq işi;
  • test dəsti;
  • sınaq qaçışı.

İteratorlar

İterator nədir?

İterator kolleksiyanın elementlərinə (massiv və ya konteyner) girişi və naviqasiyanı təmin edən interfeysdir. İteratorların müxtəlif sistemlərdə fərqli ümumi adları ola bilər. Verilənlər bazası idarəetmə sistemlərində iteratorlara kursorlar deyilir. Ən sadə halda, aşağı səviyyəli dillərdə iterator göstəricidir.

İterator və generator arasındakı fərq nədir?

Bu terminlər bir-biri ilə sıx bağlıdır (hər hansı bir generator iteratordur), onlar tez-tez qarışdırılır, bu da bəzən anlaşılmazlığa səbəb olur. İterator daha ümumi bir anlayışdır. Bu, müəyyən edilmiş iki metodu olan bir obyektdir: __next__ və __iter__ . Digər tərəfdən, generator bir iteratordur. Amma əksinə deyil. Generator funksiyanın gövdəsindəki yield açar sözündən istifadə etməklə əldə edilə bilər.

Def kvadratlar(start, stop): diapazondakı i üçün (başla, dayandır): gəlir i * i generator = kvadratlar(a, b)

GIL

GIL konsepsiyası ondan ibarətdir ki, prosessor eyni anda yalnız bir ipi yerinə yetirə bilər. Bu, ayrı-ayrı dəyişənlər üçün mövzular arasında rəqabət olmaması üçün edilir. İcraedici ipin bütün mühitə çıxışı var. Python-da iplərin tətbiqinin bu xüsusiyyəti iplərlə işləməyi xeyli asanlaşdırır və müəyyən bir ip təhlükəsizliyini təmin edir.

Arqumentləri ötürmək

Dəyişməz obyektlər necə ötürülür?

Dəyişməz obyektlər dəyərlə ötürülür. Tam ədədlər və sətirlər kimi obyektlər obyektlərin surətləri kimi deyil, obyekt istinadları kimi ötürülür.

Dəyişən obyektlər necə ötürülür?

Dəyişən obyektlər “göstərici ilə” ötürülür. Siyahılar və lüğətlər kimi obyektlər də obyekt istinadları kimi ötürülür ki, bu da massivlərə göstəricilərin C-də necə ötürülməsinə çox bənzəyir - dəyişən obyektlər C-dəki massivlər kimi birbaşa funksiya daxilində dəyişdirilə bilər.

>>> def f(a): # Keçirilmiş obyektə a adı təyin edilir... a = 99 # Yalnız yerli dəyişən dəyişdirilir... >>> b = 88 >>> f(b)# İlkin olaraq a və b adları eyni nömrəyə aiddir 88 >>> print(b) # b dəyişəni dəyişməyib 88

Bu fraqmentdə f(b) funksiyası çağırıldıqda a dəyişəninə obyekt 88 təyin edilir, lakin a dəyişəni yalnız çağırılan funksiya daxilində mövcuddur. Funksiya daxilində a dəyişəninin dəyişdirilməsi funksiyanın çağırıldığı mühitə təsir etmir - sadəcə olaraq çağırış zamanı tamamilə yeni a obyekti yaradır.

Aşağıdakı kodda append() üçün ikinci çağırışdan sonra nə çıxacaq?

>>> def append(list=): ... # siyahının uzunluğunu siyahıya əlavə edin... list.append(len(list)) ... siyahısı qaytarın ... >>> əlavə edin([" a"," b"]) ["a", "b", 2] >>> >>> append() # arqumentsiz çağırış siyahının standart dəyərindən istifadə edir >>> >>> append() # Lakin əlavə arqumentsiz yenidən çağırıldıqda nə baş verir?

Funksiya arqumenti üçün standart dəyər ifadə olduqda, funksiya çağırılanda həmişə deyil, yalnız bir dəfə qiymətləndirilir. Beləliklə, siyahı arqumenti boş massivdə inisiallaşdırıldıqdan sonra, arqumentsiz funksiyaya sonrakı çağırışlar əvvəlcə inisiallaşdırılan eyni massivdən istifadə etməyə davam edəcək.

>>> append() # arqumentsiz ilk zəng standart dəyərdən istifadə edir >>> append() #, lakin sonra... >>> append() # ardıcıl zənglər standart siyahını genişləndirir >>> append() # və belə davam edir...

Orada təsvir edilən arzuolunmaz davranışın qarşısını almaq üçün əvvəlki sualda əlavə metodunun tətbiqini necə dəyişə bilərəm?

Problemi həll edəcək əlavə metodunun alternativ tətbiqi var:

>>> def append(list=None): ... əgər siyahı Yoxdursa: list = # Siyahının uzunluğunu artırır... list.append(len(list)) siyahısı qaytarır ... >>> append( ) >> >əlavə et()

Müəyyən kateqoriyalardan kənar suallar

Python-da bir sətir daxilində iki dəyişənin dəyərlərini necə dəyişdirə bilərsiniz?

Sadə bir misala baxaq:

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

Bir çox digər proqramlaşdırma dilləri X və Y dəyərlərini əvəz edərkən belə bir şey etməyinizi tələb edir:

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

Lakin Python-da bunu belə bir kod sətri ilə etmək imkanı var:

>>> x,y = y,x >>> x,y (“Y”, “X”)

Aşağıdakı son ifadədən nə çıxacaq?

>>> flist = >>> üçün diapazonda(3): ... flist.append(lambda: i) ... >>> # nə çıxacaq?

Python-da hər hansı bağlamada dəyişənlər adla əlaqələndirilir. Beləliklə, yuxarıdakı kod sətri aşağıdakıları çıxaracaq:

>>> flist = >>> diapazondakı i üçün(3): ... flist.append(lambda i = i: i) ... >>>

"Özü" açar sözünün məqsədi nədir?

Öz açar sözü obyektin nümunəsinə istinad edən dəyişəndir. Bir sinif yaradıldıqda, eyni sinif tipli obyektə açıq istinad yoxdur. Buna görə də, cari sinif və ya obyektə istinad etmək üçün Python self açar sözündən istifadə edir.

Class İstifadəçi: def __init__(self): self.name = "İvan İvanov" self.age = 16 user_obj = User() user_obj.name # self.name dəyər kimi "İvan İvanov" ehtiva edir

"Gəlir" açar sözünün məqsədi nədir?

Yeld açar sözü istənilən funksiyanı generatora çevirə bilər. Açar sözün generator obyektini qaytarması fərqi ilə, qaytarma ifadəsinə bənzər işləyir. Funksiya həmçinin yield açar sözünə çoxlu zənglər edə bilər.

Def testgen(indeks): iş günləri = ["günəş","bazar ertəsi","çərşənbə axşamı","çərşənbə","thu","fri","sat"] gəlir həftə içi gün gəlir iş günləri gün = testgen(0) çap növbəti( gün), növbəti(gün) #çıxış: günəş mon

__init__.py nədir? Başqa bir kataloqdan bir sinfi necə idxal etmək olar?

Init__.py əsasən Python paketlərini işə salmaq üçün istifadə olunur.

Lstm_m qovluğundakı __init__.py faylı Python tərcüməçisinə bu qovluğa Python paketi kimi baxılmalı olduğunu bildirir.

Başqa bir kataloqdan bir sinfi necə idxal etmək olar?

Adətən __init__.py boş fayldır. Və əgər run.py faylında lstm.py istifadə etməliyiksə, onda onu aşağıdakı kimi idxal etmək lazımdır:

lstm_m import lstm-dən

Əlavə olaraq modul qovluğunda idxal üçün __init__.py adlı fayl olmalıdır.

Python-da hansı daxili növlər var?

Dəyişən və dəyişməz daxili Python növləri var.

Dəyişən:

  • siyahılar;
  • çoxluq;
  • lüğətlər.

Dəyişməz:

  • simlər;
  • tuples;
  • nömrələr.

Xahiş edirik unutmayın ki, yalnız əsas növlər yuxarıda verilmişdir. Əslində, bunların altıdan çoxu var.

Python-da docstring nədir?

Python sənədləşdirmə sətri (docstring) funksiyaları, modulları və sinifləri sənədləşdirmək üçün bir yoldur. Dizayn standartları rəsmi internet saytında.

Bir ədədi sətirə necə çevirə bilərəm?

Rəqəmi sətirə çevirmək üçün siz adətən str() daxili funksiyasından istifadə edirsiniz, baxmayaraq ki, "(0:d)".format(nömrə) və "%d"%nömrə kimi başqa yollar var. Əgər siz onluq ədədi səkkizlik (səkkizlik - səkkizlik) və ya onaltılıq (hex - hexadecimal) rəqəminə çevirmək istəyirsinizsə, müvafiq olaraq oct() və ya hex() funksiyasından istifadə edin.

Xrange və diapazon arasındakı fərq nədir?

xrange() funksiyası xrange obyektini qaytarır, range() isə siyahı qaytarır və funksiyanın ölçüsündən asılı olmayaraq eyni həcmdə yaddaşdan istifadə edir.

Bir obyektin metodlarını və ya atributlarını necə görə bilərəm?

dir(x) əmri ona ötürülən hər hansı obyekt üçün atribut adlarının çeşidlənmiş siyahısını qaytarır. Heç bir obyekt göstərilməyibsə, dir() cari əhatə dairəsindəki adları qaytarır.

Əlavə olaraq

Əgər ingilis dilində danışırsınızsa, müsahibədən əvvəl biliklərinizi yoxlamaq üçün onlayn testlərdən keçməyi tövsiyə edirik.

Bizdən Python öyrənmək üçün materiallar topluları: , . Qısa da. Problemləri həll etməyi unutmayın: bunu edə biləcəyiniz yer budur.

Nəticə

Bu məqalədə təqdim olunan suallar və məsləhətlər abituriyentləri müsahibəyə hazırlamaqda çox dəyərli köməkçi ola bilər. Ümid edirik ki, tərtibatçılar onları işəgötürənlə görüşməzdən əvvəl öz biliklərini sınaqdan keçirmək üçün faydalı tapacaqlar. Ancaq unutmamalıyıq ki, yuxarıda təqdim olunan bütün suallar konkret strategiyanın bir hissəsi kimi vəzifəyə namizədlərin seçilməsi üçün bir neçə vasitədən biridir. Diqqətlə və hərtərəfli hazırlayın. Uğurlar!