srolija.com
Just another page.

Python 3

11. rujna 2014. prva verzija

Ne treba sve znati!
Dosta toga jos nismo obradili i ne treba znati sve, kada citate ako vidite dio koji nismo radili ne panicarite... radit cemo ga kasnije do tada slobodno preskocite (ili ako vas zanima isprobajte).

Pripreme i napomene

Download

Python mozete skinuti sa stranica Pythona, obavezno skinite verziju Python 3.4.2 (ili koja je vec aktualna - ali mora pocinjat sa 3).

Pokretanje IDLEa

Kad ste skinuli i instalirali Python 3 mozete ga pokrenuti tako da odete u Start -> All Programs -> Python 3.4 -> IDLE (Python GUI). Bitno je napomenuti da ce se pokrenuti interaktivna konzola tako da se nakon svake unesene naredbe ispisuje rezulzat njezina izvrsavanja unatoc tome sto ne pisemo naredbu print, tako se Python nece ponasati kada pisemo program u file. Interaktivna konzola sluzi prvenstveno kako bi se moglo lakse eksperimentirati sa naredbama u Pythonu. Za pisanje "pravih" programa trebamo napisati sve naredbe u file pa tek onda pokrenuti. Da bi smo to mogli trebamo otici u File -> New Window (Ctrl + N). Kada nam se otvori novi prozor mozemo u njega pisati kod, a kada smo gotovi moramo ga spremit File -> Save (Crtl + s). Prilikom spremanja ce nam iskociti prozor u kojem nas pita gdje zelimo spremit program, nakon sto nademo folder u koji zelimo spremit trebamo napisati naziv programa i pritom dodati ekstenziju .py kako bi Windows znao da se radi o programu u Pythonu (a ne obicnom tekst fileu). Nakon sto je program spremljen pritisnemo F5 da bi pokrenuli program. Kad pokrenemo pojavit ce se drugi prozor u kojem ce pisat ispis. Ovaj dio sa spremanjem i pokretanjem programa ponavljamo dok god nam je potrebno (svaki put kad zelimo pokrenut program nakon nekih promjena).

Komentari

Svrha komentara je da omoguce lakse razumjevanje znacenja odredenih naredbi ili dijelova programa. Na ovoj stranici ce se gotovo u svakom primjeru nalaziti. Postoje dva tipa komentara:

  • #komentar - komentari koji se odnose na jednu liniju, oznacuju se sa znakom # i prilikom pokretanja python ce ignorirat sve sto je napisano od tog znaka do kraja linije - ja ih cesto koristim u tekstu jer su prakticni i uocljivi :)
    # primjerKomentara.py
    a = 2 + 2 # + 4
    print(a)
    # print("ja sam tekst")
    # program ce ispisati samo 4 jer ce dodavanje 4 bit zanemareno kao i drugi print 
    
  • """ komentar """ - tri nadovnika pa tekst, ovaj tip komentara ujedno se koristi i u neke druge svrhe (stringove kroz vise redaka, kao pydoc komentari) pa kako su u skoli programi relativno jednotavni vjerojatno se necemo susretati sa njima. Primjer kada su korisni je kada zelimo vise linija zakomentirati odjednom. Za razliku od obicnih komentara, ovi rade isklucivo kada se kod pise u datoteke (u interaktivnoj konzoli - IDLEu, nece raditi).

Napomena

U daljnjim primjerima podrazujmevam da se kod pise direktno u interaktivnu konzolu (oznaka ">>>" oznavava u IDLEu unos), razlika je u tome sto da bi se ispisalo nesto kada je program u fileu moramo koristit funkciju print(), dok u interaktivnoj konzoli nakon svakog reda Python ispise rezultat. To ne znaci da vi morate pisati u interaktivnu konzolu, ali ako vec ne pisete nego u file onda morate koristiti print() inace se nece nista ispisati. U primjerima u kojima se kao prva liniji se nalazi komentar i pise neko ime filea znaci da podrazumjevam da se program pise u file umjesto da se pokrece u interaktivnoj konzoli. Primjer toga je:

# program.py
a = 5
b = 4
print("Zbroj je:", a+b)

Crvena boja

Crvenim slovima su naznacene bitne razlike, stvari na koje treba obratiti paznju i ispisi (najcesce u ispisima u interaktivnoj konzoli).

Tipovi podataka

Tipovi podataka su nam bitni prilikom koristenja varijabla kako bi znali koje su nam operacije nad odredenim vrijednostima dostupne. Primjerice ne bi imalo smisla vaditi korjen iz slova.

Integer

Integer ili cjelobrojni tip podataka (u matematici ekvivalentan skupu Z), sastoji se od iskljucivo cijelih brojeva, za razliku od brojnih drugih programskih jezika koji imaju ogranicenja na velicinu na velicinu brojeva, u Pythonu su tako velika da ih gotovo mozemo zanemariti (brojevi mogu imati tisuce znamenaka bez ikakvog problema).

Float

Float (floating point number - broj sa pomicnom tockom) ili realni brojevi (skup R) sadrzi sve brojeve koje mozemo prikazati na pravcu. Za razliku od matematike u kompjuteru nije moguce prikazati sve realne brojeve potpuno tocno pa se uzimaju aproksimacije (pa cemo tako umjesto pi uzeti 3.141592653589793) u Pythonu su floatovi prezicni na 16 decimala. Pri pojomom decimala se smatraju zanamenke prilkom prikaza u znanstenom zapisu (recimo 31850.129 ce se gledati kao 3.1850129E4 sto je ekvivalentno 3.1850129 * 10000) tako da će i cijeli brojevi koji su u float tipu podataka ukoliko imaju vise od 16 znamenka bit aproksimirani. Tako ce jako veliki decimalni brojevi sa stotinama znamenaka imati samo prvih 16 preciznih. Ovo je samo za primjer kako se iza 16. decimale gubi preciznost (ne treba jos znati sto radi format, primjer je da se skuzi sto znaci ta preciznost u praksi).

# primjerfloat.py -- piasti u file!
a = int(90288815522303026012390414882671523394454578953713)
b = float(90288815522303026012390414882671523394454578953713)
print("{}\n{:.0f}".format(a, b))

Ispis:

90288815522303026012390414882671523394454578953713
90288815522303023863160396398354744876009013641216

Takoder u slucaju nekih operacija rjesenja mogu ispast kriva zbog nacina na koji se prikazuje realni broj u memoriji, primjer za to je:

# kriviZbroj.py
a = 0.1 + 0.2
b = 0.3
print(a, b)

Ispis:

0.30000000000000004 0.3

Kao sto mozemo vidjeti brojevi su razliciti, sto bi u slucaju da ih usporedujemo (koji je manji/veci) u programu dovelo do krivog rezultata. Zato je bitno znati razliku izmedu razlicitih tipova podataka i preporuceno koristiti cijele brojeve kad je god moguce. Ova nepravilnosti se mogu zaobici koristenjem klase Decimal koja je u sklopu standardnih biblioteka (skupina naredba) Pythona, ali vise o tome kad cemo (ako cemo) ju radit. Bitno zapamtiti da float moze imat odstupanja (ovo vrijedi i za gotovo sve druge programske jezike).

Takoder float u Pythonu sadrzi dvije posebne vrijednosti: inf (infinity) - beskonacnost i nan (not a number) - ne broj/nevazeci broj (rezultat . Nan je prakticki nebitan, dok nam inf moze koristiti i prilikom rjesavanja zadataka. Vrijednost inf mozemo dobiti na sljedeci nacin:

>>> float('inf')
inf

Tu vrijednost mozemo pridruziti varijablama ili koristiti prilikom usporedba (if naredbe...).

String

String ili niz znakova se sastoji od znakova iz Unicode tablica (UTF-16 ima gotovo 1,112,064 razlicitih znakova - skoro sva pisma iz svih svjetskih jezika). String moze bit gotovo neogranicene duzine, a svaki od tih znakova je neki iz UTF-16 tablice. String mozemo prikazati pomocu jednostrukih ili dvostrukih navodnika, ista je stvar ali je bitno ali je bitno ne mjesati ih:

"Ovo je string."
'Ovo je takoder, string moze bit i samo jedna rijec ili samo znak.'
"Python"
'a' # ovo je ujedno i "znak"
"Ovaj primjer ne valja, jer mijesamo navodnike.'

Char (znak) kao tip zaseban tip podataka ne postoji u Pythonu vec je string od jednog znaka - tako nema razlike u tipu podataka izmedu stringa i chara, razlika je vise "zamisljena". Ali je znak sam po sebi bitan koncept. Unicode nije bio oduvijek opcenito prihvacen standard vec su se koristile drugacije tablice za zapis znakova. Svrha tablice je da ono sto ljudi poimaju kao znakove nekako zapise tako da i kompjuter razumije, kako kopjuteri razumiju samo brojeve onda je logican odabir bio pridruziti svakom znaku neki broj. Najpoznatija standardizirana tablica znakova je ASCII (American Standard Code for Information Interchange). Ona sadrzi samo 128 znakova koja sadrzi americku abecedu, brojeve, interpunkcijske znakove i kontrolne znakove (nisu vidljiv). Kako su kompjuteri postali popularni nastala je potreba da se dodaju i znakovi drugih jezika. Od mnostva standarda danas je najpopularniji UTF-8, a on kao prvih 128 znakova sadrzi iste znakove kao i ASCII, a ostali su prema Unicode tablici. Python podrzava i druge charsete (tablice znakova), a interno koristi standard ovisno o tome koji je najkompaktniji u kojeg moze zapisati znak.


Izvor: http://benborowiec.com/2011/07/23/better-ascii-table/

Nije potrebno znati tablicu napamet, bitno je samo da se shvati kako su znakovi zapravo zapisani pomocu brojeva i da cemo zbog toga moci izvoditi nad znakovima neke matematicke operacije i usporedbe. Od posebnih znakova postoje dva bitna:

  • \n - prelazak u novi red
  • \t - tabulator, poravnava sa visekratnicima 4 ili 8 mjesta (ovisi o postavkama)
>>> print("Ivica i \nMarica su isli po \n\tredu!\nOvo\tje cudno!")
Ivica i
Marica su isli po
	redu!
Ovo	je cudno!

Boolean

Može biti ili True ili False, rezlutat je logickih operacija (primjerice usporedbe dva broja). Bitno je navest da prilikom pridruzivanja vrijednosti treba pazit da se pise sa velikim pocetnim slovima.

Pretvorbe tipova podataka

U Pythonu je moguce za potrebe razlicitih operacija prebacivati izmedu razlicitih tipova podataka.

  • int(float/string/boolean) - pretvorit ce valjani float, string ili bolean u integer, float nece zaokruziti vec uzeti cijeli dio, a u slucaju beskonacnosti nece raditi, kao ni ukoliko pokusamo sa nevazecim stringom. Za boolean True ce bit 1, za False 0.
    >>> int(3.6)
    3 #zato sto int ne zaokruzuje
    >>> int('3.5')
    3
    >>> int('25')
    25
    >>> int('1001', 2) # drugi argument je baza pa ce gledati 1001 kao binarno
    9
  • round(float/boolean) - jednak kao int() ali ce zaokruziti brojeve. Za zaokruzivanje postoje i metode u biblioteci math: math.floor(broj) i math.ceil(broj) koje zaokruzuju na manje ili vise (za njih je potrebno napraviti import math).
    >>> round(3.6)
    4
    >>> round("3.6")
    ERROR
  • float(integer/string/boolean) - slicno kao i int() za integer, ali ce pretvarat u float (realni) tip podataka pa moze pretvoriti i beskonacnost (int) i nebroj (nan).
    >>> float(True)
    1.0
    >>> float('inf')
    inf
  • str(integer/float/boolean) - pretvara druge tipove podataka u string. Ovo nam je posebno bitno kada zelimo spojiti tekst sa brojem.
    >>> str(True)
    "True"
    >>> str(7.28)
    "7.28"
    >>> "Broj: " + 7.28
    ERROR
    >>> "Broj: " + str(7.28)
    "Broj: 7.28"
  • ord(string od 1 znaka) - prikazuje brojcanu vrijednost (integer po Unicode tablici) za taj znak
    >>> ord('ž')
    382
  • chr(integer) - suprotno od ord(), pretvara vrijednost integera u znak
    >>> chr(82)
    "R"
  • bool(integer/float/string) - pretvara u boolean, svaki string koji je prazan, broj koji je 0, niz koji je prazan, objekt koji je prazan, itd., uglavnom sve prazno ili sta ima vrijednost 0 postaje False, sve ostalo postaje True
    >>> bool('')
    False
    >>> bool('Bok!')
    True
    >>> bool(3.14)
    True

Operatori

Kao i u matematici i u programiranju imamo potrebu zbrajati/mnoziti i izvoditi druge racunske operacije nad vrijednostima. Nije bitno tocno znat koji su koji operatori (aritmeticki, logicki...) vec sto rade pojedini (zbrajanje, or...).

Aritmeticki operatori

Ovo su identicni kao u matematici, za brojeve (float i integer), u svakom od izraza je moguce i mjesat cijele sa realnim brojevima:

  • + zbrajanje
  • - oduzimanje
  • * mnozenje
  • / dijeljenje
  • ** potencioniranje
  • % ostatak cijelobrojnog dijeljenja, ako je 7 = 3 * 2 + 1, ostatak dijeljenja sa 3 je 1 jer je najblizi djeljivi sa 3 broj 6, moguce je racunat i ostatak sa realnim brojevima (4 % 1.5 = 1.0)
  • // cijelobrojno dijeljenje, podijeli i odbaci ostatak

Za stringove postoji nekoliko operacija:

  • + zbrajanje iliti spajanje, zbrajanje stringova je jednako kao i spajanje, za spajanje sa integerima ili floatovima prvo ih moramo pretvoriti u string pomocu funkcije str().
    >>> "Ovo " + "radi!"
    'Ovo radi!' # navodnici su zanemarivi - isto je "bok" kao i 'bok'
    >>> "ja imam " + 2 + "kutije"
    ERROR #nismo pretvorili broj u string
    #sljedece bas i nema smisla ali umjesto broja moze bit i varijabla :)
    >>> "ja imam " + str(2) + "kutije"
    'ja imam 2kutije'
    # spojeno jer nema razmaka ispred stringa "kutije"
    
  • * mnozenje, radi samo ukoliko mnozimo string sa cijelim brojem, funkcionalno je jednako kao da smo isti string napisali puta s koliko ga mnozimo, za 0 i negativne brojeve ce biti prazan string, korisno prilikom formatiranja ispisa (npr. lako mozemo ispisat liniju punu crtica).
    >>> "bok!" * 10
    'bok!bok!bok!bok!bok!bok!bok!bok!bok!bok!'
    >>> "bok" * 0
    ''
    >>> "-"*50
    '--------------------------------------------------'

Usporedni operatori

Za sve (integeri, floatovi, stringovi, booleanovi). Rezultat usporedbe je boolean (ili je istinito ili laz).

  • a == b - provjerava jesu li jednaki
  • a != b - provjerava jesu li razliciti
  • a < b - provjerava jeli a manji od b
  • a > b - provjerava jeli a veci od b
  • a <= b - provjerava jeli a manji ili jednak b
  • a >= b - provjerava jeli a veci ili jednak b

Za stringove ce uzet sumu vrijednosti pojedinog znaka (pozvat ce ord() za svaki znak i zbrojiti ih) te tako usporedivat, za booleane osim == i != nema smisla, radit ce (na cudan naicin) ali nema smisla.

Logicki operatori

Njih koristimo najcesce u if-ovima, ali i na drugim mjestima gdje trazimo istinitosti izraza.

  • and - ukoliko su oba logicka uvjeta True, onda je True
    True and True
    True
    True and False
    False
    False and False
    False
  • or - ukoliko je bar jedan od uvjeta True, onda je True
    True or True
    True
    True or False
    True
    False or False
    False
  • not - negira uvjet - pretvara True u False i obrnuto
    not True
    False
    not False
    True
    not(False or False)
    True
    not(True or False)
    False

Prioritet operatora

Gotovo identicno kao i u Pascalu.

  • (, ) zagrade
  • ** potenciranje
  • *, /, %, // mnozenje, dijeljenje, cijelobrojni ostatak i cijelobrojno dijeljenje
  • +, - zbrajanje i oduzimanje
  • <=, <, >, >= usporedba velicina
  • ==, != usporedba jednakosti
  • =, %=, /=, //=, *=, **=, +=, -= operatori dodjele (vise o tome kasnije)
  • in, not in operatori pripadnosti (vise o tome u buducnosti)
  • not, or, and logicki operatori

Zasto je to bitno? Da bi prilikom koristenja operacija znali koji je njihov prioritet pa ih tako pisat, a to nam je bitno da bi se operacije izvodile tocnim redosljedom kojim zelimo. Primjerice prilkom logickih usporedba u if naredbama pomocu ovoga mozemo znati da ce se aritmeticke operacije izvrsit prije usporednih i logickih kao i da ce usporedne se izvrsit prije nego logicke. Alternativno mozemo pisat zagrade gdje god nismo sigurni koji je prioritet.

a-2 > b and b < d

Je ekvivalentno iducem izrazu:

((a-2) > b) and (b < d)

Varijable

Varijable

Varijable su memorijske lokacije na kojima spremamo vrijednosti, mozemo ih zamisliti kao kucice u koje mozemo upisati neku vrijednost i kada joj zelimo pristupiti napisemo naziv varijable.

U Pythonu ih ne moramo deklarirati na pocetku programa, vec one nastaje time da im dodjelimo neku vrijednost (logicno ne mozemo koristiti varijablu ako joj nisamo dali nikakvu vrijednost - jer u tom slucaju ona ne postoji jos). Imena varijabla se moraju sastojat od slova (da, svih slova - moze i 'č' ali je preporuceno prvenstveno slova eng. abecede), brojeva (ali ne na prvom mjestu - ne moze zapocet ime varijable sa brojem) i znaka '_', moraju imat barem jedno od toga troje, takoder python razlikuje velika i mala slova tako da varijabla "var" nije ista kao i varijabla "Var". Usput imajte na umu da u Pythonu varijable koje koje imaju pocetak naziva sa "__" (dva puta znak '_') u nekim slucajevima imaju poseban znacaj. Sto se tice tipova podataka to ce Python sam odredit ovisno o vrijednosti koju dodjelimo varijabli, ako mu damo cijeli broj, sam ce prebacit u cijelobrojni tip podataka i sl. Takoder prilikom promjene vrijednosti sam prepoznaje koji je novi tip podataka (ako je do sada integer i pokusamo joj dati vrijednost koja je po tipu real onda ce Python sam promjeniti u realni tip podataka) tako da treba biti oprezan prilikom dodjele vrijednosti da se nebi slucajno promjenio tip podataka (zato je pametno koristiti funkcije za promjenu tipova podataka (int(), float(), str(), bool(), round()...) kada nismo sigurni kojeg je tipa vrijednost koju dodjeljujemo).

a = "bok"
__a = "ime"
_1 = 2
čika = 'Chvekčina'
mirko = 2.1
Mirko = 2.2

Operatori pridruzivanja

To su operatori prilikom pridruzivanja vrijednosti, jednaki su aritmeticim, ali sadrze jos znak '=' na kraju.

  • = - postavlja vrijednost varijable na izraz iza njega
  • += - dodaje toj varijabli ono iza njega
    a = 3
    a += 5 # jednako kao a = a + 5
    print(a)
    8

Takoder postoji za svaki artimeticki operator pripadajuci operator asocijacije samo im pridurzimo znak '=', tako da * ide u *=, - u -= itd. Kako za strinove postoji samo + i *, tako za njih postoje i samo *= i +=. Sva pravila iz aritmetickih vrijede i tu (ako nije jasno o cemu je rijec procitajte tekst prije).

Dodatno, u pythonu je moguce bilo koji objekt staviti u varijablu. Vise o ovome kada budemo to ucili.

Jedna korisna stvar u Pythonu je sposobnost da istovremeno postavimo istu vrijednost vise varijabla:

a = b = c = d = 5 # sve varijable ce imat vrijednost 5

Kao i sposobnost da paralelno dodijeljujemo vrijedsnoti varijablama (ovo je tesko za objasnit jer ima nekoliko bitnih "caka", tako da samo zapamtite sljedece):

# umjesto da moramo pisat sljedeci kod mozemo to pisat krace
# zahvaljujuci tom svojstvu pythona

# prilikom zamjena varijabla
privremena = a
a = b
b = privremena

# kraci nacin koji koristi to svojstvo (ovim cemo zamijeniti vrijednost a i b):
a, b = b, a

# pri tome prvi s lijeva s lijeve strane jednakost poprima
# vrijednost prvog sa desne strane jednakosti
a, b, c = 1, 2, 3
# a = 1
# b = 2
# c = 3
# kod ovog postoje cake tako da rade koristite samo prilikom
# zamjene varijabla

Bitne naredbe

Input i print

input() i print(...) su osnovne funkcije za upis i ispis podataka. input() ucitava vrijednosti koje korisnik unese te su u obliku stringa, ukoliko mu damo kao parametar string on ce ga prikazat prilikom ucitavanja. Kako bi iz stringa kojeg nam input() vrati dobili integere ili druge tipove podataka koristimo naredbe za pretvaranje tipa podatka (int(), float()...). print(...) s druge strane ispisuje podatke koji su prosljedeni kao parametri.

# int(input("tekst_korisniku"))
# pri tome je int() funkcija da dobijemo integer,
# a tekst korisniku string koji ce biti ispisan
# prilikom zahtjeva za upis vrijednosti
>>> a = float(input('Unesite realni broj: '))
Unesite realni broj: #kursor blinka da unesemo nesto

# print(vrijednost1, vrijednost2, ...)
# vrijednosti mogu biti bilo koji tip podataka,
# mozemo ih proslijediti koliko ocemo samo moraju
# bit odvojene zarezima, umjesto zareza ce u ispisu bit razmak
>>> print("Broj:",2)
Broj 2

Import

U pythonu naredba import ce ucitati funkcije iz odredenom modula i uciniti ih dostupnima unutar naseg programa. Python je podijeljen kroz mnostvo modula kako nebi bio memorijski zahtjevan, jer kad bi odjedamput sve te funkcije uveli u nas program nastao bi kaos - jako bi puno memorije trosili uzalud, gotovo 99% toga nebi koristili. Zato i postoji funkcija import pomocu koje mozemo odredene module ili samo neke dijelove iz njih uvesti u nas program, izbjegavajuci time trosenje memorije uzalud i da se slucajno nebi dvije funkcije jednako zvale uzorkujuci probleme.
Postoji nekoliko nacina na koji se moze importat:

>>> import math

Ovaj oblik ce ucitat cijeli modul math a njezinim funkcijama i vrijednostima mozemo pristupati tako da napisemo math, tocku pa ime funkcije ili vrijednosti

>>> import math

# vrijednost broja pi
>>> print(math.pi)
3.141592653589793

# funkcija sqrt (za korjen broja)
>>> print(math.sqrt(25))
5.0

Drugi nacin je dodati sve funkcije:

>>> from math import *
>>> from math import pi, sqrt, cos

Na ovaj nacin mozemo ucitat pojedinacno funkcije i/ili vrijednosti, tako da navedemo njihovo ime, ukoliko stavimo * onda cemo ucitat sve funkcije i vrijednosti iz tog modula. Prilikom ucitavanja na ovaj nacin varijable i vrijednosti su nam dostupne samo pisanjem njihovog naziva, za razliku od prvog nacina u kojem moramo pisati i ime modula. Ukoliko ucitavamo vise funkcija/vrijednosti rucno onda ih moramo odvojiti zarezom. Funkcije i vrijednosti ucitavamo bez zagrada, bez obzira sto se funkcije pozivaju sa zagradama.

>>> from math import pi, sqrt

>>> print(pi) # ne treba ono math. jer imamo from
3.141592653589793

>>> print(sqrt(9))
3.0

Kao dodatak importu prilikom naredbe import mozemo koristiti i as. To ce tijekom ucitavanja promjeniti naziv pod kojim koristimo taj modul ili ukoliko koristimo from tada naziv funkcije/varijable:

>>> import math as m

# ukoliko zelikmo koristiti funkcije iz biblioteke math
# pozivat cemo sa m. umjesto sa math; primjerice:
>>> print(m.pi)
3.141592653589793

# kod koristenja from mozemo tako mjenjati nazive za fje i vrijednosti
>>> from math import sqrt as korjen, pi as pii
>>> print(korjen(10))
3.1622776601683795

Uz import korisno je navesti funkciju help(...), koja je korisna da nakon sto importamo odreden modul mozemo dobiti pomoc o samom modulu ili funkcijama koje se nalaze u njemu tako da ih prosljedimo kao parametar.

>>> import math
>>> help(math) # dobit cemo dugi tekst o modulu
>>> help(math.pi) # dobit cemo informacije o konst. pi unutar modula math

Od brojnih modula nama dva najbitnija su random i math, random sluzi za generiranje nasumicnih brojeva, dok math sadrzi brojne matematicke funkcije i konstante. Iz modula random moramo znat fukcniju random() i randint(n,m). Funkcija random generira nasumican broj iz intervala [0,1>, dok randint(n,m) generira nasumican cijeli broj iz intervala [n,m].

>>> from random import random, randint

>>> print(random())
0.022522548993110236 # nasumican broj iz intervala [0,1>

>>> print(randint(5,8))
6 # nasumican cijeli broj iz inetervala [5,8]

Iz math modula je bitnija funkcija sqrt, kao i konstanta pi, ostale nisu nebitne vec ih nije potrebno znat napamet jer ih se lako moze saznat pomocu funkcije help().

len

len(string/niz) nam vraca duljinu onoga sto mu proslijedimo. Ukoliko mu prosljedimo string vratit ce nam broj znakova koji se nalazi u njemu, ukoliko mu proslijedimo niz (kasnije cemo raditi) vratit ce nam broj clanova.

>>> len(1)
ERROR # ne mozemo dobir duljinu broja
>>> len("Vrtuljak!")
9

Primjer

Zadana nam je duzina stranice jednakostranicnog trokuta, trebamo ispisati volumen i oplosje koje se dobije rotacijom tog trokuta oko njegove visine.

Kako bi dosli do rjesenja moramo znat u koje cemo tijelo dobiti rotacijom jednakostranicnog trokuta oko visine - stozac (kao sto mozemo vidjeti na slici - koju prilikom rjesavanja zadatka je pametno nacrtati). Pomocu formula za oplosje i volumen stozca cemo doc do rjesenja, mozemo pocet time da raspisemo formule i svedemo sve na samo jednu nepoznanicu koju cemo kasnije u programu zamijeniti varijabla u koju smo spremili duzinu stranice prilikom unosa. Tako bi rjesili zadatak matematicki i onda ga samo napisali u Pytohnu. Matematicki:


Matematicki izvedene formule za volumen i oplosje

# zadatak.py -- spremiti u file!
from math import pi, sqrt

a = float(input('a: '))

V = (pi * a**3) / (8 * sqrt(3))
# a**3 smo mogli staviti i u zagradu ali nema potrebe zbog prioriteta operacija
print('Volumen:', V)

O = (3 * pi * a**2) / 4
print('Oplosje:', O)

Pokrenemo i unesemo primjerice 3.15:

a: 3.15
Volumen: 7.086485775448022
Oplosje: 23.37933982893354

Drugi nacin je bio vise "seljacki" tako da da svaku nepoznanicu iz formule izracunamo odvojeno i spremimo u neku varijablu pa ih onda uvrstimo u konacne formule, ovo je u pravilu jednostavniji nacin (nema raspisivanja formula). U konacnici je svejedno na koji se zadatak rjesava jer ce rjesenje biti jednako (osobno mislim da je ovaj nacin bolji i jednostavniji jer su manje sanse da se zezne (nema izvodenja formula) - ali to je subjektivno):

# zadatakb.py - spremiti u file!
# © Zvonimir Medic ;)
# ovdje doslovno svaku nepoznanicu iz formule izracunamo
# pa ih uvrstimo u formule
from math import pi, sqrt

a = float(input('a: '))
r = a / 2
h = a * sqrt(3) / 2
s = a

V = 1/3 * (r**2) * pi * h
O = r * pi * (r + s)

print(V)
print(O)

Za provjeru unesemo takoder 3.15:

a: 3.15
Volumen: 7.086485775448022
Oplosje: 23.37933982893354

Kao sto je vidljivo iz rjesenja, oba nacina rade i tocna su.