Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2018
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.50 KB | None | 0 0
  1. #Python 3 ukratko
  2. #****************
  3. ''' Ovaj program sadrži kratki podsjetnik na gradivo obrađeno kroz predavanja i vježbe
  4. kolegija "Osnove programiranja" na stručnom studiju informatike TVZ-a, ne nužno
  5. redoslijedom kojim su teme obrađivane.\\
  6.  
  7. Autor: Bojan Nožica, dipl.ing., v.pred.
  8. siječanj 2018., Zagreb'''
  9.  
  10. #Osnovni tipovi podataka
  11. #***********************
  12.  
  13. 'int - cjelobrojni tip podatka'
  14. cijeli_broj = 123456789012345678901234567890; 'bez ograničenja broja znamenki'
  15. binarni_cijeli_broj = 0b01101; 's prefiksom 0b'
  16. oktalni = 0o753; 's prefiksom "0o" '
  17. 'točka-zarez u naredbama omogućuje pisanje više naredbi u istom retku:'
  18. hexadecimalni = 0xAF12; negativni = -123; nula = 0
  19.  
  20. 'float - brojevi s pomičnom točkom'
  21. x = 2.5
  22. y = 1.0; z = -2.
  23. znanstveno1 = 2.38e6
  24. znanstveno2 = 3.333333333333333e-20
  25. '''brojevi se zapisuju u tzv. dvostrukoj preciznosti koja omogućuje 15-16 značajnih
  26. znamenki decimalnog dijela broja'''
  27.  
  28. 'bool - logički tip podatka'
  29. istina = True
  30. laz = False
  31.  
  32. 'string - znakovni tip podatka'
  33. poruka = 'ovo je tzv. "string" - znakovni tip podatka i ujedno niz znakova'
  34. specijalni_znakovi = "1.red\n2.red \', \“, \\, \t - tzv. escape sequence."
  35.  
  36. '''za pohranu znakova koristi se u Pythonu kodni sustav Unicode (inačica UTF-8)
  37. kojim se pojedini znak zapisuje s jednim do čak 6 bytova, čime je moguće kodirati
  38. preko milijun različitih znakova svjetskih pisama.
  39. Trostruki navodni znak (koji može biti jednostruki ili dvostruki) koristi se kao
  40. dokumentacijski string koji se proteže u više redaka'''
  41.  
  42. #Imenovanje varijabli, funkcija, modula...
  43. #*****************************************
  44. '''započinje malim ili velikim slovom abecede, naši znakovi dozvoljeni su
  45. ali ih je preporučljivo izbjegavati, iza slova mogu uslijediti znamenke.
  46. Osjetljivost na veličinu slova - a1 i A1 su različita imena. Uobičajeno
  47. je započeti imena malim slovom ili podvlakom _, kod sastavljenih imena
  48. koristiti podvlaku ili započeti novu riječ velikim slovom:
  49.  
  50. stil_prvi
  51. stilDrugi
  52.  
  53. Zabranjeno je koristiti imena koja se u Pythonu koriste kao rezervirane riječi,
  54. npr. "for", "and", "in", ili kao imena ugrađenih funkcija poput "print", "range"
  55. "hex" i slično. Također, imena koja započinju s dvije podvlake rezervirana su za
  56. interne potrebe Pythona i treba ih izbjegavati.'''
  57.  
  58. #Pridruživanje vrijednosti i promjena tipa podatka
  59. #*************************************************
  60. '''izvršava se uporabom operatora "=". U Pythonu kažemo da varijabla nakon
  61. pridruživanja pokazuje na neku vrijednost, npr. nakon:'''
  62. a = 1
  63. '''kažemo da varijabla a pozuje na vrijednost 1. Ujedno je gornje pridruživanje
  64. implicitno odredilo i tip varijable a (cjelobrojna varijabla). Moguće je
  65. varijabli promijeniti tip, pa će nakon'''
  66. a = 0.5
  67. ' varijabla a biti tipa float, a nakon'
  68. a = "********"
  69. '''očito će biti tipa string (no to zasigurno neće doprinijeti razumljivosti
  70. programa). Osim implicitnog određivanja tipa, moguće je varijabli eksplicitno
  71. odrediti tip pomoću neke od funkcija int(), float(), str() ili bool(). Npr:'''
  72. b = bool(5)
  73. '''pridružit će varijabli b vrijednost "True", jer sve što nije 0 razvija se u
  74. Pythonu kao istina, kada se pretvori u logički tip podatka. Ako dalje napišemo'''
  75.  
  76. c = float(b)
  77. ''' c će pokazivati na vrijednost 1.0, što je float reprezentacija od True. Pri
  78. tome je funcija float() samo privremeno izračunala vrijednost i odredila tip
  79. podatka pridružen varijabli c, dok je sadržaj varijable b i dalje ostao
  80. nepromijenjen (True).
  81. Moguće je i višestruko pridruživanje u jednoj naredbi, pri čemu vrijednosti mogu biti
  82. potpuno različitog tipa, npr:'''
  83. d, e, f = 3, 4.5, 'ime'
  84.  
  85.  
  86. #Osnovni aritmetički izrazi
  87. #**************************
  88. '''Python u svom interaktivnom ("Shell") sučelju omogućuje računanje aritmetičkih
  89. izraza poput velikog kalkulatora:
  90. >>> 1 + 3 * 4 / 5 - 9 % 3
  91. 3.4
  92. pri čemu može računati sa svim vrijednostima koje su prethodno bile pridružene
  93. određenim varijablama:
  94. >>> cijeli_broj * c
  95. 1.2345678901234568e+29
  96.  
  97. Ukoliko se ne koriste okrugle zagrade, vrijednost izraza izračunava se prema
  98. prioritetima aritmetičkih operatora, pri čemu se operacije istog prioriteta
  99. obavljaju s lijeva na desno:
  100. 1. ** potenciranje
  101. 2. - negacija
  102. 3. *, /, //, % množenje, dijeljenje, cjelobrojno dijeljenje, ostatak
  103. 4. +, - zbrajanje, oduzimanje
  104.  
  105. Obično dijeljenje rezultira u Pythonu uvijek float tipom podatka:
  106. >>> 6 / 2
  107. 3.0
  108.  
  109. tek cjelobrojno dijeljene dva integera rezultira integerom
  110. >>> 5 // 3
  111. 1
  112. dok je ostatak cjelobrojnog dijeljenja
  113. >>> 5 % 3
  114. 2
  115.  
  116. Često se umjesto punih izraza koriste skraćeni, pogotovo kada se varijabla nalazi
  117. s lijeve i desne strane znaka pridruživanja. Tako se umjesto
  118. a = a + 1 koristi a += 1;
  119. Analogno:
  120. a = a * (b + 3 ) -> a *= b + 3
  121. a = a / 0.5 -> a /= 0.5
  122. a = a ** 2 -> a **= 2
  123. a = a % 4 -> a %= 4
  124.  
  125. '''
  126. #Relacijski i logički izrazi
  127. #***************************
  128. '''Potrebni su nam za donošenje odluka u programima. Relacijski operatori ili
  129. operatori usporedbe su:
  130. >, <, >=, <=, ==, !=
  131. (veće, manje, veće ili jednako, manje ili jednako, jednako, različito od)
  132.  
  133. Logički operatori su "and", "or" i "not", a služe nam uglavnom za sastavljanje složenih
  134. logičkih sudova.
  135. "and" vraća True samo ako su oba podizraza istinita, u suprotnom vraća False
  136. "or" vraća True ukoliko je bilo koji od podizraza istinit
  137. "not" negira vrijednost izraza, dakle True pretvara u False i obratno.
  138. Logički sudovi, bili jednostavni ili složeni, rješavaju se isključivo kao True ili False
  139. Na primjer:
  140. >>> a, b, c = 2, 4, 6
  141. >>> a < b and b < c + 3 or not c
  142. True
  143. U složenim izrazima najprije se rješavaju aritmetički izrazi, zatim izrazi
  144. usporedbe i na kraju logički
  145. '''
  146.  
  147. #Formatirani ispis i upis
  148. #************************
  149. '''Ugrađenom funkcijom print() moguće je ispisati varijable i stringove u željenom
  150. formatu. Na primjer:
  151. >>> a = 1; b = 2
  152. print("Zbroj ", a, "i", b, "daje", a + b)
  153. Zbroj 1 i 2 daje 3
  154.  
  155. može se elegantnije (i programerski profesionalnije) napisati kao:
  156. >>> print("Zbroj {0} i {1} daje {2}".format(a, b, a + b))
  157. Zbroj 1 i 2 daje 3
  158.  
  159. Redne brojeve u vitičastim zagradama možemo izostaviti, a preciznost ispisa
  160. možemo dodatno definirati zadajući broj znakova kojim će se određena varijabla
  161. prikazati. Na primjer:
  162. >>> x = 5.2; y = 6.35; z = 8
  163. >>> print('x + y + z = {:.2f} + {:.2f} + {:.2f} = {:.4f}'.format(x, y, z, x + y + z))
  164. x + y + z = 5.20 + 6.35 + 8.00 = 19.5500
  165. Primijetite da je varijabla z, inače integer, ispisana kao float. Pokušaj da se float
  166. podatak ispiše kao integer (pomoću {:d}) rezultirao bi greškom, ukoliko se ne primjeni i
  167. eksplicitna promjena tipa podatka :
  168.  
  169. print('x + y + z = {:.0f} + {:.0f} + {:.0f} = {:d}'.format(x, y, z, int(x + y + z)))
  170. x + y + z = 5 + 6 + 8 = 19
  171.  
  172. Upis podataka također je moguće formatirati - treba imati u vidu da svaki upis
  173. pomoću tastature i funkcije input() biva najprije unesen kao string podatak, koji se
  174. kasnije pomoću drugih funkcija pretvara u tip podatka koji nam je potreban. Npr:'''
  175. n = int(input("Unesite zbroj {} i {}:".format(5,7)))
  176. '''funkcija input() najprije učitava string koji je poslan putem tastature u trenutku kada
  177. je korisnik pritisnuo tipku enter. Ako je sadržaj tog stringa (skupa znakova) nešto što se
  178. može interpretirati kao cijeli broj, tada će funkcija int() vratiti cjelobrojnu
  179. reprezentaciju ulaznog stringa i pridružiti varijabli n, u suprotnom program će prijaviti
  180. grešku.
  181.  
  182.  
  183. '''
  184.  
  185. #Struktura programa
  186. #******************
  187. '''Najjednostavniju strukturu programa čine naredbe koje se nižu jedna za drugom i tako
  188. čine blok naredbi. Pozicija početka naredbe određuje pripadanje određenom bloku,
  189. u suprotnom se javlja sintaktička greška (unexpected indent) ili, što je ponekad
  190. puno teže uočiti, logička pogreška!
  191. Izbor alternativnih blokova donosi nam naredba "if", koja se može kombinirati s ključnim
  192. riječima "else" i "elif". Blok koji će se izvršiti ukoliko je uvjet istinit najavljuje se
  193. dvotočkom, nakon čega treba uvući u desno (preporučljivo za 4 znaka) naredbe koje
  194. slijede i pripadaju istom bloku, kao u slijedećem primjeru '''
  195. brojac = 0
  196. if n == 12:
  197. print('Odgovorili ste točno.')
  198. brojac += 1
  199. elif n == 0:
  200. print('Nula je rezervirani znak za kraj programa!')
  201. else:
  202. print('Odgovorili ste netočno.')
  203.  
  204. print('Broj točnih odgovora je ', brojac)
  205.  
  206. '''U if-elif-else strukturi izvršava se samo jedan blok, onaj čiji uvjet prvi bude
  207. zadovoljen - ostali blokovi u strukturi se preskaču.
  208. Slijedeći kratki primjer učitava tri broja i ispisuje ih po veličini koristeći
  209. mogućnost zamjene varijabli'''
  210. a, b, c = float(input('Unesite tri realna broja\na = ')), float(input('b = ')), float(input('c = '))
  211. if a > b:
  212. a, b = b, a
  213. if a > c:
  214. a, c = c, a
  215. if b > c:
  216. b, c = c, b
  217. print("Brojevi poredani po veličini su: {}, {}, {}".format(a,b,c))
  218.  
  219. '''Jednu od najmoćnijih struktura predstavljaju naredbe koje omogućavaju ponavljanje
  220. određenog bloka naredbi - tzv. petlje. U Pythonu razlikujemo dvije osnovne petlje, "for"
  221. i "while". Kada nam je broj ponavljanja (iteracija) poznat, odnosno kada ga možemo unaprijed
  222. izračunati, primjereno je upotrijebiti "for" petlju. Kada je ponavljanje nekog bloka
  223. uvjetovano akcijom korisnika ili nepredvidljivim ishodom nekog izračuna, ili nam je
  224. algoritam koji koristimo takve prirode da nam je jednostavnije postaviti uvjet za
  225. ponavljanje od izračunavanja unaprijed poznatog broja koraka, koristimo petlju "while".'''
  226.  
  227. print('Primjeri for petlje')
  228. for i in range(8):
  229. print('--------{}'.format((i+1)*10), end = '')
  230. print()
  231.  
  232. rijec = 'Abrakadabra'; br_a = 0
  233. for slovo in rijec:
  234. if slovo.upper() == 'A':
  235. br_a += 1
  236. print('U rijeci \'{}\' nalazi se {} slova a.'.format(rijec, br_a))
  237.  
  238. '''U gornjim primjerima varijabla iza ključne riječi "for" (i, slovo) poprima niz vrijednosti
  239. tzv. iterabilnog elementa koji dolazi iza ključne riječi "in" - to mogu biti vrijednosti koje
  240. generira funkcija range() ili vrijednosti koje se nalaze u nekoj vrsti liste vrijednosti
  241. (u gornjem primjeru varijabla rijec se moze promatrati kao niz znakova, a varijabla slovo će
  242. poprimiti u svakoj iteraciji vrijednost novog znaka iz niza, uvećanog pomoću metode upper().
  243. '''
  244. print('Primjeri while petlje')
  245. uvjet = False
  246. while not uvjet:
  247. k = 0
  248. unos = input('Unesite cijeli broj: ')
  249. for znak in unos:
  250. if znak < '0' or znak > '9':
  251. k += 1
  252. if k == 0:
  253. uvjet = True
  254. a = int(unos)
  255. while a != '0':
  256. a = input('Unesite 0 za izlaz iz petlje ')
  257. print('Hvala')
  258.  
  259. #Podatkovne zbirke
  260. #*****************
  261. ''' Osim osnovnih tipova podataka, Python nudi organiziranje podataka u određene podatkovne
  262. strukture, od kojih svaka nudi neke posebne pogodnosti:
  263.  
  264. stringovi - ako ih promatramo kao niz znakova od kojih svaki ima svoje mjesto, odnosno indeks
  265. pomoću kojeg je moguće dohvatiti bilo koji znak iz niza.'''
  266. recenica = 'Ovo je string ali i niz znakova!'
  267. print('Rečenica:', recenica)
  268. print('Peti znak u rečenici nalazi se pod indeksom 4 i to je slovo: ', recenica[4])
  269.  
  270. '''sadržaj stringa je nepromjenjiv, ali se stringovi mogu odsjecati i kombinirati u nove
  271. stringove. Također, nad stringovima vrijede operatori +, *, in, not in '''
  272. nova_recenica = recenica[0:7] + 'nova rečenica' + '!' * 3
  273. if 'nova' in nova_recenica:
  274. print(nova_recenica)
  275. '''
  276. Ugrađene funkcije za stringove
  277. (preuzeto iz knjige Budin i ostali: Rješavanje problema programiranjem u Pythonu):
  278. len(s)- vraća duljinu string
  279. min(s)- vraća znak s najmanjom kodnom vrijednošću
  280. max(s)- vraća znak s najvećom kodnom vrijednošću
  281. ord(s)- vraća dekadni kod pojedinog znaka
  282. chr(s)- vraća znak pojedinog dekadnog koda
  283. str(n)- vraća znakovni prikaz broja n
  284.  
  285. neke od metoda nad stringovima:
  286. s.lower() - vraća kopiju stringa s sa svim malim slovima
  287. s.upper() - vraća kopiju stringa s sa svim velikim slovima
  288. s.index(s1) - vraća poziciju prvog pojavljivanja stringa s1 u stringu s
  289. ****************************************************************************************
  290. tupple ili n-torka - omogućuje stvaranje grupe podataka različitog tipa,
  291. posebno pogodno za vraćanje više vrijednosti odjednom iz funkcije'''
  292. kolicnik, ostatak = divmod(15, 4)
  293. print('Tupple ili n-torka', (kolicnik, ostatak))
  294. '''****************************************************************************************
  295. liste - vrlo korisne zbirke koje omogućuju grupiranje srodnih podataka pod jednim imenom
  296. te dohvaćanje po indeksu. Često se za kreiranje liste koristi for petlja.
  297. Funkcija list() pretvara strin u listu. '''
  298.  
  299. radni_dani = ['ponedjeljak', 'utorak', 'srijeda', 'četvrtak', 'petak']
  300. sijecanj = [i+1 for i in range(31)]
  301. engl_abeceda = [chr(i) for i in range(ord('a'), ord('z')+1)]
  302. hrv_abeceda = list('abcčćdđ') + ['dž'] + list('efghijkl') + ['lj', 'm', 'n', 'nj'] \
  303. + list('oprsštuvzž')
  304. print('Hrvatska abeceda')
  305. for slovo in hrv_abeceda:
  306. print('{}'.format(slovo), end = ' ')
  307. print()
  308.  
  309. 'ispravno kopiranje liste'
  310. ozujak = sijecanj[:]
  311.  
  312.  
  313. '''operatori, metode i ugrađene funkcije nad listama
  314. (preuzeto iz knjige Budin i ostali: Rješavanje problema programiranjem u Pythonu):
  315. operatori: +, *, in, not in - isto kao nad stringovima
  316.  
  317. metode:
  318. lista.append(x) - dodaje element x na kraj liste "lista"
  319. lista.extend(lista2) - dodaje elemente liste "lista2" na kraj liste "lista"
  320. lista.insert(i, x) - umeće element x prije i-tog elementa liste
  321. lista.remove(x) - izbacuje prvu pojavu elementa x iz liste
  322. lista.pop([i]) - izbacuje i-ti element iz liste i vraća njegovu vrijednost.
  323. ako i nije specificiran, izbacuje element s najvećim indeksom (zadnji)
  324. lista.reverse() - okreće redoslijed elemenata liste
  325. lista.sort - sortira listu prema rastućim vrijednostima elemenata liste
  326.  
  327. ugrađene funkcije:
  328. len(lista) - vraća duljinu liste (broj elemenata)
  329. min(lista) - vraća najmanju vrijednost liste
  330. max(lista) - vraća najveću vrijednost liste
  331. ****************************************************************************************
  332. set ili skup - podatkovna zbirka u kojoj se neka vrijednost može pojaviti samo jednom
  333. elemente skupa pišemo unutar vitičastih zagrada
  334. osnovne funkcije nad skupovima iste su kao kod stringa i listi
  335. prazan skup definira se funckijom set(), a istom funkcijom moguće je string ili
  336. listu pretvoriti u skup
  337. nad skupovima vrijede skupovni operatori:
  338. | - unija
  339. & - presjek
  340. - - razlika
  341. ^ - simetrična razlika
  342. in - element skupa
  343. not in - nije element skupa
  344. <, <= - podskup
  345. >. >= - nadskup
  346. != - različito
  347. == - jednako
  348. (preuzeto iz knjige Budin i ostali: Rješavanje problema programiranjem u Pythonu)
  349. '''
  350. radni_dani = {'ponedjeljak', 'utorak', 'srijeda', 'četvrtak', 'petak'}
  351. neradni = {'subota', 'nedjelja'}
  352. print("Skup dani u tjednu: ", radni_dani | neradni)
  353. set_samoglasnika = set('Nadam se da u ovom stringu ima svih samoglasnika') & {'a', 'e', 'i', 'o', 'u'}
  354. print("Set samoglasnika", set_samoglasnika)
  355. '''
  356. ***********************************************************************************************
  357. rječnik - podatkovna zbirka slična listi, no umjesto pomoću indeksa, element liste moguće je
  358. dohvatiti pomoću ključa (koji opet može biti bilo što - brojevi, slova, riječi)
  359. elementi rječnika upisuju se između vitičastih zagrada kao par ključ : vrijednost
  360. (pri čemu vrijednost može također biti neka druga podatkovna zbirka)
  361. '''
  362. ocjene = {1:'nedovoljan', 2:'dovoljan', 3:'dobar', 4:'vrlo dobar', 5:'izvrstan'}
  363. grades = {'A':5, 'B':4, 'C':3, 'D':2, 'F':1}
  364. a = input('Unesite slovčanu ocjenu (A-F): ')
  365. print('Unijeli ste ocjenu', ocjene[grades[a]])
  366.  
  367. '''
  368. Operatori, funkcije i metode nad rječnicima
  369. (preuzeto iz knjige Budin i ostali: Rješavanje problema programiranjem u Pythonu)
  370.  
  371. len(d) - vraća broj svih elemenata sadržanih u rječniku d
  372. d[k] - vraća vrijednost koja pripada ključu k
  373. del(d[k]) - briše ključ k i njemu pripadnu vrijednost
  374. k in d - vraća True ako se ključ k nalazi u rječniku d
  375. k not in d - vraća True ako se ključ ne nalazi u rječniku d
  376.  
  377. d.keys() - vraća listu svih ključeva
  378. d.values() - vraća listu svih vrijednosti
  379. d.items() - vraća listu parova (ključ, vrijednost)
  380. d.update(drugi) - dodaje rječniku d rječnik drugi; za one ključeve koji već postoje
  381. u d prepisuju se vrijednosti iz drugi
  382. d.get(k) - vraća vrijednost d[k]; ako ključ ne postoji u rječniku, vraća None
  383. d.clear - briše sve elemente iz rječnika (ostaje prazan rječnik)
  384. ************************************************************************************************
  385. datoteke - služe za trajnu pohranu svih vrsta informacija na računalu. Također, omogućuju razmjenu
  386. podataka među različitim programima.
  387. U gradivu smo razmatrali znakovne datoteke - njih možemo promatrati string proizvoljne
  388. veličine, koje možemo obrađivati posebnim metodama za datoteke. Općenito govoreći, iz
  389. datoteke čitamo podatke ili ih pak u nju upisujemo. Pristup datotekama ostvaruje se
  390. korištenjem datotečnog podsustava operacijskog sustava, a početna veza s datotekom
  391. ostvaruje se funkcijom "open", općeg oblika
  392.  
  393. open(ime funkcije, način_uporabe)
  394.  
  395. ime funkcije treba sadržavati kompletnu putanju do datoke, dok je način uporabe jedan
  396. od slijedećih:
  397. 'r' - datoteka se otvara za čitanje (ako ne postoji, javlja grešku)
  398. 'w' - datoteka se otvara za pisanje (ako postoji, njen se sadržaj prepisuje)
  399. 'a' - datoteka se otvara za dodavanje (metodom write dodaju se novi podaci na kraj datoteke)
  400.  
  401. Nakon uporabe, datoteku je potrebno zatvoriti pomoću metode close() (podaci neće biti
  402. spremljeni u datoteku na disku ukoliko to ne učinimo)
  403. Neke od ostalih metoda nad datotekama:
  404. (preuzeto iz knjige Budin i ostali: Rješavanje problema programiranjem u Pythonu)
  405. f.read() - cijeli sadržaj datoteke f pročita se i vraća kao jedan string
  406. f.readline() - čita cijeli redak iz datoteke f(do znaka\n)- kada dođe do kraja datoteke
  407. vraća prazan string
  408. f.readlines() - datoteka f se čita po redcima i vraća se lista stringova pojedinih redaka
  409. f.seek(n) - pokazivač se postavlja na položaj n (vraćanje na početak: f.seek(0))
  410. f.tell() - vraća trenutni položaj pokazivača
  411. f.write(s) - smješta string s u datoteku (ako je otvorena za pisanje, briše se prethodni
  412. sadržaj, ako je otvorena za dodavanje, string se dodaje na kraj
  413.  
  414.  
  415. ime_dat = 'C:\\Users\\bnozica\\MyPython\\polinomi'
  416. file = open(ime_dat, 'r')
  417. print("Sadržaj datoteke 'polinomi'\n", file.read())
  418. file.close()
  419. '''
  420.  
  421. #Funkcije i moduli
  422. ##################
  423. '''Razlaganje programa na manje logičke cjeline (funkcije) predstavlja ključ pisanja čitljivih
  424. programa koji se uz to i lako održavaju. Python dolazi s mnogim ugrađenim funkcijama i metodama
  425. za određene tipove podatka, od kojih su neke dostupne uvijek, dok se druge nalaze u tzv.
  426. modulima i moraju se uvesti pomoću naredbe import. Kada stvaramo vlastite funkcije, također ih
  427. možemo grupirati i spremati u vlastite module.
  428. '''
  429. from random import *; 'uvoz svih funkcija modula random'
  430. import sys; '''uvoz modula sys. Nakon toga određenu funkciju treba pozvati pomoću
  431. imena modula i točke (npr. sys.path)'''
  432. '''
  433.  
  434. Važno je shvatiti prirodu komunikacije s funkcijama. Sve varijable navedene u funkcijama lokalne
  435. su za tu funkciju i nemaju nikakve veze s varijablama istog imena u drugim funkcijama.
  436. Izuzetak su varijable koje su definirane izvan bilo koje funkcije i nalaze se u programu napisane
  437. prije naše funkcije - to su tzv. globalne varijable i u pravilu ih treba izbjegavati u našim
  438. programima.
  439. Sva komunikacija s funkcijama odvija se preko poziva funkcije imenom, predajom eventualnih
  440. ulaznih parametara funkciji i prihvaćanjem rezultata ukoliko ga funkcija vraća!!!
  441.  
  442. Preporučljivo je naredbe glavnog programa grupirati u funkciju naziva main() - u tom slučaju
  443. glavni program sastoji se samo od poziva funkcije main().
  444.  
  445. '''
  446.  
  447.  
  448. #prilagodite putanju za datoteku svom računalu, a zatim otkomentirajte kod
  449. '''
  450. def main():
  451. ime_dat = 'C:\\Users\\bnozica\\MyPython\\polinomi'
  452. file = open(ime_dat, 'w')
  453. kraj = 0
  454. while not kraj:
  455. p = ucitaj_polinom()
  456. if p > []:
  457. ispisi_polinom(p)
  458. zapisi_u_datoteku(file, p)
  459. else:
  460. kraj = 1
  461. file.close()
  462.  
  463.  
  464.  
  465. def ucitaj_polinom():
  466. kraj = 0
  467. while not kraj:
  468. p = []
  469. s = int(input('Unesite stupanj polinoma (<= 10), 0 za kraj '))
  470. if s == 0:
  471. kraj = 1
  472. elif s > 10:
  473. print('Pogrešan unos!')
  474. else:
  475. for m in range(s,-1,-1):
  476. print('Unesite koeficijent uz stupanj ', m, end = '-> ')
  477. p += [int(input())]
  478. kraj = 1
  479. return p
  480.  
  481. def ispisi_polinom(p):
  482. print('\nPolinom:')
  483. n = len(p); i = 0
  484. while i < n:
  485. if p[i] == 0:
  486. 'koeficijent je 0 pa se preskače ispis i ide na novi član'
  487. i += 1
  488. continue
  489. if i > 0 and p[i] > 0:
  490. 'ispisuje "+" nakon prvog monoma ako je koeficijent > 0'
  491. print(' + ', end = '')
  492. elif p[i] == -1:
  493. 'ispisuje "-" ako je koeficijent = -1 (jedinica se ne ispisuje)'
  494. print(' - ', end = '')
  495. if n - i > 2:
  496. 'ako je potencija 2 ili više ispisuje ju, a koeficijente samo ako'
  497. 'su različiti od 1 ili -1'
  498. print('{}x**{} '.format(p[i]if abs(p[i]) != 1 else '', n-1-i), end = '')
  499. elif n - i == 2:
  500. 'ispis koeficijenta uz monom prvog stupnja'
  501. print('{}x'.format(p[i]if abs(p[i]) != 1 else ''),end = '')
  502. else:
  503. 'ispis slobodnog člana ako postoji'
  504. print(p[i], end = '')
  505. i += 1
  506. 'na kraju prijelaz u novi red'
  507. print()
  508.  
  509. def zapisi_u_datoteku(dat,polinom):
  510. 'koeficijenti polinoma se zapisuju u obrnutom redoslijedu'
  511. polinom = polinom[len(polinom)::-1]
  512. koeficijenti = ''
  513. for k in polinom:
  514. koeficijenti += str(k) + ' '
  515. dat.write(koeficijenti + '\n')
  516.  
  517. main()
  518.  
  519. '''
  520. '''Program koji simulira izvlačenje karata iz zadanog broja špilova
  521.  
  522. i prepoznaje u izvučenim kartama parove, tris ili poker'''
  523.  
  524.  
  525.  
  526. from random import *
  527.  
  528. #oznake karata koje želimo u igri
  529.  
  530. KARTE = ['7', '8', '9', '10', 'J', 'Q', 'K', 'A']
  531.  
  532. #unicode kodovi za simbole karata ['♠', '♥', '♦', '♣']
  533.  
  534. BOJE = [u"\u2660", u"\u2665",u"\u2666", u"\u2663"]
  535.  
  536.  
  537.  
  538.  
  539.  
  540. def spil_karata():
  541.  
  542. spil = []
  543.  
  544. for boja in BOJE:
  545.  
  546. for karta in KARTE:
  547.  
  548. spil.append(karta + boja)
  549.  
  550. return spil
  551.  
  552.  
  553.  
  554. def generiraj_sve_karte(broj_spilova):
  555.  
  556. sve_karte = []
  557.  
  558. for _ in range(broj_spilova):
  559.  
  560. sve_karte += spil_karata()
  561.  
  562. shuffle(sve_karte)
  563.  
  564. return sve_karte
  565.  
  566.  
  567.  
  568. def racunaj(hand):
  569.  
  570. karte = {k:0 for k in KARTE}
  571.  
  572. for k in karte:
  573.  
  574. for karta in hand:
  575.  
  576. if k in karta:
  577.  
  578. karte[k] += 1
  579.  
  580. hand = []
  581.  
  582. for k in karte:
  583.  
  584. if karte[k] == 2:
  585.  
  586. hand.append('par(' + k + ')')
  587.  
  588. elif karte[k] == 3:
  589.  
  590. hand.append('tris('+ k + ')')
  591.  
  592. elif karte[k] >= 4:
  593.  
  594. hand.append('poker('+ k + ')')
  595.  
  596. return hand
  597.  
  598.  
  599.  
  600. def main():
  601.  
  602. broj_spilova = 2
  603. broj_izvucenih_karata = 5
  604. broj_izvlacenja = 10
  605. sve_karte = generiraj_sve_karte(broj_spilova)
  606.  
  607. print('Generirane karte:\n', sve_karte, '\n')
  608.  
  609. for i in range(broj_izvlacenja):
  610.  
  611. print(i+1, end = '\t')
  612.  
  613. hand = []
  614.  
  615. for _ in range(broj_izvucenih_karata):
  616.  
  617. karta = sve_karte.pop()
  618.  
  619. print('{:4s}'.format(karta), end = ' ')
  620.  
  621. hand.append(karta)
  622.  
  623. hand = racunaj(hand)
  624.  
  625. print('\t',hand)
  626.  
  627.  
  628.  
  629. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement