Tutorijal Python tutorijali

Baby Yoda

Contributor
Poruka
21.753
Python - priprema okruženja
Python je jedan od najpopularnijih programskih jezika iz razloga što je jako moćan, lak za učenje i community je ogroman. Pod community podrazumevam doprinos svih programera koji olakšavaju pisanje programa manje iskusnim programerima. Pre nego što krenemo u avanture rada sa Python programskim jezikom, neophodno je pripremiti okruženje za tako nešto.

Prvi korak jeste preuzimanje Python-a sa njihovog zvaničnog sajta: https://www.python.org/downloads/
Neću navesti ime verzije jer će se ona menjati u zavisnosti kada se ovaj tutorijal bude čitao :P

Nakon instalacije Python-a na vaš računar (instalacija je prilično laka), neophodno je imati editor u kome se može programirati. Najpopularniji izbor za početnike jeste Visual Studio Code koji se preuzima ovde:
https://code.visualstudio.com/download

Nakon instalacije Visual Studio Code programa, neophodno je ispratiti sledeće korake. Negde na vašem računaru napravite folder koji će nositi koje god ime vi želite. Ja sam napravi folder pod imenom "Python Krstarica". Pokrenite Visual Studio Code gde dobijate ovakav interfejs:

Screenshot_1.jpg


Sa leve strane primetićete da piše Explorer. Tu se nalaze vaši projekti sa kojima radite. Da bi ste dodali folder koji ste upravo napravili, to možete učiniti na dva načina. Prvi je da jednostavno prevučete folder na pravougaonik koji je rezervisan za vaše projekte. U tom slučaju dobićete poruku da li ste sigurni da želite da to uradite jer on mora napraviti određenu referencu u memoriji kako bi zapamtio lokaciju ka vašem projektu. Svakako, odabrali bi ste da. Drugi način je da kliknete na Open folder, nađete vaš folder i nakon odabira kliknete na Add.

Naredni korak jeste da napravimo python modul, odnosno, prosto rečeno - fajl. Da bi ste to učinili, u tom istom exploreru videćete sledeće ikonice i odabraćete "New File":


Screenshot_2.jpg


Imenovaćete fajl "main.py". Pišete ekstenziju py iz razloga što radimo sa python fajlom. Čim uradite to, dobićete sledeću poruku da li želite da instalire sve neophodne addone za rad sa pythonom. Možete ići na install, a možete to ručno uraditi. Preporučujem vam da prihvatite ponuđeno. Ukoliko niste dobili poruku, onda činite to ručno tako što sa leve strane možete videti kvadrat sastavljen od četiri mala kvadratića gde je jedan izdvojen. Prelaskom kursora preko pisaće Extensions. U pretrazi ukucajte Python i instalirajte sledeći plugin:

Screenshot_3.jpg


To je to, spremni smo za početak rada u Pythonu. :ok: :okok:
 
Tipovi podataka

Kako bi smo programirali bilo šta, neophodno je da upravljamo vrednostima koje su različitog tipa. Recimo, ako radimo sa nekim računanjem, koristićemo brojeve, ako radimo sa odredjenim stanjima (uključeno ili isključeno), koristićemo boolean vrednosti, ako komuniciramo sa korisnikom, potrebno je koristiti tekstualne vrednosti. Vidite, sve to je već fino uređeno u svim programskim jezicima, pa tako i u Python-u.

Šta je promenljiva (variable)? Promenljiva predstavlja prostor u RAM memoriji gde se skladište određene vrednosti. Kako bi bolje shvatili pojam promenljive, zamislite sledeće. Imamo ogromno skladište gde se nalaze kutije. Svaka kutija je skladištni prostor za neku vrednost. Ono što mi ne znamo jeste gde se tačno nalazi ta kutija, to samo RAM memorija zna i vodi je na njoj poznat način, ali ono što mi znamo je koju smo nalepnicu stavili preko kutije. Tako da, ako želimo uzeti tu i tu kutiju, samo kažemo koje se ime nalazi na nalepnici i to je sve.

Uzimajući u obzir gore navedeni primer, moramo znati da imena promenljivih moraju biti jedinsvena. Ne možemo imati dve promenljive sa istim imenom, tako nešto je veliko ne. Ime promenljive u Pythonu ne može početi brojem, kao ni specijalnim znakom. Imena promenljive ne može imati dve reči odvojene, već spojene na određeni način. Primer:

Python:
# Ne radi
first name = 'Stefan'

# Radi
first_name = 'Stefan'

Ne postoji pravilo da se promenljive čije je ime sastavljeno od dve reči povezuju donjom crtom, ali je to praksa svih python programera. U primeru iznad možete videti da sam koristio tarabu, a ona se koristi kada pišemo komentare. Komentar je deo u kodu koji se ne izvršava, preskače se, a služi isključivo nama programerima kao neka vrsta podsetnika ili drugim programerima koji čitaju naš kod - da ga bolje razumeju.
Taraba je single line koment, odnosno komentar u jednom redu. Ukoliko hoćemo komentar u više reda, pišemo sa tri apostrofa:


Python:
'''
    Ovo je komentar
    u
    vise redova
    i radi
'''

U Python-u postoje primitivni tipovi podataka i ne primitivnih tipova podataka. U ovom tutorijalu pokrićemo samo primitivne tipove podataka. Primitivni su oni koji mogu sadržati jednu i samo jednu vrednost, dok su ne primitivni oni koji mogu sadržati više od jedne vrednosti.

Integers - odnosno celi brojevi jesu prvi primitivni tip podatka. Koristimo ih za rad sa brojevima, što možemo videti kroz primere:
Python:
x = 10
y = 2

print(x + y) # 12
print(x - y) # 8
print(x * y) # 20
print(x / y) # 5
Najavio bih vam da smo u ovom primeru koristili četiri aritmetičkih operatora (sabiranje, oduzimanje, množenje i deljenje), operator dodele (jednako) i metodu print (štampa tekst u terminalu).

Kada budete ovo napisali, sigurno postavljate pitanje "Kako sad ovo da pokrenem?". Prosto. Možete kliknuti desnim klikom na modul main.py, a zatim skroz na dnu kliknete na "Run Python file in Terminal". Imajte u vidu da ću stalno koristiti reč MODUL, umesto FAJL kada govorimo o python fajlovima. Što pre naučite ispravnu terminologiju, lakše će vam biti da razumete sve na internetu što se tiče tuđeg koda.
Kod koji pokrećete možete videti dole u terminalu.

Imajte u vidu sledeće, kada se dele dva integera, uvek se dobija float tip podatka.


Python:
x = 10
y = 2

print(type(x/y)) # <class 'float'>
Ispisaće poruku da je u pitanju tip float, iako se čini da smo dobili ceo broj.

Float - odnosno brojevi sa tačkom koja se pomera (decimalni brojevi). Rad sa njima je prilično jednostavan, kao i sa integer tipom podataka.

Python:
num1 = 12.5
num2 = 4.3

print(num1 + num2) # 16.8
Isto se odnosi i za druge aritmetičke operacije kao što su deljenje, množenje, oduzimanje i moduo (ignorisaćemo za sada moduo).

Complex - odnosno kompleksni brojevi koji se ne koriste tako često osim ako se ne bavite naučnim proračunima. Srećemo ih u matematici i elektrotehnici. Upotrebu kompleksnih brojeva pokazaću vam jednom prilikom kada budemo uradili pronalaženje rešenja kvadratne jednačine.

Python:
num1 = 5j + 3
num2 = 4j + 10
num3 = 2j * 5

print(num1 + num2) # (13+9j)
print(num1 * num2) # (10+62j)
Kada pišete kompleksne brojeve obavetno je napisati j uz broj. U matematici je i, u elektrotehnici je j. Ali u Pythonu je takođe j. :D

String - odnosno tekstualne vrednosti. Pod ovim podrazumevamo bilo koji tekst. Važno je razumeti da se tekst ne može pisati kao brojevi, već se moraju koristiti navodnici. Postoje tri načina da napišete tekstualnu vrednost. Dve su standardne, a treća je za formatiranje teksta na specijalan način. Pogledajmo primere:

Python:
first_name = "Aleksandar"
last_name = 'Arsic'
message = '''
    Ovo je formatiran tekst
    koji se ponasa iskljucivo kako sam napisao
    sa svim uvlacenjima i razmacima.
'''

print(first_name)
print(last_name)
print(message)

Stringovi se mogu spajati koristeći operator + ali se on ponaša na drugačiji način. Ne možemo sabrati dva broja napisana u tekstualnom obliku.

Python:
num1 = '5'
num2 = '4'
print(num1 + num2) # 54
Prosto će se izvršiti konketanacija teksta, ali ne i sabiranje jer nisu u pitanju brojevi.

Boolean - odnosno logički tip podatka koji ima samo dve moguće vrednosti i to True i False. Ovaj tip podatka možemo takođe pisati kao 1 i 0 gde je 1 true, a 0 false. Obratite pažnju da se i true i false pišu velikim početnim slovom. Zašto nam treba tip podatka koji ima samo dve vrednosti? Kada želimo proveriti istinitost nekog izraza, kada želimo izvršiti komparaciju nečega, tada nam treba. A zašto? Zato što u zavisnosti od toga da li je True ili False, menjamo tok rada programa. U našem primeru poredićemo da li su vrednosti jednake:


Python:
num1 = 5
num2 = 5
num3 = '5'

print(num1 == num2) # True - vrednosti su jednke
print(num1 == num3) # False - vrednosti nisu jednake

Dvostruki znak jednakosti jeste operator poređenja i on poredi da li su vrednosti dveju promenljivih jednake.

Kod možete pokretati tako što ćete kliknuti na Run (ikonica za play)

Screenshot_1.jpg
 
Operatori
Operatori su simboli ili reči koje koristimo radi obavljanje neke akcije. Postoje tipovi operatora u zavisnosti sa kojom grupom podataka rade i šta im je namena. U Python-u postoji sedam vrsta operatora i to:

  • Aritmetički operatori
  • Operatori dodele
  • Operatori poređenja
  • Logički operatori
  • Operatori za identifikaciju
  • Bitwise operatori
  • Membership operatori
U opsegu ovog tutorijala radićemo aritmetičke, operatore dodele, operatore poređenja i logičke operatore.

Aritmetički operatori - jesu operatori sa kojima izvršavamo elementarne matematičke operacije te imamo:

OperatorPrimerIsto što i
=x = 5x = 5
+=x += 3x = x + 3
-=x -= 3x = x - 3
*=x *= 3x = x * 3
/=x /= 3x = x / 3
%=x %= 3x = x % 3

Dakle, operatore možemo regularno koristiti kada stavljamo dve promenljive i simbol za operaciju između, ali možemo staviti kao prefiks isti simbol, a nakon znaka jednakosti napisati drugu promenljivu sa kojom radimo:
Python:
num1 = 5
num2 = 2

num1 += num2 # Isto sto i num1 = num1 + num2
num1 *= num2 # Isto sto i num1 = num1 * num2

Ovde imamo osim pet osnovnih matematičkih operatora još jedan koji nisam objasnio, a to je moduo (simbol je procenat). Moduo radi na sledeći način. Sa operatorom moduo, delimo dva broja i ono što ostane do deljenika jeste vrednost koju dobijamo. Primer:
Python:
num1 = 10
num2 = 2
num3 = 3

print(num1 % num2) # Vrednost je nula
print(num1 % num3) # Vrednost je 1 zato sto kada se podeli deset sa tri imamo 3 cela broja u broju 10, dakle, 3 * 3 = 9 i ostaje nam samo 1 do 10.

Kao što sam objasnio u komentaru, kada delimo dva broja, ono što nam ostaje do deljenika jeste vrednost. Značaj modua prepoznaje se kada utvrđujemo da li je broj paran ili neparan.

