Praktilised püütoni ülesanded. Pythoni programmeerimiskeel – kust alustada? Metaklassid ja deskriptorid

Populaarsem kui kunagi varem, seda kasutatakse kõikjal, kus see on võimalik, alates taustaserveritest kuni esiosa mängude arendamiseni jne. Pythonit peetakse õigustatult üldotstarbeliseks keeleks ja sellest on kiiresti saamas kohustuslik tööriist iga endast lugupidava programmeerija arsenalis.

Kuid Python pole populaarne ainult sellepärast, et see on populaarne. Seda on lihtne õppida, see loeb nagu pseudokoodi ja on väga dünaamiline. Uue keele õppimine võib aga olla üsna suur väljakutse, et leida õppimiseks õige koht ja inimesed, kellelt uut teavet õppida, lahendavad poole probleemist. Meie juhend aitab teid selles. See on teie lollikindel plaan, mis muudab Pythoni õppimise lihtsamaks ning muudab õppimise lõbusaks ja huvitavaks.

Ülesanne 1: alustage põhitõdedest

Selle kirjutamise seisuga on Pythonil kaks peamist versiooni: Python 2.7 ja Python 3.2. Millise versiooni valite õppima, pole nii oluline, kuna erinevused on minimaalsed, eriti algaja jaoks. Kuid peaksite teadma, et Python 2 toetab rohkem kolmandate osapoolte teeke, samas kui Python 3 keskendub peamiselt arendajatele, kes töötavad keele täiustamise nimel. Valik on teie. Kui mõne õpetuse kood ei tööta nii, nagu ette nähtud, veenduge, et kasutate selle õpetuse sobivat Pythoni versiooni.

Wikibooks on alati olnud usaldusväärne allikas millegi uue õppimiseks ja Python pole erand. Siit leiate suure hulga õpetusi, mis aitavad teil Pythoniga paremini tuttavaks saada. Tehnilist žargooni pole palju ja saate üsna kiiresti koodi kirjutama hakata, mis on kindlasti rahuldust pakkuv kogemus. Seetõttu soovitan seda saiti kui head kohta oma Pythoni teekonna alustamiseks.

Te ei leia paremat teabeallikat kui ametlik dokumentatsioon saidilt python.org. Kui aga soovite siit kohe alustada, ei pruugi see olla hea mõte.

Siinne sisu on tehnilisem kui vikiraamatud, millest on omakorda hiljem keeleõppe edenedes kasu. Algajale võib sisu tunduda keeruline ja see osutub takistuseks selle lihtsa ja ilusa keele õppimisel.

Algajate jaoks on Python 2 ja Python 3 kõige märgatavam erinevus tõenäoliselt Python 2 võime kasutada printimist ilma sulgudeta. Python 3-s on sulud nõutavad, see on kõik.

Ülesanne 2: õpetused ja ekraanisaated

NewBostoni esitusloend on alati suurepärane ja saate õppida palju keeli. "Bucky" on suurepärane juhendaja, teda on huvitav kuulata, kuna ta on leidnud tasakaalu naljaka ja informatiivse olemise vahel, mida ta üritab edasi anda, on alati lihtne mõista. Soovitan vaadata kõiki tema esitusloendeid – eriti Pythoni esitusloendeid. Teil ei pea olema programmeerimisteadmisi, pärast tema videoõpetuste vaatamist mõistate keelt hästi.

Nettuts+ Python nullist

Hea sissejuhatus Pythonile on Giles Lavelle'i kursus. Nagu TheNewBostoni seeria puhul, eeldab Lavelle, et teil pole programmeerimiskogemust.

Kui soovite näha pärismaailma rakendusi või mõista Pythoni veebiarendust, on see seeria ideaalne.

Selles ekraanisaates loote Django Pythoni raamistiku abil dünaamilise veebisaidi nullist.

Pythoni ekraanisaade saidilt ShowMeDo

StackOverflow pole tuntud ainult algajate, vigade ja probleemide poolest.

ShowMeDol on tohutu Pythoniga seotud videote kataloog. Kuigi saidil ei pruugi tunduda parim kasutajaliides, on sellel tohutul hulgal kasulikke videoid, alates teabest algajatele kuni Pythoni kasutamise täiustatud tehnikateni. Peaksite seda saiti kindlasti vaatama.

Looge Pythoni robot, mis suudab mängida veebimänge

Selles õpetuses saate tutvuda konkreetse materjaliga, ma ei soovita seda absoluutselt algajatele. Siiski arvan, et see on mainimist väärt. Selles õpetuses näitab Chris Kiehl teile, kuidas luua väga huvitav Pythoni robot, mis mängib teie jaoks lihtsat mängu. Õpetus näitab teile Pythoni võimsust; see võib olla kasulik igapäevaste ülesannete lahendamisel, mida saab kasutada arvuti haldamiseks.

3. ülesanne: tasuta e-raamatud

Hea raamat on suureks abiks millegi uue õppimisel ning Pythonil on hämmastav ja sõbralik kogukond, mille tulemuseks on suur valik tasuta e-raamatuid. Allpool näete väikest nimekirja parimatest raamatutest. Võite alla laadida igaühe tasuta elektroonilise versiooni või osta trükitud väljaande (või annetada), kui soovite autorit toetada, olen kindel, et nad hindavad seda.

Õppige Pythonit raskel viisil

Vaatamata raamatu pealkirjale "Pythoni õppimise mitte lihtne lähenemine" on Pythoni õppimine endiselt imelihtne – nagu peabki! Selles raamatus annab Zed A. Shaw teile täieliku ja üksikasjaliku juhendi probleemide ja näidetega, millega saate oma programmeerimisoskusi testida. Raamat on kirjutatud mitteametlikus keeles, kuid selles on palju detaile üksikasjalikult kirjeldatud, nii et lugemisega ei teki raskusi ja tulemus ei lase end kaua oodata.

Mõelge Pythonile: kuidas mõelda nagu arvutiteadlane

Te ei leia paremat teabeallikat kui ametlik python.org dokumentatsioon.

Nagu alapealkiri ütleb: "Mõeldes nagu programmeerija", leiate siit palju teoreetilist materjali. Algajad võivad pettuda ja raamatut raskeks pidada, kuid uskuge mind, see on lugemist väärt, sest leiate teavet algoritmiteooria ja kõrgetasemeliste kontseptsioonide kohta.

Leiutage Pythoniga

Kui olete rohkem huvitatud praktilisest osast, on oma mängu loomine tõeliselt rahuldust pakkuv kogemus! Selles raamatus eeldab Al Sweigart, et teil pole Pythonist palju teadmisi, ja aitab teil mängu luua. Kuigi see raamat räägib mängude arendamisest, sobib see üsna hästi ka päris algajatele. Hiljem selles artiklis mainisin ma sarnast raamatut, kuid see nõuab Pythoni tugevat valdamist. Kui tunned, et valdad keelt hästi, on mõni teine ​​raamat sulle informatiivsem allikas.

Django raamat

Kui soovite Pythonis veebiarendust õppida, kasutate suure tõenäosusega Django raamistikku. Te ei pruugi Django raamistikuga tuttav olla, kuid selle raamatu lugemiseks peaksite Pythonist hästi aru saama. Selles sisalduv teave on iga algaja veebiarendaja jaoks asendamatu.

Raamatud Pythonis

Kui kõigist ülaltoodud raamatutest ei piisa või olete huvitatud konkreetsest teemast, järgige seda linki. Poisid saidilt python.org on koostanud ulatusliku raamatute loendi, sorteerides need keerukuse ja teemade järgi.

Ülesanne 4: tutvuge StackOverflow'ga

Tuhanded arendajad on kogenud samu probleeme, millega peate silmitsi seisma. StackOverflow on suurepärane teabeallikas, kust iga arendaja saab oma probleemile lahenduse leida. Kui leiate mõne muu vea ja teil pole aimugi, kuidas seda parandada, otsige vastust StackOverflow'st. Tõenäoliselt on seal juba teavet selle kohta, kuidas teised inimesed sarnase probleemi lahendavad.

Kuid StackOverflow pole tuntud ainult algajate, vigade ja probleemide poolest; See sait on täis väga nutikaid inimesi, kes soovivad aidata – õppige neilt!

Enamikku siin leiduvatest nippidest ja näpunäidetest ei leidu ühestki õpetusest ning need on Pythoni edasijõudnutele või kesktaseme kasutajatele väga kasulikud.

Ülesanne 5: Euleri projekt


Projekt Euler (hääldatakse "Oil-er", pidage seda meeles, et te tulevikus nägu ei kaotaks) on üks minu lemmiksaite Kui olete konto loonud, saate sellel veebisaidil osaleda ja lahendada ligikaudu 400 väljakutset. Iga ülesanne on 50 protsenti matemaatikat, 50 protsenti programmeerimist, minu arvates kõige õigem lähenemine nende ainete õppimisele.

Ülesanded algavad lihtsate ülesannetega, et testida oma keeleoskuse taset, misjärel keerukus suureneb ja lõpuks tekivad probleemid, mida isegi kogenud programmeerija ei suuda lahendada. Lõpuks peate leidma kõige tõhusama algoritmi - kui teil pole aega, oodake õige vastuse arvutamiseks mitu tundi.

Miski ei muuda teid kiiremini programmeerijaks kui projekti Euleri probleemidele kõige tõhusama lahenduse leidmine.

Kui teil õnnestub mõnele teisele probleemile lahendus leida, avaneb teile foorumi leht, kus inimesed arutavad omavahel selle probleemi lahendusi ja ideid. Enamik neist lahendustest on Pythonis. See on võti, mis aitab teil programmeerimisoskusi märkimisväärselt parandada. Kui keegi on leidnud kiirema lahenduse, siis ärge kartke võtta aega selle analüüsimiseks, et saaksite aru, millised punktid vajavad ümbertöötamist. Aja jooksul hakkate kõikidest nippidest aru saama ja Pythoni keeleoskus paraneb, tulemus ei lase end kaua oodata.

Lisaks sellele on mitmeid informatiivseid ajaveebi, kust saate Project Euleri Pythoni probleemidele lahendusi leida. Kui jääd mõne probleemiga jänni, siis pole hullu, kui vaatad teiste arendajate lahendusi, kõige tähtsam on neilt midagi uut õppida. Siin on kaks minu lemmikblogi:

Ülesanne 6: Loo mäng

Peale oma mängu loomise on ainult mõned asjad, mis võivad olla lõbusad.

