Pitonas, kandantis sau uodegą

Įvadas

„Python“ kalbos idėja kilo 9-ojo dešimtmečio pabaigoje (kaip ABC kalbos įpėdinį) ir jos realizaciją 1989 m. gruodį Nyderlanduose pradėjo Guido van Rossum. Pats kalbos branduolys yra minimalus, o naudingos galimybės išplečiamos gausia standartinių funkcijų biblioteka. Kalba yra vystoma kaip atviro kodo projektas ir ji realizuota daugeliui operacinių sistemų. Kadangi ji sparčiai vystoma, tai nėra jos standartų, o jų vaidmenį perėmęs „etaloninis“ CPython interpretatorius.

Skelbiama, kad sukūrimo tikslu buvo kodo skaitomumas („gražu geriau nei bjauru; aiškiau nei neaiškiau“ ir kitos tezės). Kadangi kodo atitraukimai yra privaloma programos struktūros dalis, tai verčia programas rašyti vieninteliu būdu.
Taigi, „Python“ sintaksė yra paprastesnė, reikalauja mažiau įsiminimų nei daugelis kitų programavimo kalbų, todėl atrodo natūralesnė – vos ne kaip receptas (žr. apie programavimo paaiškinimą).

Python 2.0 versija pasirodė 2000 m. spalį, o 3.0 – 2008 m. gruodį.

Kalbos struktūra

Pabandysime „Python“ kalbą pristatyti keliais labai paprastais pavyzdžiais. Iš jų pajusite pačius kalbos pagrindus, o jau tada galėsime pereiti ir prie sudėtingesnių klausimų.

PyPy

Pavyzdžių patikrinimui „Windows“ terpėje naudojau PyPy interpretatorių (http://pypy.org). Tai greitas alternatyvus „Python“ interpretatorius (2.7 ir 3.2 versijoms). Jis yra sukurtas naudojant pačią „Python“ kalbą.

Jo panaudojimui, pavyzdžių tekstą įrašykite į failą (pvz., labas.py), o tada iškvieskite pypy nurodydami tą failą, pvz.,

pypy labas.py

Labas, pasauli!

Kaip įprasta, kalbos pristatymą pradedame pirmąja programėle, išvedančia pranešimą „Labas, pasauli!“:

# Pirmoji programa
print (“Labas, pasauli!“)

Pastaba: eilutės, prasidedančios diezo ženklu (#), yra komentarai

Kintamieji ir operatoriai

Kiekvienos kalbos pagrindas yra kintamieji. „Python“ kintamieji aprašomi, kai jiems priskiriamos reikšmės. Pvz. (kabliataškis skiria sakinius),

A = 5 ; B = 6
print (A+B)

Atsakymas bus toks, kokio ir tikėjotės: 11

O jei abiem kintamiesiems priskirsime eilutes? Pvz.,

A = "5"; B = "6"
print (A+B)

Aišku – gausime 56… O jei vienas skaičius, o kitas eilutė? Klaida – “Python” nemoka automatiškai konvertuoti skirtingų tipų reikšmių! Reikia naudoti tipų konversijos funkcijas, pvz.:

A = 5; B = "6" ; C = "6.7"
print (A+int(B))
print (str(A)+B)
print (A+float(C))

Gausime:
11
56
11.7

Jau panaudojoe vieną (sudėties) operatorių. Aritmetiniams veiksmams skirti operatoriai:
+, -, *, /, % (liekana), ** (laipsnis), // (dalybos sveikoji dalis) Pvz.,
A = 17 ; B = 5
C = A // B
print (C)

išves: 3

Pastaba: Priskyrimo operatoriai (=) gali būti išplėsti veiksmo operatoriais (įgaunant prasmę „savo paties su ...“:
=+, =-, =*, =/, =%, **=, //=

Pvz.,
A = 2
A **= 3
print (A)

ir rezultatas: 8

Veiksmų sekos valdymas

Sudėtiniuose sakiniuose vykdomi blokai nurodomi atitraukimais nuo krašto. Tad kitame pavyzdyje (kaip ir tolimesniuose), atitraukimas nėra vien „dėl grožio“, o yra sudėtinė „Python kalbos sintaksės dalis.

Sąlygos patikrinimas

a = 20
if a > 30:
  print("per didelis");
elif a < 0:
  print("neigiamas");
else:
  print("0..30")

Iteracinis ciklas

for a in range(1,3):
    print ("a: "+str(a))

rezultatas:
a: 1
a: 2
a: 3

Sąlyginis ciklas

a = 1 
while a < 4:
   print ("a: "+str(a)) 
a += 1

Kaip ir numanote, rezultatas bus identiškas ankstesniam pavyzdžiui.

Funkcijos

Pasikartojančių veiksmų iškėlimas į atskirus programinius vienetus (funkcijas, procedūras) yra būdingas visoms kalboms. Pademontruosime paprastos funkcijos, išvedančios pasisveikinimo tekstą, pavyzdį:

def Pasisveikinimas (vardas):
    print("Labas, " + vardas + "!")

Pasisveikinimas ("pasauli")

Eilutės

Teksto eilutės yra vienas svarbiausių „Python“ elementų. Su eilutėmis (arba jų kintamaisiais) galima visa eilė funkcijų:

* count('x') – nurodytos eilutės pasikartojimų kiekis;
* find('x') – nurodytos eilutės pozicija
* lower() – eilutės reikšmė mažosiomis raidėmis;
* upper() - eilutės reikšmė didžiosiomis raidėmis;

* replace('a', 'b') – pakeisti visas a į b;
* strip() – iš eilutės pašalinti „lydinčiuosius” tarpus (priekyje ir gale)

Naudinga yra funkcija len(), gražinanti eilutės ilgį. Taip pat galima nurodyti „išpjautą” eilutės dalį [p:g], nurodant pradžios ir pabaigos pozicijas (-1 reiškia “be paskutinio). Minėtas galimybės iliustruosime šiuo pavyzdžiu:

sEilute = "Labas, Pasauli!"

c = sEilute.count("a")
f = sEilute.find ("P")

print (sEilute.lower())
print (sEilute.upper())
print (c, f)

L = len(sEilute)
print (L)

sVardas = sEilute[7:-1]
print (sVardas)
sVardas = sEilute[7:L-1]
print (sVardas)

Rezultatas:

labas, pasauli!
LABAS, PASAULI!
4, 7
15
Pasauli
Pasauli

Duomenų tipai

„Python“ kalboje baziniai tipai yra loginis, sveikas skaičius, dešimtainis skaičius ir teksto eilutė. Joje viskas (ne tik šie tipai, bet ir didelės duomenų struktūros, funkcijos ar programos) yra tarsi objektai. Objektas – tarsi plastikinis dėžė, kurioje laikomi duomenys. Objektas yra tipas, kuris nusako, ką galima daryti su duomenimis, pvz., kokius veikmus, ar tie duomenys gali kisti. Vis tik „Python“ tipai yra „griežti“, tai reiškia, kad objekto tipas negali būti keičiamas, net jei objekto reikšmė kinta.

Norėdami sužinoti objekto tipą, naudokite type, pvz., produktas = "gira"

print (type(produktas))
print (type(555))

Gausime

<class 'str'>
<class 'int'>

class yra objekto aprašas.

Skaičiams galima nurodyti skaičiavimo pagrindą: 0b – dvejetainį, 0o – aštuntainį, 0x – šešioliktainį; pvz., dešimtainė reikšmė 18 gali būti užrašyta taip: 0b1010, 0o22, 0x12

Pastaba: skaičių negalima pradėti 0, pvz., 0555 yra klaidinga reikšmė. Taip pat su skaičiais yra dvi dalybos operacijos:
/ - dešimtainė dalyba;
// - sveikoji dalyba (rezultatas yra sveikasis skaičius).

Reikšmės tipo pakeitimui reikia naudoti tipo konvertorių: bool, int, float, str. Pvz.,
print (bool(1)); print (int('555')); print (float('5.67')); print (str(78));
Gausime tokias reikšmes: True, 555, 5.67, '78'

Kas tai yra programavimas?

Pradėkime nuo trupučio mistikos ir ją išspręskime. Kaip manote, ką reiškia šios dvi eilutės?
(1 eil.): (RS) K18,ssk,k1,sukti.
(2 eil.): (WS) Sl 1 pwise,p5,p2tog,p1,sukti.

Atrodo panašu į kažką techniško, tarsi kokia programa. Iš tikro, tai mezgimo schema (žr. >>>>>), aprašanti, kaip pasukti mezgant kojinės kulną. Daugumai tai visiška mistika, tačiau kai kurioms moterims (ir mezgantiems) – aiškiau nei dieną.

O dabar paimkite kitą pavyzdį – šįkart jo paskirtį atpažinsite iškart:

Agrastai, 2,5 kilogramo; medus, 250 gramų; vanduo, šaltinio, 10 litrų; razinos, neplautos, 30 gramų

Agrastus sumaigyti, užpilti vandeniu ir užvirinti. Kai atauš, perkošti, įmaišyti medų, įberti razinų ir pastatyti šiltoje vietoje, kad įrūgtų. Kai gira suputos, supilstyti į mažesnius indus, laikyti šaltoje vietoje. Raudonų agrastų gira gausis rausva, geltonų - gelsva, žalių – žalsva.

Taip – tai receptas: produkto sudedamosios dalys ir tada jo paruošimo taisyklės. Mūsų pavyzdyje – produktas yra agrastų gira. Tačiau – ką šiedu abu pavyzdžiai turi bendra?

  • fiksuotą žodžių, santrumpų, simbolių žodyną;
  • Jų naudojimo taisykles – t.y., sintaksę;
  • Veiksmų atlikimo tvarką;
  • Kartais veiksmų pakartojimą (ciklą);
  • Kartais nuorodą į kitą veiksmų seką (funkciją) – recepti, pvz., į padažo pagaminimo receptą;
  • Numanomą konteksto supratimą. Pvz., jūs žinote, kas yra vanduo ir kaip jį reikia užvirinti.
  • Laukiamą rezultatą (pvz., kažką, kuo galėsite pasimėgauti – girą).
  • Visus šiuos dalykus rasite kompiuterinėje programoje. Šį samprotavimą pateikiau tam, kad parodyčiau, kad programavimas nėra kažkas „iš kojų verčiančio“ – tereikia išmokti žodžius ir jų naudojimo taisykles. Bet palikime šiuos filosofinius išvedžiojimus ir paimtii tikrąją programą – mūsų atveju „Python“ kalba:

    for atgal in 5, 4, 3, 2, 1, "nulis!":
        print(atgal)
    Jūs greičiausiai supratote, kad ji pateiks „skaičiavimo atgal“ rezultatus:
    5
    4
    3
    2
    1
    nulis!

    O dabar pažvelkime į kitą pavyzdį

    ingredientai = [
        "vanduo",
        "medus",
        "agrastai",
        "razinos",
        ]
    print (ingredientai[2])

    Galime įsivaizduoti, kad turime recepto ingredientų sąrašą, iš kurio pateikiame vieną pagal jo vietą masyve. Kadangi numeruoti pradedama 0 (ach taip, žmonės paprastai pradeda skaičiuoti nuo 1, tačiau kompiuteriai nėra žmonės), tai rezultatas bus agrastai.

    Tačiau recepte ingredientai nurodyti kitaip. Tad bandome dar vieną programą:

    kiekiai = {
        "vanduo" : "10 litrų (šaltinio)",
        "medus" : "250 g",
        "agrastai" : "2,5 kg",
        "razinos": "30 g (neplautos)",
        }
    produktas = "gira"
    print (produktas, " : ",  kiekiai[produktas])
    

    Joje kiekiai yra žodynas - porų (raktų ir su jais susietų reikšmių) sąrašas. Juos naudojant reikšmes galime pasiekti naudodami ne indeksą (kaip ankstesniame pavyzdyje), o pagal vardą (raktą). Ir jei ankstesniame pavyzdyje sąrašas buvo laužtiniuose skliaustuose [ ], tai šiame – riestiniuose {}. Ir šios programėlės atsakymas bus agrastai : 2,5 kg

    „Python“ realiame pasaulyje

    Bet „Python“ kalba yra tik žaisliukas ar naudingas įrankis? Jis gyvuoja nuo 1991 m. ir yra tarp 10-ies populiariausių kalbų. Ją sutiksite naudojamą įvairiose srityje: komandinėse eilutėse ar terminaliniame lange, grafinėje vartotojo sąsajoje, interneto sprendimuose (tiek kliento, tiek serverio pusėje), debesyse, mobiliuosiuose įrenginiuose ir įtaisuose (pretaisuose).

    Taigi, tai puiki universalaus naudojimo kalba, leidžianti tą patį sprendimą realizuoti mažesniu eilučių kiekiu. Bet tai nėra panacėja visose situacijose. Ji nebūtinai įdiegta visose aplinkose. Ji pakankamai greita, tačiau gali būti nepakankamai greita ten, kur reikalauja ypatingų greičių.

    Kalbų palyginimas

    Parašysime programėlę įvairiomis kalbomis, kuri išveda skaičių ir kažką pasako apie save. Galėsite patys palyginti...

    Apvalkalo kalbos.
    Komandinėje eilutėje ar terminaliniame lange veikianti programa, kuri nuskaito jūsų įvestį, ją vykdo ir pateikia rezultatą, vadinama apvalkalo programa „Windows“ – tai cmd, vykdanti .bat failus. „Linux“ ir kitos „Unix“ pagrindą turinčios sistemos (tarp jų ir MacOS) turi po keletą apvalkalų, kurių populiariausi bash ir sh. Tik vargiai apvalkalų skriptai pasiekia kelis šimtus eilučių ir paprastai jie veikia lėčiau nei kitos kalbos (žr. apie programavimą Unix apvalkalui).
    Pateikiame mažytę Unix apvalkalo programytę:

    #!/bin/sh
    nulis=0
    echo "Skelbiu: $nulis. Aš SH skriptas – tik tiek."

    Jos rezultatas:
    Skelbiu: 0. Aš SH skriptas

    Senieji „kietuoliai“ C ir C++ yra gana žemo lygio kalbos, naudojamos, kai reikia didelių greičių. Jas sunkiau išmokti, programos jose linkę „smigti”, o to priežastį sunku surasti. C kalbos pavyzdys:

    #include 
    int main(int argc, char *argv[]) {
        int nulis = 0;
        printf("Skelbiu : %d. Esu C – drebėkite žemės kirminai!\n", nulis);
        return 0;
    }

    C++ išlaiko C kalbų šeimų panašumą:

    #include 
    using namespace std;
    int main() {
        int nulis = 0;
        cout << "Skelbiu : " << nulis << \
           ". Aš esu C++! Už manes tūno C!" << \
           endl;
        return(0);
    }

    „Java“ ir C# yra C ir C++ išvystymai, siekiant pašalinti kai kuriuos šių trūkumus, tačiau kažkiek daugžodžiauja ir riboja. Štai „Java“ pavyzdys:

    public class Overlord {
        public static void main (String[] args) {
            int nulis = 0;
            System.out.format("Skelbiu : %d. Esu Java – baisesnė už C!\n", nulis);
        }
    }

    Išskyrus apvalkalo kalbas, kitos minėtos yra vadinamos statinėmis kalbomis, nes reikia nurodyti kai kurias kompiuterio lygio charakteristikas (pvz., duomenų tipus, kurių negalime pakeisti). Jomis parašytas programas speciali kompiliatoriaus programa verčia į mašininę kalbą. Nuo jų skiriasi dinaminės kalbos, kurių programos dažnai vadinamos skriptais - jos nėra kompiliuojamos, o vykdomos interpretatorių (specialių programų). Viena tokių kalbų (nuo senų laikų“ yra

    „Perl“ – labai galinga ir turinti daugybę bibliotekų, tačiau jos sintaksė kartais gali pasirodyti siaubinga (gal dėl to kai kurias turėtas nišas ima perleisti „Ruby“ ir „Python“). Štai pavyzdys:

    my $nulis = 0;
    print "Skelbiu : $nulis. Aš Perl, visų kalbų tėvas.\n";

    „Ruby“ yra naujesnė kalba, ypač išpopuliarėjusi dėl „Ruby on Rails” antstato, skirto intraneto sprendimams. Štai pavyzdys:

    nulis = 0
    puts "Skelbiu : #{nulis}: Ruby, pasirengęs ir įkaitęs."

    PHP išpopuliarėjo interneto sprendimuose ir leidžia jungti HTML ir kodą. Tačiau turi daugybę povandeninių akmenų ir netapo universalia kalba. Štai pavyzdys:

    <BODY><P>Skelbiu :
    <?PHP
    $nulis = 0;
    echo " $nulis. Aš PHP, ir aš užėmiau internetą.\n";
    ?>
    </P></BODY>

    Ir pabaigoje „Python“ pavyzdys:

    nulis = 0
    print("Skelbiu : %s. Aš Python – ir kaip? % nulis)

    Tokia trumpa ši „Python“ kalbos iliustracija. Tikruosi, ji leidžia pajausti šios kalbos pagrindus.... O nuo jų bus galima keliauti ir toliau...

    Ankstesnės "Advanced HTML" skyrelio temos:
    Tcl kalba
    Ruby on Rails
    Unix komandinė eilutė
    Ateities kalbos?
    JavaScript pradmenys
    Didžiųjų duomenų mitas
    CGI.pm biblioteka: sausainiai
    AWK kalba - sena ir nuolat aktuali
    Įvadas į Perl kalbą: Kas naudoja Perl?
    Lambda išraiškos – Java į naują lygį
    CGI.pm biblioteka: sausainiai
    Ką delne mums neša HTML 4.0?
    Kaip valdyti piešinių pakrovimo tvarką
    Įlįskite į lankytojų kailį
    Programavimo kalbų istorija
    Dygios JavaScript eilutės
    Papildytoji tikrovė
    ASP patarimų liūnas

    Sveikųjų skaičių žaidimai
    Pelė uodega švystelėjo...
    Anotacijos Java kalboje
    Programavimo kalbų klegesys
    Pirmoji programuotoja: Ada Lovelace
    Java 8: Optional prieš null
    JavaScript atspindžiai
    Kompiuterių ištakos
    Tiesiog - Java
    Vartiklis