Operatori poređenja - jesu operatori koje koristimo da poredimo dve vrednosti (samo dve).

OperatorImePrimer
==Jednakox == y
!=Nije jednakox != y
>Veće odx > y
<Manje odx < y
>=Veće ili jednakox >= y
<=Manje ili jednakox <= y

Što se tiče samih operatora tu nema mnogo priče jer svi znamo iz matematike kako rade. Ono što je bitno reći jeste da nakon komparacije devju promenljivih mi dobijamo boolean vrednost (True ili False).

Python:
num1 = 5
num2 = 10

print(num1 > num2) # False
print(num1 == num2) # False
print(num1 <= num2) # True

Logički operatori - jesu operatori koji porede dva izraza kako bi utvrdili istinitost.

OperatorOpisPrimer
and Vraća True ukoliko su oba izraza tačnax < 5 and x < 10
orVraća True ako je jedan od izraza tačanx < 5 or x < 4
notObrće rezultat, vraća False ako je rezultat true i obrnutonot(x < 5 and x < 10)

Python:
num1 = 5
num2 = 10

print( num1 > num2 or num1 < num2) # Prvi izraz je False, drugi izraz je True. Nama je vazno da bar jedan bude True i zato dobijamo True na kraju
print( not (num1 > num2) ) # Iako je izraz u zagradi netacan, zbog operatora "not", negiramo vrednost i ona postaje True

Toliko od mene. :)
 
Uslovi

Uslove u programiranju koristimo sa ciljem da odredimo u kom pravcu će se izvršavati naš program, ali i da filtriram određene podatke. Svaki uslov povezan je sa boolean vrednostima i operatorima poredjenja. Uvek se nešto poredi, i uvek je rezultat poređenja True ili False. U zavisnosti od toga, uslov preokreće tok programa. Naravno, naši primeri biće jednostavni, ništa kolosalno.

Krenimo od jednog korisnog primera. Kako možemo znati da li je broj paran ili neparan? Razmislite malo na osnovu do sada naučenog, a ako ne uspete da rešite, pokazaću vam.


Python:
even_number = 22
odd_number = 9

if even_number % 2 == 0:
    print("Broj je paran")
else:
    print("Broj je neparan")

Ovde nam se pojavljuje jedna novina. Mimo koda primetićete da su oba printa uvučena i postoji razlog zašto je to tako. U drugim programskim jezicima potpuno je nebitno da li je uvučeno ili ne, kod se izvršava, ali očekuje se da koristite vitičaste zagrade. Python ne koristi vitičaste zagrade da napravi BLOK koda, i zbog toga je bitno to definisati uvlačenjem. Što je više uvučen kod, to je njegov prioritet manji. Prvo se izvršava ono što je skroz levo, pa onda uvučeno za jedan, pa za dva i tako dalje.

U primeru iznad imamo dve promenljive i to even_number (paran broj) i odd_number (neparan broj). Kada koristimo uslove, koristimo rezervisanu reč IF koja se bukvalno tako i prevodi "Ukoliko.." i onda šta? "Ukoliko je paran broj moduo dva jednak 0, onda je broj paran" To je prevod šta se dešava na ljudski jezik. Svaki broj koji se nakon deljenja sa brojem dva ima ostatak 0, jeste paran broj. Svi neparni brojevi imaju ostatak. U primeru iznad možete zameniti ovo even_number i staviti odd_number kako bi ste videli rezultat.

Primećujemo i rezervisanu reč ELSE koja prosto znači "Ako prvi izraz nije True, onda izvrši ono što ja kažem kao poslednju alternativu". Zašto kažem poslednju alternativu? Zato što osim IF, postoji isto tako ELIF koji je zamena za Else if. Odnosno, ako ovo prvo if nije tačno, hajde da probamo nešto drugo, pa ako to nije tačno, hajde još nešto i ako više nemamo nijedan elif, onda se else izvršava kao konačni blok koda. Ukoliko je bilo koji od izraza gore tačan, prekida se uslov i to je to, ne proverava se dalje. Evo, pogledajmo:


Python:
number = 22

if number > 18:
    print('poy')
elif number > 16:
    print('poz')

Nakon što se kod izvrši, pisaće "poy" u konzoli, ali ne i poz iako je i taj izraz tačan. Dakle, prvi koji je tačan se izvršava. Naravno, sa sva tri može izgledati ovako:

Python:
is_ID_valid = False
is_index_valid = True

if is_ID_valid and is_index_valid:
    print("Mozete se uclaniti u biblioteku.")
elif is_ID_valid is False:
    print("Maloletni ste. Nes hebat. xD")
else:
    print("Mlogo seksi primeri")

U primeru iznad imamo promenljive koje su indikator da li neko ima ličnu kartu (ID) i da li ima studentski index. Ukoliko su oba validna, može se učlaniti u biblioteku. Ukoliko je maloletan, neš hebat xD . Ako ništa od toga nije ispunjeno, ispisaće "Mlogo seksi primeri".
Probajte da pogodite šta je rezultat ovog programa.

is_ID_valid IS False - ovo IS je kao da smo pitali is_ID_valid == False, Imajte u vidu da, iako je ovaj drugi način validan, svako poređenje da li je nešto True ili False koristite IS i IS NOT.

Eto, toliko za sada, ostanite mi lepi.
 
Petlje (Loops)

Dođosmo do dela kada učimo šta su to petlje. Zamislimo situaciju gde želimo napisati brojeve od jedan do deset. Možemo to učiniti manuelno tako što bi smo iznova pisali print i unutar zagrade menjali broj. Ali tako nešto jeste prilično glup pristup. Mi možemo napisati samo jedan print, a opet prikazati svih deset broja ili koliko god želimo koristeći petlje.

Razlikujemo:

  1. While petlju
  2. For petlju

While prevedeno znači "dok" i upavo tako postavljamo uslov. Imajte u vidu da se petlja izvršava dok je uslov ispunjen, odnosno dok je vrednost evaluacije izraza na kraju "True".


Python:
counter = 1

while counter <= 10:
    print(counter)
    counter += 1
Kao što sam rekao, ako želimo prikazati brojeve od 1 do 10, pogledajte kod iznad. Započinjeno uvek sa while, zatim pišemo izraz koji se evaluira, u našem slučaju to je counter<=10 , zatim slede dve tačke jer ulazimo u blok novog koda koji treba izvršiti. Naravno, čim je novi blok koda, uvlači se kod (lupite tab). Sada dinamički štampamo brojeve tako što samo jednom pišemo print, ali prosledjujemo argument (argument je svaka vrednost koja se prosleđuje funkciji po njenom pozivanju) koji se menja. S obzirom da while petlja daje dosta dinamičnosti, moramo naznačiti kako se menja brojač ili ti counter. Pošto se brojevi povećavaju za jedan, tako i mi pišemo.

Ako obratimo pažnju, prva evaluacija glasi "Dok je counter (u startu 1) manji ili jednako 10, onda udji u petlju. To je True i petlja se izvršava. Povećamo brojač za jedan i idemo dalje, opet evaluacija. "Dok je counter (sada 2) manji ili jednak 10, onda udji u petlju. To je True i petlja se izvršava i tako sve dok ne dođemo do counter-a koji dobija vrednost 11. Onda izraz neće biti tačan i više se ne ulazi u petlju. Ukoliko bi mi kojim slučajem zaboravili da napišemo povećanje countera, napravili bi smo beskonačnu petlju jer će izraz uvek biti True što svakako ne želimo da učinimo. Uvek mora postojati način da se beskonačna petlja prekine. Da, trebaće nam nekada, ali mora uvek postojati način da izađemo iz nje.

U sledećem postu pisaću sa for petlju, sada bih malo da odmorim glavu. :hvala:
 
Idemo dalje programeri. :mrgreen:

For petlja je nešto drugačija od while petlje iz razloga što se koristi za iteraciju nad sekvencama (liste, tuples ili stringovi). Kada gledamo na while petlju, prosto želimo da se nešto desi određeni broj puta ili da se izvršava dok je neki uslov zadovoljen, dok kod for petlje imamo situaciju kada imamo listu, gde želimo proći kroz njene elemente i uraditi nešto sa njima.

Do sada nismo radili liste, ali zarad ovog primera pokazaću šta lista jeste u svojoj prostoj formi. Lista je niz različitih elemenata koji su uređeni u rastućem poretku. Šta se pod ovim misli? Zamislite da imate papir i na njemu listu stvari koje želite kupiti. Pišete ih od vrha, na dole ili s leva, na desno. Te stavke su zasebne celine i tačno znate koja je prva, a koja je druga. Isto tako interpreter zna u našoj listi koji je elment prvi u listi. Primer brojevne liste:


Python:
numbers = [1, 2, 3, 4, 5]
print(numbers)

Pišemo ime promenljive, a to je "numbers", a zatim koristimo operator dodele dajući vrednost samoj promenljivoj. Koja je to vrednost? Vrednost liste su sve ove vrednosti. Dakle, do sada smo imali, jedna promenljiva, jedna vrednost. Ali lista je jedna promenljiva, mnogo vrednosti. Kako sada to? Vidite, kada pišemo neku promenljivu i dodelimo joj vrednost, RAM memorija postavlja datu vrednost na nekom memorijskoj lokaciji odakle kasnije nama vraća tu vrednost. Kako radi lista? Prvi element liste dodeljuje se na neku memorijsku adresu i onda svi ostali elementi u adresi pišu se jedan za drugim. Nema više razbacivanja po različitim memorijskim lokacijama. Sve vrednosti idu adresno jedna za drugom. Što znači, da bi interpreter znao gde je peta vrednost, samo mora znati lokaciju prve vrednosti, vrlo prosto, zar ne?

Ono što je važno da znate u programiranju jeste podatak da se brojanje vrši od 0 kada pričamo o listama. Tako da, ako želimo pristupiti broju 2, on je na indeksu 1.
Python:
numbers = [1, 2, 3, 4, 5]
print(numbers[1])

Pristupanje vrednostima u nekoj listi čini se tako što se napiše ime liste, a zatim stave uglaste zagrade u kojim stavljamo indeks kom elementu pristupamo. Gde ovde dolazi for petlja? Hajde da prođemo kroz celu listu iako ne znamo koliko ima elemenata unutar iste.

Python:
numbers = [1, 2, 3, 4, 5]

for i in range(len(numbers)):
    print(numbers[i])

Kako se piše jedna for petlja? Pišemo najpre rezervisanu reč for, zatim pišemo ime brojača (praksa je da se piše ime promenljiva i). I skraćeno od iterator. Dodajemo in range. U kom rasponu se ponavlja ova petlja? E sada, unutar zagrada za range postoji mogućnost da pišemo kao što smo mi učinili. Ako ne znamo koliko ima elemenata, pišemo metodu len(), a u zagradi te metode stavljamo argument poput liste. Len metoda vraća koliko elemenata ima data lista. U našem primeru, kao da je napisano:
Python:
numbers = [1, 2, 3, 4, 5]

for i in range(5):
    print(numbers[i])

Kod for petlje imamo fleksibilnost da napišemo od-do. Ovako:
Python:
for i in range(10,20):
    print(i)
Sada ovde imamo ispisivanje brojeva od 10 do 19. Kada imate raspon, to znači od 10 (počinje) do 20 (ali ne i 20). O tome uvek vodite računa. Možemo for petlju koristiti i na ovaj način:

Python:
names = ['Stefan', 'Marija', 'Marko', 'Darko', 'Milena']

for name in names:
    print(name)

Prevedeno, "Za svako ime u imenima štampaj ime". Promenljiva name predstavlja iterator (ono i) s tim što njena vrednost nije 0,1,2,3 već vrednosti koje se nalaze u samoj listi "Stefan", "Marija" ...

Dosta za danas. Poyy. :mrgreen:
 

Back
Top