[CLANAK 1.] - Python 1: Varijable

Koki007 nas uvodi u svijet Pythona i PyGamea!

Moderator: Danijel Korent

Post Reply
User avatar
Danijel Korent
Romulanski špijun na Zemlji
Posts: 1583
Joined: Fri Sep 05, 2008 12:35 pm
Smallest prime number bigger than 20: 23
Location: Njemacka
Contact:

[CLANAK 1.] - Python 1: Varijable

Post by Danijel Korent » Wed Feb 24, 2010 10:55 pm

1. VARIJABLE, DODJELJIVANJE, I ARITMETICKE I LOGICKE OPERACIJE


1.1. TIPOVI PODATAKA
U pythonu raspolazemo sa standardnim tipovima podataka koje mozemo dodjeliti varijablama, no njihove mogucnosti su vece nego u jezicima tipa C++. Evo popis onih jednostavnijih:

Bool - (True, False) - vjerojatno vec svima poznato - moze imati samo dvije vrijednosti True ili False
Integer - (3, 4, 512) - cjelobrojni tip
Float - (1.32, 1.0, 3.14) - realan broj, preciznost ovisi o platformi na kojoj se python vrti
String - ("pizza", 'pivo', "tv") - niz znakova

Primjetili ste da kod niti jednog tipa nisam napisao kolko je bitni ili maksimalnu velicinu, to je zato jer ih prakticki niti nema, Python se sam brine o velicini varijabala i dinamicki uzima vise prostora u memoriji ukoliko je to potrebno, tako da vi mozete dodjeljivati vrijednosti bez da se morate brinuti je li prevelika za varijablu.


1.2. STVARANJE VARIJABALA
Varijable se u Pythonu stvaraju na ovaj nacin:

Ime_varijable = vrijednost_koju_joj_pridruzujemo

npr.:
Broj_bodova = 12.5

U imenu varijable se mogu koristiti velika i mala slova, brojevi i underscore (hrvatska rijec za to?). Velicina imena varijable je neogranicena, no preporucujem da tu mogucnost ipak ne iskoristavate previse.

Oni koje "dolaze" sa C-like jezika su primjetili da nigdje nema zadano koji kojeg je tipa varijabla, odnosno koji tip podatak moze primiti. E pa varijabla je onog tipa kojeg je i ono sto je u nju poslano, i bilo koja varijabla moze primiti bilo koji tip podataka. Integer varijabla se kreira tako da joj se pridruzi cjelobrojni tip, za float varijablu naravno float tip, a za string dodajte vrijednostu u navodnicima, Python prihvaca "test" ili 'test'.

Pokrenite python interpreter (kao sto je opisano u clanku 0.1 ) te probajte upisivati ovo:

a = 1
print a #print ispisuje vrijednost varijble u konzolu, u interpreteru umjesto ovoga mozete napisati samo ime varijable, odnosno a
b = "Neko ime"
print b
b = True #paziti da je prvo slovo veliko
print b
b = 2.34
print b
print a
c = a + b #racunanje pomocu varijabala
print c


kao sto vidite, varijabli a se moze bez problema dodjeliti bilo koji tip podataka bez obzira na tip koji trenutno sadrzava i python se nece buniti. Kakva se magija dogada ispod toga da je to moguce bit ce naknadno objasnjeno u iducim temama.


1.2. MOGUCE OPERACIJE SA VARIJABLAMA
Sa Pythonom je naravno moguce raditi aritmeticke i logicke operacije. Operacije mozete raditi sa razlicitim(mjesanim) tipovima varijabala.


1.2.1. LOGICKI OPERATORI
LOGICKI: OR, AND, NOT
BITWISE: |(or), &(and), ^(xor), ~(not), << (shift left), >> (shift right)
(o bitwise operacijama necu pisat jer ih necemo trebati, koga zanima: http://en.wikipedia.org/wiki/Bitwise_operation" onclick="window.open(this.href);return false;)

Za one koji ne znaju/ne razumiju logicke operatore odnosno boolean algebru, evo kratko objasnjenje :
Kod boolean algebre vrijednosti mogu imati samo dva stanja: True ili False, istinit ili neistinit, 1 ili 0, ovisi kako tko prezentira vrijednosti. Nad tim vrijednostima se mogu vrsiti odredene operacije, nazvane logicke operacije. Najosnovnije i najcesce koristene operacije su:

OR, AND i NOT

Evo tablica rezultat racunanja sa OR (u nasem primjeru cemo koristiti 1 i 0)

OR
0 or 0 = 0
0 or 1 = 1
1 or 0 = 1
1 or 1 = 1
- kao sto se vidi rezultat je uvijek 1 ili True ako je bar jedan operand 1 ili True, i po tome cete si najlakse zapamtiti

AND
0 and 0 = 0
0 and 1 = 0
1 and 0 = 0
1 and 1 = 1
- razultat je 1 ili True samo ako su svi operandi 1 ili True

NOT
not 0 = 1
not 1 = 0
- not se u biti vrsi nad jednim operandom, i kao sto se i vidi u primjeru, daje suprotnu vrijednost varijabli

Zasto nam ovo uopce treba? Boolean varijable i stanja su jako korisna, i u programiranju igara se cesto koriste boolean varijable, npr. za stanja koja mogu biti samo istinita ili neistinita - recimo je li ukljucena gravitacija ili pauza. Jednostavnije je i preglednije provjeriti neku varijablu kao logicki tip neko kao brojcani tip. Takoder se koristi za razna usporedivanja i sl. Npr.: izraz "ako je Igrac u zraku" "i ima padobran", ova dva izraza mogu imati samo dvije vrijesnosti, istina ili neistina (True or False). Naravno mi zelimo da igrac moze otvoriti padobran samo u slucaju da je igrac stvarno u zraku i ima padobran, odnosno ako su oba izraza True ili 1. Ako je prvi izraz False, odnosno igrac nije u zraku onda ni ne treba otvarati padobran, a ako jest u zraku ali je drugi izraz False, odnosno nema padobran, onda ni ne moze otvoriti padobran (znaci lose mu se pise). Da vizualno prikazem iz onog sto smo sad zakljucili kako izgleda truth tablica za naseg jadnog igraca na mukama.

Igrac:

Code: Select all

u zraku -   ima padobran -  igrac otvara padobran
0 (False)     0 (False)      =  0 (False)
0 (False)     1 (True)       =  0 (False)
1 (True)      0 (False)      =  0 (False)
1 (True)      1 (True)       =  1 (True)
Ako pogledamo one tablice gore vidimo da nam najvise odgovara AND operator za usporedbu ova dva stanja, on vraca True samo ako su oba slucaja True, u nasem slucaju ako igrac jest u zraku i ako ima padobran, te cemo u ovom slucaju naravno njega i koristiti. Nadam se da je sad ovo jasnije za one koji su imali nedoumice :)

Svaki python objekt/varijabla se moze provjeriti je li True ili False vrijednosti, pa cak i instance klase. Za brojcane tipove, ako je 0 onda se u Pythonu smatra da je False, ako je bilo koji drugi broj(ukljucujuci negativne) je True. Nizovi podataka ,poput string, lista ili dictionary-a (bit ce kasnije objasnjeno), su False ako su prazni, ukoliko nisu onda su True. Ovo cesto zna bit korisno.

Logicke operacije mozemo raditi sa bilo kojim objektima u bilo kojoj kombinaciji (upravo zbog toga jer se svaki objekt moze provjeriti je li True ili False). Bitwise operacije mozemo radit samo sa brojevima.

Upalite python interpreter te probajte ovo upisivati:

a = "pokus"
b = 0.0
print a and b
print a or b
print (a or b) and 3
c = ( a or b) and 3
print c



Kao sto se vidi, Python se ne buni sto radimo operacije sa razlicitim tipovima varijabala, i ne vraca samo True ili False nego u vrijednost koja predstavlja taj True ili False.


1.2.2. OPERATORI ZA USPOREDBU VARIJABALA
Operatori za usporedivanje: <, <=, >, >=, ==, !=

a < b - vraca True ako je varijabla 'a' manja od 'b'
a <= b - vraca True ako je varijabla 'a' manja od ili jednaka 'b'
a > b - vraca True ako je varijabla 'a' veca od 'b'
a >= b - vraca True ako je varijabla 'a' veca od ili jednaka 'b'
a == b - vraca True ako je varijabla 'a' jednaka 'b'
a != b - vraca True ako je varijabla 'a' nije jednaka 'b'

Ovo ce te najcesce koristiti za usporedivanje znamenki ili stringova. Recimo je li pozicija nekog objekta unutar ili izvan nekog podrucja ili objekta.

Tehnicki, mogu se usporedivati razliciti tipovi podataka bez javljanja greske, no neke (vecina) kombinacije su beskorisne. Najkorisnija je mogucnost direktnog usporedivanja intger i float tipa.

Upalite python interpreter i probajte ovo:

print 3 < 4
print 3 > 4

print 3 > 3.5
print 3 < 3.5
print 3 == 3.0

print "aa" < "bbb"
print "aa" > "bbb"

print "aa" > 3
print "aa" < 3
print "aa" == 2

print "aa" == "bb"
print "aa" == "aa"