Peale oma mängu loomise on ainult mõned asjad, mis võivad olla lõbusad. See võib olla üsna järsk õppimiskõver, kuid see on kindlasti seda väärt. PyGame on Pythonis mängude arendamise kuulsaim raamatukogu ja teil ei ole selle kohta tasuta õpetusi leida. Allpool on neist parimad.

Ametlik PyGame'i dokumentatsioon

Nagu Pythoni õpetuste puhul, on PyGame'i arendajad koostanud dokumentatsiooni – sissejuhatuse. Materjal on täis tehnilist terminoloogiat juhuks, kui soovite kohe mänge arendama hakata. Kuid nagu alati, on arendaja dokumentatsioon parim teabeallikas; sellepärast soovitan seda saiti.

Leiutage Pythoniga (koos PyGame'iga)

AI Sweigarti tasuta e-raamat tutvustab lugejale PyGame'i raamatukogu, isegi kui te sellest raamatukogust midagi ei tea, saate pärast selle lugemist paar mängu teha. Lihtsad mängud on soovi korral suurepärane alus oma projekti loomiseks. Sweigart annab õppeprotsessi abistamiseks oma koodi kohta üksikasjalikke kommentaare.

See on veel üks TheNewBostoni esitusloend. Suurepärane sissejuhatus PyGame'i. Jällegi, te ei pruugi selle raamatukoguga tuttav olla, kui hakkate PyGame'i lugema, kuid erinevalt InventWithPythonist ei saa te täisväärtuslikku mängu.

Ülesanne 7: uurige populaarseid raamatukogusid ja tööriistu

Python on üldotstarbeline keel, millega saab teha peaaegu kõike; Meie käsutuses on lõputu hulk raamatukogusid ja tööriistu. Allpool on nimekiri kõige populaarsematest.

PyPy

Kui soovite koguda teavet HTML-lehtedelt... BeautifulSoup teeb kõik vajaliku ja säästab tohutult aega.

Kui teete asju, mis nõuavad palju protsessori ressursse ja tunnete, et Python tarbib neid ressursse, tuleb PyPy appi. PyPy on Pythoni alternatiivne kompilaator, mis võib arvutamist kiirendada.

NumPy + SciPy

Neid teeke kasutatakse tavaliselt koos (SciPy oleneb NumPyst). Kui peate tegema matemaatiliste arvutuste või teadusuuringutega seotud töid, on need raamatukogud suurepärased abilised. NumPy ja SciPy laiendavad Pythoni matemaatilisi funktsioone ja võimalusi, mille tulemusena kiirendavad oluliselt ülesannete lahendamist.

Ilus supp

BeautifulSoup on täiesti hämmastav. HTML-lehtedelt teabe sõelumine võib olla üsna tüütu ja masendav. BeautifulSoup teeb kõik teie eest ja säästab teie aega tohutult. Soovitan seda raamatukogu väga, sellega on lõbus töötada.

Pythoni pilditeek

Pildikogu (PIL) sobib suurepäraselt iga pilditöötlusülesande jaoks. Kui on vajadus pildiga mingil viisil suhelda, aitab PIL suure tõenäosusega seda ülesannet täita.

Django

Nagu ma selles artiklis mainisin, kui olete huvitatud veebiarendusest, on teie valik Django raamistik. See on kõige populaarsem Pythoni raamistik ja sellel on tohutult palju koolitusressursse.

8. väljakutse: panustage avatud lähtekoodiga projektidesse

Keele korraliku mõistmise korral on teiste inimeste koodide lugemise ja navigeerimise oskus oluline oskus ning see osutub ka suurepäraseks õppimisviisiks.

Seetõttu on avatud lähtekoodiga projektid nii populaarsed. Githubi ja Bitbucketi veebisaidid on koht, kust peaksite alustama. Ärge muretsege, kui inimesed teie koodi kritiseerivad, ei tohiks te kohe nendesse projektidesse panustada. Saate alati töötada selle projekti eraldi haruga, välja mõelda, kuidas see töötab, ja teha sellega, mida soovite. Kui leiate järsku asju, mis vajavad parandamist, suurepärane! Tehke seda ja esitage oma parandused. Selleks on avatud lähtekoodiga projektid.

Järeldus

Loodan, et suutsin pakkuda teile Pythoni õppimiseks tugeva aluse. Igaks juhuks, kui unustasin ressursse mainida, andke mulle allolevates kommentaarides teada, et teisi kasutajaid aidata!

Minu käest küsitakse perioodiliselt Pythoni teemade testülesannete kohta. Otsustasin küsimused kokku võtta ja ühte kohta kirja panna. Ma ei kasuta neid küsimusi ja ülesandeid intervjuudel, küll aga koolitusel.

Andmetüübid, põhikonstruktsioonid

  1. Kuidas saada nimekirja kõigist objekti atribuutidest
  2. Kuidas hankida objekti kõigi avalike atribuutide loend
  3. Kuidas saada objektil olevate meetodite loendit
  4. Milline "maagiline" muutuja salvestab abi sisu?
  5. Kortereid on kaks, kolmas saadakse kahe esimese konkatenatsioonina
  6. Kortereid on kaks, hankige kolmas kahe esimese korteeži ainulaadsete elementide ühendusena
  7. Miks on nii, et kui loendit tsüklis muudetakse, kasutatakse x jaoks lst[:], mis tähendab [:] ?
  8. Seal on kaks ühepikkust loendit, üks sisaldab võtmeid, teine ​​väärtusi. Tee sõnaraamat.
  9. Seal on kaks erineva pikkusega loendit, üks sisaldab võtmeid, teine ​​väärtusi. Tee sõnaraamat. Võtmete puhul, millel pole väärtusi, kasutage väärtuseks None. Ignoreeri väärtusi, mille jaoks võtmeid pole.
  10. Sõnastik on olemas. Pöörake see ümber. Need. paaride võti: väärtuste vahetus - väärtus: võti.
  11. Unicode'is on string, hankige 8-bitine string utf-8 ja cp1251 kodeeringus
  12. Cp1251 kodeeringus on string, hankige Unicode'i string

Funktsioonid

    Kirjutage funktsioon, millele saab argumente edastada kas loendis/korteris või ükshaaval. Funktsioon liidab kõik argumendid.

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

    Kirjutage tehasefunktsioon, mis tagastab argumendiga liitmisfunktsiooni.

    >>> add5 = liitmine(5) # liitmisfunktsioon tagastab liitmisfunktsiooni 5-ga >>> add5(3) # tagastab 3 + 5 = 8 8 >>> add5(8) # tagastab 8 + 5 = 13 13 >> > add8 = liitmine(8) >>> add8(2) # tagastab 2 + 8 = 10 10 >>> add8(4) # tagastab 4 + 8 = 12 12

    Kirjutage valikud tavaliste "sisemiste" ja anonüümsete lambda funktsioonidega.

    Kirjutage tehas sarnaselt sammuga 2, kuid tagastab selliste funktsioonide loendi

    >>> lisad = add_range(0, 5) # liitmisfunktsioonide loend vahemikus 0 kuni 5 kaasa arvatud

    need. sarnased

    Kirjutage kaardi analoog:

    • esimene argument on kas funktsioon või funktsioonide loend
    • teine ​​argument on argumentide loend, mis edastatakse funktsioonidele
    • eeldatakse, et need funktsioonid on ühe argumendi funktsioonid
    >>> minu kaart(, ) [(1, 2, 3), (2, 3, 4), (3, 4, 5)]

    sel juhul on "laiendatud" kirje järgmine: [(add0(1), add0(2), add0(3)), (add1(1), add1(2), add1(3)), (add2( 1), lisa2(2), lisa2(3)]

Iteraatorid

    Kirjutage generaatori funktsioonitsükkel, mis tagastaks tsüklilise iteraatori.

    >>> i = iter() >>> c = tsükkel(i) >>> c.next() 1 >>> c.next() 2 >>> c.next() 3 >>> c.next () 1

    Kirjutage ahela generaatori funktsioon, mis kordab läbitud objekte järjestikku (suvaline arv)

    >>> i1 = iter() >>> i2 = iter() >>> c = kett(i1, i2) >>> c.next() 1 >>> c.next() 2 >>> c. next() 3 >>> c.next() 4 >>> c.next() 5 >>> c.next() Traceback (viimane kõne viimane): ... StopIteration

Kirjutage funktsioonide ja iteraatorite doktestid

Moodulid

  1. Meil on imporditud moodul foo, kuidas saame teada faili füüsilise tee, kust see imporditakse?
  2. Foo moodulist impordite feedparser mooduli. Söödaparseri versioon X on kogu süsteemi hõlmavas saidipakettide kataloogis, versioon Y on mooduli foo kõrval PYTHONPATH keskkonnamuutuja ja seal on ka feedparser, versioon Z. Millist versiooni kasutatakse?
  3. Kuidas ma saan näha kataloogide loendit, kust Python mooduleid otsib?
  4. Teil on moodul foo, selle sees imporditakse mooduli riba. Foo mooduli kõrval on failid bar.py ja bar/__init__.py Millist moodulit kasutatakse.
  5. Mida tähendab konstruktsioon __name__ == "__main__" ja milleks seda kasutatakse?

klassid

    Kirjutage vaadeldav põhiklass, mis võimaldab järglastel:

    1. **kwargsi edastamisel sisestage atribuutidena vastavad väärtused
    2. veenduge, et printimisel kuvatakse kõik avalikud atribuudid
    >>> klass X (jälgitav): ... läbima >>> x = X(foo=1, bar=5, _bazz=12, name="Amok", props=("Üks", "kaks")) >>> prindi x X(bar=5, foo=1, name="Amok", props=("Üks", "kaks")) >>> x.foo 1 >>> x.name "Amok" > >> x._bazz 12
  1. Kirjutage klass, mis näiliselt oleks sõnastik, kuid võimaldaks võtmetele ligipääsu atribuutidena.

    >>> x = DictAttr([("üks", 1), ("kaks", 2), ("kolm", 3)]) >>> x ( "üks": 1, "kolm": 3, "kaks": 2) >>> x["kolm"] 3 >>> x.get("üks") 1 >>> x.get("viis", "puuduvad") "puuduvad" >>> x .one 1 >>> x.five Traceback (viimane kõne viimane): ... AttributeError

    Punkt 2 komplikatsiooniga: kirjutage vanemklass XDictAttr nii, et järglase võti oleks dünaamiliselt määratud meetodi get_ olemasoluga .

    >>> klass X(XDictAttr): ... def get_foo(self): ... return 5 ... def get_bar(self): ... return 12 >>> x = X(("üks": 1 , "kaks": 2, "kolm": 3)) >>> x X: ( "üks": 1, "kolm": 3, "kaks": 2) >>> x["üks"] 1 > >> x.three 3 >>> x.bar 12 >>> x["foo"] 5 >>> x.get("foo", "missing") 5 >>> x.get("bzz", "kadunud") "kadunud"

    Kirjutage klass, mis registreerib oma eksemplarid ja pakub neile iteraatoriliidest

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

Kirjutage ühiktestid ülaltoodud testide põhjal, kuid mitte ainult.

Metaklassid ja deskriptorid

  1. Milleks neid kasutatakse, milliseid argumente nad saavad, mida nad peaksid tagastama: meetodid __new__ ja __init__ klassid
  2. Milliseid argumente saavad __new__ ja __init__ metaklassi jaoks?

    Rakendage deskriptorid, mis hõivavad atribuudi tüüpi

    >>> klass Pilt(objekt): ... kõrgus = omadus(0) ... laius = omadus(0) ... tee = omadus("/tmp/") ... suurus = omadus(0) > >> img = Pilt() >>> img.height = 340 >>> img.height 340 >>> img.path = "/tmp/x00.jpeg" >>> img.path "/tmp/x00.jpeg " >>>

    Rakendage baasklass (kasutades metaklassi), mis hõivab atribuudi tüübi

    >>> klass Pilt(Objekt): ... kõrgus = 0 ... laius = 0 ... tee = "/tmp" ... suurus = 0 >>> img = pilt() >>> img.height = 340 >>> img.height 340 >>> img.path = "/tmp/x00.jpeg" >>> img.path "/tmp/x00.jpeg" >>> img.path = 320 Traceback (kõige viimane kõne viimane): ... TypeError

    Rakendage baasklass (kasutades metaklassi) ja deskriptorid, mis loovad mudelile klassi põhjal SQL-skeemi (ANSI SQL):

    >>> klass Pilt(tabel): ... kõrgus = täisarv() ... laius = täisarv() ... tee = Str(128) >>> print Image.sql() CREATE TABLE pilt (kõrguse täisarv, laius täisarv, tee varchar(128))

    Pole vaja juurutada NULL, PRIMARY KEY, FORIGN KEY, CONSTRAINTS. Piisab kahe tüübi rakendamisest: Integer ja Str.

  • 1. eesmärk- abi linkide, materjalidega, neile, kes plaanivad programmeerimist õppida ja Pythoni esimeseks keeleks võtta. Näidake, et see pole nii raske, kui tundub.
  • 2. eesmärk- koguge kommentaaridesse linke sellel teemal kasulikele ja huvitavatele materjalidele.

0. Kas mul õnnestub?

Kahtlesin algusest peale, et suudan midagi enamat kui Hello World. Mulle tundus, et programmeerimine oli äärmiselt raske ja ülimalt maagiline. Lisaks on töö, hobid, perekond, mis häirib täielikku õppimist.

Ma poleks pidanud kartma ja ma ei soovita seda teile. Programmeerimisest ei saa ilmselt kunagi mu põhieriala, kuid see on suurepärane võimalus loominguliseks tegevuseks. See on male ja tsivilisatsioon ühes pudelis.

Kõik on lihtsamast lihtsam ja palju huvitavam.

1. Kirjandus

Mark Lutz "Pythoni programmeerimine"- seda on soovitatav lugeda paljudel foorumitel ja kursustel. Mulle tundus see algaja jaoks liiga detailne ja koormav. Loe palju, programmeeri vähe. Palju kasulikum on seda lugeda pärast vähemalt Pythoni valdamist.

Mark Summerfield "Python 3 programmeerimine"- dünaamiliselt, suurepäraste näidete ja ülesannetega. Ilma tarbetu süvenemiseta, mis kõik ainult alguses keeruliseks teeb. Soovitan alustada sellest raamatust, see aitab teil kiiresti mõista, ilma raskustega hirmutamata.

Kõik teised raamatud osutusid vähem kasulikuks ja informatiivseks. Üldiselt on selleteemalist head kirjandust poest või digiversioonis raske lihtsalt kätte võtta ja osta.

2. Mida Internetist lugeda

http://pythonworld.ru/ - räägib keele põhitõdedest lihtsas ja arusaadavas keeles, mida sageli kasutatakse petulehena.

Veel kahe kuu pärast suutsin luua oma esimese Django rakenduse. Aga peaasi, et nüüd on mul piisavalt teadmisi iseseisvaks arenguks ja õppimiseks. Kõige raskem on selleni jõuda.

Veel kuu aega hiljem liitusin GitHubi kahe projektiga ja osalen neis. Muidugi lahendan ikka lihtsaid probleeme, aga vastutasuks saan nõu ja koolitust.

Sildid: püütoni koolitus, programmeerimise koolitus

Iga Pythoni õppija peab kirjutama kleepuva koodi. Tutvustame teie tähelepanu mitmele ülesandele (mitte liiga lihtsad (välja arvatud esimene) ja mitte liiga keerulised).

Nende ülesannete jaoks on olemas ka hoidla koos testide ja minu lahendustega (enese testimiseks).

Funktsiooni testide käivitamiseks on lihtsaim viis lisada testide kausta kood funktsioonifaili lõppu.

Ja nüüd tegelikult ülesanded:

Lihtsad aritmeetilised tehted (1)

Kirjutage funktsiooni aritmeetika, millel on 3 argumenti: esimesed 2 on arvud, kolmas on tehe, mis tuleks nendega sooritada. Kui kolmas argument on + , lisa need; kui - , siis lahutage; * - korrutada; / - jaga (esimene teisega). Vastasel juhul tagastage string "Tundmatu toiming".

Liigaaasta (2)

Kirjutage funktsioon is_year_leap, mis võtab 1 argumendi - aasta ja tagastab Tõene, kui aasta on liigaasta, ja False muul juhul.

Ruut (3)

Kirjutage funktsiooni ruut, mis võtab 1 argumendi - ruudu külje ja tagastab 3 väärtust (kasutades ): ruudu ümbermõõt, ruudu pindala ja ruudu diagonaal.

Hooajad (4)

Kirjutage funktsiooni hooaeg, millel on 1 argument – ​​kuu number (1 kuni 12), ja tagastab hooaja, millesse see kuu kuulub (talv, kevad, suvi või sügis).

Pangadeposiit (5)

Kasutaja teeb rubla sissemakse aastateks 10% aastas (iga aastaga suureneb tema hoiuse suurus 10%. See raha lisatakse hoiuse summale ja järgmisel aastal lisandub sellele ka intress ).

Kirjutage funktsioonipank, mis võtab argumendid a ja aastad ning tagastab summa, mis jääb kasutaja kontole.

Algarvud (6)

Kirjutage funktsioon is_prime, mis võtab 1 argumendi – arvu vahemikus 0 kuni 1000, ja tagastab tõene, kui see on algarvuline, ja False muul juhul.

Õige kuupäev (7)

Kirjutage kuupäevafunktsioon, millel on 3 argumenti - päev, kuu ja aasta. Tagasta True, kui selline kuupäev on meie kalendris, ja False muul juhul.

XOR-krüptimine (8)

Kirjutage funktsioon XOR_cipher, millel on 2 argumenti: krüpteeritav string ja krüpteerimisvõti, mis tagastab võtmega stringi märkide XOR-ga krüpteeritud stringi. Kirjutage ka funktsioon XOR_uncipher, mis taastab krüptitud stringi ja võtme abil algse stringi.

Ettevalmistus intervjuuks Pythoni arendaja ametikoha jaoks

Ettevalmistamisel kasutatud materjalid: Pythoni intervjueerimise elutähtis juhend, Pythoni intervjuu küsimused peavad olema, 15 olulist Pythoni intervjuuküsimust, Pythoni intervjuu küsimused ja vastused

Tänapäeval kasvab Pythoni programmeerijate arv jätkuvalt, kuid töökohtade arv nende jaoks nii kiiresti ei kasva. Kaasaegne arendaja peab soovitud positsioonile jõudmiseks olema konkurentsivõimeline. Oleme koostanud artikli teemade ja küsimustega, mida tööandja võib vestlusel tõstatada ning täiendanud neid väikeste selgitustega - sisuliselt on tegemist Pythoni programmeerimisprobleemidega koos lahendustega. Materjal on kasulik neile, kes jätkavad arvustamist, ning aitab algajatel orienteeruda, kus teha esimesi samme ja millele tähelepanu pöörata. Mõelge sellele kui omamoodi tuletornile.

Töötamine loenditega

Lambda avaldised, loendi generaatorid ja generaatori avaldised

Lambda väljendid- otsetee meetod üherealiste anonüümsete funktsioonide loomiseks. Nende lihtsus muudab sageli (kuid mitte alati) koodi puhtamaks ja loetavamaks kui klassikalised funktsioonideklaratsioonid. Teisest küljest piirab sama lihtsus lambda-avaldiste võimalusi ja rakendusalasid.

Loendi generaatorid esitage loendite loomiseks lühike süntaks. Neid kasutatakse loendite koostamiseks, milles iga element on mõne teise jada või iteraatori elementidega tehtud operatsiooni(te) tulemus. Loendigeneraatoreid saab kasutada nende elementide alamjada loomiseks, mille liikmed vastavad teatud tingimusele. Pythoni loendigeneraatorid on ainulaadne alternatiiv sisseehitatud funktsioonidele map() ja filter().

Lambda-avaldised funktsioonide map() ja filter() ning loendigeneraatoritega on sarnased, seega on ühe nendest tööriistadest valimine subjektiivne ja iga juhtumi puhul eraldi. Kuid tuleb märkida, et loendi generaatorid on veidi kiiremad - lambda funktsiooni kutsumine loob uue virna raami.

Generaatori väljendid on süntaktiliselt ja funktsionaalselt sarnased loendigeneraatoritega, kuid nende mehhanismide ja rakendusvaldkondade vahel on olulisi erinevusi. Generaatori avaldise või loendi generaatori itereerimine teeb kõik sama, kuid loendi generaator loob kõigepealt kogu loendi mällu, generaatori avaldis aga loob elemente käigupealt vastavalt vajadusele. Generaatori avaldisi saab kasutada suures või isegi lõpmatus arvus järjestustes. Ning nõudmisel väärtuste genereerimine parandab jõudlust ja vähendab mälukasutust. Siiski tuleb märkida, et Pythoni standardseid loendimeetodeid saab kasutada generaatori väljundis, kuid mitte generaatori enda puhul.

Mis vahe on loendil ja korteel?

Peamine erinevus: loend võib muutuda, kuid korteež mitte. Korteritega töötamine on kiirem kui loenditega. Kui teil on vaja defineerida konstantne väärtuste kogum ja kõik, mida te sellega kunagi tegema peate, on selle elementide itereerimine, on loendi asemel mõttekam kasutada korteeži. Erinevalt loendist võib korteež toimida ka sõnaraamatute võtmena.

Kõige arenenumad kandidaadid ütlevad, et korteežid on heterogeensed ja nende kasutamine sarnaneb C-programmeerimiskeele struktuuri kasutamisele. Loendid on sarnased tavaliste massiividega.

Koodi silumine ja testimine

Millist lähenemist kasutate Pythonis ühikutestimiseks?

Põhimõtteline vastus sellele küsimusele on seotud Pythoni raamistiku - unittest - kasutamisega.

Unittest toetab testide automatiseerimist, koodi jagamist testide seadistamiseks ja lõpuleviimiseks, testide rühmitamist ning testide aruandlusraamistikust eraldamise võimaldamist. Moodul unittest pakub klasse, mis muudavad testikomplekti jaoks nende omaduste toetamise lihtsaks.

Teil võidakse paluda kirjeldada ühikutesti struktuuri põhielemente, nimelt:

  • katsestend (katseseade);
  • testjuhtum;
  • testkomplekt;
  • proovijooksja.

Iteraatorid

Mis on iteraator?

Iteraator on liides, mis pakub juurdepääsu kogu (massiivi või konteineri) elementidele ja nende kaudu navigeerimist. Iteraatoritel võivad erinevates süsteemides olla erinevad üldnimetused. Andmebaasihaldussüsteemide terminites nimetatakse iteraatoreid kursoriteks. Kõige lihtsamal juhul on madalatasemeliste keelte iteraator osuti.

Mis vahe on iteraatoril ja generaatoril?

Need terminid on omavahel tihedalt seotud (iga generaator on iteraator), neid aetakse sageli segamini, mis mõnikord põhjustab arusaamatusi. Iteraator on üldisem mõiste. See on objekt, millel on määratletud kaks meetodit: __next__ ja __iter__ . Teisest küljest on generaator iteraator. Aga mitte vastupidi. Generaatori saab hankida funktsiooni põhiosas oleva tootlikkuse märksõna abil.

Def-ruudud (algus, lõpp): i jaoks vahemikus (algus, lõpp): saagikus i * i generaator = ruudud (a, b)

GIL

GIL-i kontseptsioon seisneb selles, et protsessor saab korraga käivitada ainult ühte lõime. Seda tehakse selleks, et üksikute muutujate pärast ei tekiks lõimede vahel konkurentsi. Täitval lõimel on juurdepääs kogu keskkonnale. See Pythoni lõimede rakendamise funktsioon lihtsustab oluliselt niitidega töötamist ja tagab lõime teatud ohutuse.

Argumentide läbimine

Kuidas edastatakse muutumatuid objekte?

Muutumatud objektid edastatakse väärtuse järgi. Objektid, nagu täisarvud ja stringid, edastatakse pigem objektiviidetena kui objektide koopiatena.

Kuidas muudetavad objektid edastatakse?

Muutuvad objektid edastatakse "osuti abil". Objekte, nagu loendid ja sõnastikud, edastatakse ka objektiviidetena, mis on väga sarnane sellele, kuidas C-s edastatakse viiteid massiividele – muutuvaid objekte saab funktsiooni sees otse muuta, täpselt nagu massiive C-s.

>>> def f(a): # Läbitud objektile omistatakse nimi a... a = 99 # Muudetakse ainult kohalikku muutujat... >>> b = 88 >>> f(b)# Esialgu nimed a ja b viitavad samale numbrile 88 >>> print(b) # Muutuja b ei ole muutunud 88

Funktsiooni f(b) väljakutsumisel omistatakse selles lõigus muutujale a objekt 88, kuid muutuja a eksisteerib ainult kutsutava funktsiooni sees. Muutuja a muutmine funktsiooni sees ei mõjuta keskkonda, kust funktsioon kutsuti – see loob lihtsalt väljakutse ajal täiesti uue objekti a.

Mis väljastatakse pärast teist append() kutset allolevas koodis?

>>> def append(list=): ... # lisab loendile loendi pikkuse... list.append(len(list)) ... return list ... >>> append([" a"," b"]) ["a", "b", 2] >>> >>> append() # ilma argumendita kutsumine kasutab loendi vaikeväärtust >>> >>> append() # Aga mis juhtub, kui append kutsutakse uuesti ilma argumentideta?

Kui funktsiooni argumendi vaikeväärtus on avaldis, hinnatakse seda ainult üks kord, mitte alati, kui funktsiooni kutsutakse. Seega, pärast seda, kui loendi argumendi lähtestamine on tühi massiiv, jätkavad funktsiooni järgmised argumentideta väljakutsed sama massiivi kasutamist, mis algselt initsialiseeriti.

>>> append() # esimene kõne ilma argumendita kasutab vaikeväärtust >>> append() # aga siis... >>> append() # järjestikused kõned laiendavad vaikenimekirja >>> append() # ja nii edasi...

Kuidas saan muuta eelmises küsimuses lisamismeetodi rakendust, et vältida seal kirjeldatud soovimatut käitumist?

Lisamismeetodil on alternatiivne rakendus, mis probleemi lahendab:

>>> def append(list=None): ... kui loend on None: list = # Suurendab loendi pikkust... list.append(len(list)) return list ... >>> append( ) >> >lisa()

Küsimused väljaspool teatud kategooriaid

Kuidas saate Pythonis stringis kahe muutuja väärtusi vahetada?

Vaatame lihtsat näidet:

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

Paljud teised programmeerimiskeeled nõuavad X- ja Y-väärtuste asendamisel midagi sellist:

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

Kuid Pythonis on võimalus seda teha ühe koodireaga, nagu see:

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

Mida väljastab viimane alljärgnev avaldus?

>>> flist = >>> i jaoks vahemikus(3): ... flist.append(lambda: i) ... >>> # mis väljastatakse?

Mis tahes Pythoni sulgemisel on muutujad seotud nimega. Seega väljastab ülaltoodud koodirida järgmise:

>>> flist = >>> i jaoks vahemikus (3): ... flist.append(lambda i = i: i) ... >>>

Mis on märksõna "ise" eesmärk?

Märksõna self on muutuja, mis viitab objekti eksemplarile. Klassi loomisel puudub selge viide sama klassitüübi objektile. Seetõttu kasutab Python praegusele klassile või objektile viitamiseks ise märksõna.

Klassi kasutaja: def __init__(self): self.name = "Ivan Ivanov" self.age = 16 user_obj = User() user_obj.name # self.name sisaldab väärtusena "Ivan Ivanov"

Mis on märksõna "tootlus" eesmärk?

Tootlusmärksõna võib muuta mis tahes funktsiooni generaatoriks. See toimib sarnaselt return-lausega, selle erinevusega, et märksõna tagastab generaatoriobjekti. Funktsioon võib teha ka mitu kõnet tulu märksõnale.

Def testgen(index): nädalapäevad = ["p","esmaspäev","teisipäev","kolm","nel","re","la"] saak nädalapäevad saak nädalapäevad päev = testgen(0) print next( päev), järgmine(päev) #väljund: püha esmap

Mis on __init__.py? Kuidas importida klassi teisest kataloogist?

Init__.py kasutatakse peamiselt Pythoni pakettide lähtestamiseks.

Kataloogis lstm_m olev fail __init__.py ütleb Pythoni tõlgile, et seda kataloogi tuleks käsitleda Pythoni paketina.

Kuidas importida klassi teisest kataloogist?

Tavaliselt on __init__.py tühi fail. Ja kui peame failis run.py kasutama faili lstm.py, siis tuleb see importida järgmiselt:

Alates lstm_m import lstm

Lisaks peaks mooduli kaustas olema importimiseks fail nimega __init__.py.

Milliseid sisseehitatud tüüpe on Pythonis?

Sisseehitatud Pythoni tüübid on muudetavad ja muutumatud.

Muudetav:

  • nimekirjad;
  • rahvahulgad;
  • sõnaraamatud.

Muutumatu:

  • stringid;
  • kordused;
  • numbrid.

Pidage meeles, et ülal on loetletud ainult peamised tüübid. Tegelikult on neid rohkem kui kuus.

Mis on Pythonis docstring?

Pythoni dokumentatsioonistring (docstring) on ​​viis funktsioonide, moodulite ja klasside dokumenteerimiseks. Disainistandardid on ametlikul veebisaidil.

Kuidas ma saan arvu teisendada stringiks?

Arvu stringiks teisendamiseks kasutate tavaliselt sisseehitatud funktsiooni str() , kuigi on ka teisi viise, näiteks "(0:d)".format(number) ja "%d"%number. Kui soovite teisendada kümnendarvu kaheksandarvuks (okt - kaheksand) või kuueteistkümnendsüsteemiks (kuueteistkümnendsüsteem - kuueteistkümnend), kasutage vastavalt sisseehitatud funktsiooni oct() või hex().

Mis vahe on Xrange'il ja vahemikul?

Funktsioon xrange() tagastab objekti xrange, vahemik() aga loendi ja kasutab sama palju mälu, sõltumata funktsiooni suurusest.

Kuidas ma saan näha objekti meetodeid või atribuute?

Käsk dir(x) tagastab mis tahes talle edastatud objektide atribuutide nimede sorteeritud loendi. Kui objekte pole määratud, tagastab dir() praeguse ulatuse nimed.

Lisaks

Kui räägid inglise keelt, soovitame enne vestlust sooritada veebitestid, et oma teadmisi testida.

Materjalide kogud Pythoni õppimiseks meilt: , . Lühike ka. Ärge unustage probleeme lahendada: siin saate seda teha.

Järeldus

Selles artiklis esitatud küsimused ja näpunäited võivad olla väga väärtuslikuks abiks kandidaatide ettevalmistamisel vestlusteks. Loodame, et arendajatele on need kasulikud, et enne tööandjaga kohtumist oma teadmisi iseseisvalt testida. Kuid me ei tohiks unustada, et kõik ülaltoodud küsimused on üks paljudest vahenditest kandidaatide valimiseks konkreetse strateegia osana. Valmistage hoolikalt ja põhjalikult. Palju õnne!