Vjerojatno neke rezultate niste ocekivali, recimo mozda se ocekivalo da se string moze usporedivati po velicini. No to nije slucaj i vecina operacija usporedivanja sa stringom su beskorisna osim usporedivanja jesu li dva stringa jednaka. Da bi dobili (i usporedili) velicinu nekog stringa koristite funkciju len(neki_string). Ta funkcija vraca integer kojem je vrijednost velicina stringa poslanog u funkciju.

Probajte recimo ovo:

print len("aa") < len("bbb")
print len("aa") > 1



1.2.3. ARITMETICKI OPERATORI
Aritmeticki operatori: +, -, *, **, /, //, %

x + y - vraca zbroj vrijednosti u x i y
x - y - vraca razliku vrijednosti u x i y
x * y - vraca umnozak vrijednosti u x and y
x / y - vraca rezultat dijeljenja izmedu vrijednosti u x i y
x // y - vraca samo cjelobrojni dio dijeljenja (ne zaokruzuje)
x % y - vraca ostatak dijeljenja izmedu vrijednosti u x i y
-x - negira x
x ** y - vraca rezultat potenciranja, gdje je x argument a y potencija


1.2.4. OSTALI OPERATORI I FUNKCIJE VEZANE ZA OPERACIJE SA VARIJABLAMA
Ostali operatori: =, +=, -=, *=, /=

x = y - u varijablu x se salje vrijednost iz varijable y

x += y - isto kao x = x + y
x -= y - isto kao x = x - y
x *= y - isto kao x = x * y
x /= y - isto kao x = x / y
x **= y - isto kao x = x ** y
x //= y - isto kao x = x // y

Sto se tice ova zadnjih sest primjera, iako narebe tipa x += y i x = x + y daju na izlazu jednake vrijednosti, interno se u Pythonu te dvije naredbe drugcije odrade sto u nekim specificnim slucajevima vodi do nepozeljnih (ili pozeljnih) rezultata. Ovo ce biti konkretnije razjasnjeno u iducim poglavljima.


Popis funkcija:

abs(x) - vraca apsolutnu vrijednost od x (vrijednost bez predznaka)
pow(x, y) - vraca rezultat potenciranja, gdje je x argument a y potencija
round(x) - za okruzuje realni broj (moze se dodati jos jedan optimalni integer koji govori funkciji kod koje decimale da zaokruzi x)


1.3. PRETVARANJE JEDNOG TIPA PODATKA U DRUGI TIP
Pretvaranje vrijednosti iz jednog tipa u drugi je vrlo lako uz pomoc ovih funkcija:

int(x) - pretvara vrijednost iz varijable x (broj ili string) u integer tip i vraca vrijednost (ne zaokruzuje realni broj)
float(x) - pretvara vrijednost iz varijable x (broj ili string) u realni broj i vraca vrijednost
str(X) - pretvara vrijednost iz varijable x (neki broj) u string i vraca vrijednost


1.4. DIJELJENJE DVOJE VRIJEDNOSTI TIPA INTEGER
Sada kada imate popis svih vaznih operacija slobodno ih malo isprobajte. Ja bi samo posebno izdvojio ovaj primjer:

a = 15
b = 8
c = a / b
print c



Ako ste ovo probali, rezultat koji ste dobili vjerojatno nije onaj koji ste ocekivali. Vracena vrijednost je integer jer su oba operanda integer te u tom slucaju Python vraca vrijednost integer tipa, koja ujedno i nije zaokruzena. Na ovo posebno treba paziti kod dijeljenja varijabala jer moze unesti logicke greske koje su teske za naci. Da bi rezultat bio realan broj, odnosno float tip, barem jedan operand mora biti float tip. Rjesenje problema je to da se vrijednost koja salje stavi kao float ili vrijednost u varijabli koja sadrzi integer pretvori u float tip. Npr.:

a = 15.0 # moze se pisati i samo kao 15.
b = 8
c = a / float(b)
print c



1.5. KOMBINIRANJE VISE OPERACIJA
U Pythonu naravno mozete u jednom izrazu (expression-u) raditi vise operacija, npr.:

a = 2 + 5 * 4 - 3
print a


Kao sto se vidi iz rezultata, u Pythonu takoder neke operacije imaju visi prioritet a neke nizi, recimo mnozenje ima visi prioritet nego zbrajanje. Da bi izbjegli ovo kada je to potrebno, koriste se zagrade, npr.:

a = (2 + 5) * (4 - 3)
print a


Evo popis operatora rangiranih po prioritetu, pocevsi od najveceg prioriteta do najnizeg:

1. **
2. -x
3. *, /, //, %
4. +, -
5. <, <=, >, >=, <>, !=, ==
6. not x
7. and
8. or


Ovdje mozete vidjeti potpuni popis: http://docs.python.org/reference/expres ... ml#summary" onclick="window.open(this.href);return false;


--
BTW jel naslovi bolje izgledaju kao uppercase ili lowercase?

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest