Algoritmi sa stringovima i listama

U ovom poglavlju bavićemo se nekim dodatnim mogućnostima koje Python pruža za rad sa stringovima i listama.

Funkcije: str, int, float, i list

Funkcije str, int, float, i list se koriste za konverziju jednog tipa podataka u drugi tip.

str

Često želimo da konvertujemo broj u string sa ciljem da iskoristimo string metode da broj razbijemo na delove. Built-in funkcija str se koristi da neki podatak pretvorimo (konvertujemo) u string. Evo nekoliko primera:

Naredba Rezultat
str(37) ‘37’
str(3.14) ‘3.14’
str([1,2,3]) ‘[1,2,3]’

int i float

Funkcija int konvertuje podatak u ceo broj (integer). Funkcija float konvertuje podatak u decimalan broj ( floating point) . Evo nekoliko primera.

Naredba Rezultat
int(‘37’) 37
float(‘3.14’) 3.14
int(3.14) 3

Pri konverovanju decimalnog broja u ceo broj, funkcija int odbacuje sve posle decimalne tačke.

list

Funkcija list uzima podatak koji može biti konvetovan u listu, pa od njega napravi listu. Evo dva primera kako se to radi.

list(range(5))

[0,1,2,3,4]

list('abc')

['a', 'b', 'c']

Primeri

Primer 1

Evo primera u kojem se pronalaze i štampaju svi palindromski brojevi od 1 do 10000. Palindromski broj je broj koji je jednak kada se čita bilo unapred bilo unazad, kao na primer brojevi 1221 ili 64546.

for i in range(1,10001):
    s = str(i)
    if s==s[::-1]:
        print(s)

Ovde smo iskoristili str funkciju da broj i konvertujemo u string kako bi mogli da ga segmentiramo .

Primer 2

Evo primera koji kazuje osobi rođenoj 1 Januara, 1991 koliko je stara u 2016 godinai.

datum_rodjenja = '1 Januar, 1991'
godina_rodjenja = int(datum_rodjenja[-4:])
print('Vi imate', 2016-godina_rodjenja, 'godina')

Godina je u poslednja 4 znaka (character-a) u varijabli datum_rodjenja. Koristimo int funkciju da konvertujemo ova 4 znaka u ceo broj kako bi mogli da sa njim vršimo matematičku operaciju oduzimanja.

Primer 3

Napišite program koji za učitani broj num sabira njegove cifre. Na primer, ako je učitani broj 47, program treba da odgovori sa 11 (4+7). Počnimo sa prostim primerom kada je broj dvocifren.

s = str(num)
odgovor = int(s[0]) + int(s[1])

Ideja je da konvertujemo num u string tako da možemo da indeksiramo pojedinačno cifre . Zatim svaku cifru konverujemo nazad u broj int za potrebe sumiranja. Evo sada verzije koja radi za brojeve sa proizviljnim brojem cifara:

s = str(num)
odgovor = 0
for i in range(len(s)):
    odgovor = odgovor + int(s[i])

Ceo gornji program se može napisati u sam jednoj liniji korišćenjem tehnike za sastavljanje (comprehension) liste.

odgovor = sum([int(c) for c in str(num)])

Primer 4

Da razbijemo decimalni broj num, na njegov celobrojni i decimalni deo, možemo upotrebiti sledeće naredbe:

celi_deo = int(num)
deci_deo = num – int(num)  # ili dec_deo = num - celi_deo

Na primer ako je num jednako 12.345, tada je celi_deo 12 a deci_deo 12.345-12=0.345.

Primer 5

Ako želimo da vidimo da li je neki broj prost, to možemo da uradimo proveravajući da li postoji neki njegov delioc različit od 1 i samog tog broja. U nekoj od predhodnih poglavlja videli smo da se to može uraditi sledećom petljom:

for i in range(2,num):

Ovom petljiom bi se vršila provera za sve cele brojeve 2,3,…,num-1. Međutim, ispostavlja se da je dovoljno ispitati deljivost brojevima od 2 do kvadratnog korena broja num. Na primer, da proverimo da li je 111 prost broj, dovoljno je da proverimo da li je on deljiva sa brojevima od 2 do 10, jer je √111 ≈ 10.5. Zato možemo pokušati sa petljom:

for i in range(2,num**.5):

Međutim to bi prouzrokovalo grešku jer num**.5 može biti da nije ceo broj, a range funkcija traži cele brojeve. Korišćenjem funkcije int ispravljamo ovu grešku:

for i in range(2,int(num**.5)+1):

Dodajemo +1 na kraj jer range funkcija ne uključuje poslednju vrednost.

Bulovske varijable (Booleans)

Bulovske varijable u Python-u su varijable koje mogu imati samo jednu od dve vrednosti, True ili False. Evo dva primera setovanja Bulovskih varijabli:

game_over = True
highlight_text = False

Bulovske varijable mogu učiniti vaš program mnogo čitljivijim. One se često koriste kao zastavice (flag) ili da označe dve različite opcije. Često se koriste u uslovima zadatim u if naredbama i while petljama:

if game_over:
    print('Bye!')

Ove naredbe su ekvivalentne:

if game_over:   ↔     if game_over==True:

while not game_over:  ↔   while game_over==False:

Napomena

Uslovni izrazi rezultitraju bulovskim vrednostima i mogu se pridruživati varijablama. Na primer, sledeće pridruživanje daje varijabli vrednost True jer zraz 6==6 ima vrednost True.

x = (6==6)

Već smo se ranije susreli sa bulovskim vrednostima. Metod isalpha kod stringa vraća True ako je svaki znak (character) u stringu slovao, a False u suprotnom slučaju.

Skraćeno pisanje naredbi

Skraćenice za operatore

Operacije kao što je count=count+1 se pojavljuje veoma često pa Python za takve operacije ima skraćeno pisanje. Evo nekoliko primera:

Naredba Skraćeno
count=count+1 count+=1
total=total-5 total-=5
prod=prod*2 prod*=2

Postoje takođe slične skraćenice za operatore /=, %=, //=, and **=.

Skraćenice za operaciju pridruživanja (=)

Umesto:

a = 0
b = 0
c = 0

Možemo pisati:

a = b = c = 0

Još jedna skraćenica za pridruživanje

Recimo da imamo listu L sa tri elementa i da želimo da te elemente pridružimo imenima varijabli. To možemo učiniti ovako:

x = L[0]
y = L[1]
z = L[2]

Umesto toga možemo uraditi i ovako:

x,y,z = L

Slično, možemo pridružiti istovremeno tri ili više varijabli i ovako:

x,y,z = 1,2,3

Kao što smo ranije videli možemo zameniti vrednosti među varijablama na sledeći način:

x,y,z = y,z,x

Skraćenice kod uslova

Evo nekih pogodnih skraćenica za uslove:

Naredba Skraćeno
if a==0 and b==0 and c==0: if a==b==c==0:
if 1<a and a<b and b<5: if 1<a<b<5:

Kratki spoj

Recimo da pišemo program koji pretražuje u listi reči one čije je peto slovo ‘z’. Možemo pokušati na sledeći način:

for w in words:
    if w[4]=='z':
        print(w)

Ali ovim ćemo u nekim slučajevima ( kada su reči kraće od 5 slova) napraviti grešku tipa „string index out of range“. Sledeća if naredna će međutim raditi bez greške i u takvim situacijama:

if len(w)>=5 and w[4]=='z':

Na prvi pogled izgleda da ćemo i sada dobiti grešku za reči kraće od 5 slova jer opet proveravamo w[4]. Razlog što se greška sada neće pojaviti je u „kratkom spoju“ . Python počinje sa ispitivanje prvog dela uslova to jest da li je len(w)>=5. Ako taj uslov nije ispunjen ( ako je False), tada je sigurno da je celi uslov False, pa nema razloga da se bavimo drugim delom uslova . Zato Python neće ni proveravati drugi deo uslova (w[4]==’z’) , pa se greška neće pojaviti.

Kratak spoj se javlja i kod or uslova. U tom slučaju, Python proverava prvi deo or uslova, pa ako je on True ceo uslov će biti True i Python neće proveravati drugi de u or izrazu.

Pisanje naredbe u više linija

Ponekad ćete pisati dugačke linije koda koji bi bio čitljiviji ako bi naredbu pisali u dva ili više redova. Da bi to ostvarili koristimo znak na kraju linije kao u sledećem primeru:

if 'a' in string or 'b' in string or 'c' in string \
   or 'd' in string or 'e' in string:

Vodite računa da na kraju linije iza znaka nema blanko znakova jer bi to vodilo ka sintaksnoj grešci.

Ako unosite listu, rečnik ili argumente funkcije, znak nije potreban. Na primer:

L = ['Joe', 'Bob', 'Sue', 'Jimmy', 'Todd', 'Frank',
     'Mike', 'John', 'Amy', 'Edgar', 'Sam']

Naredba pass

Naredba pass nema nikakvo dejstvo ( ne čini ništa ). Verovali ili ne i takva naredba može biti korisna kako ćemo kasnije videti.

Formatizovanje stringova

Pretpostavimo da pišemo program koji izračunava bakšiš od 25% na račun od 23.60. Kada izvršimo proračun dobijamo 5.9, ali bi želeli da rezultat bude 5.90, a ne 5.9. Evo kako to radimo:

a = 23.60 * 25/100
print('Bakšiš je {:.2f}'.format(a))

Ovde smo iskoristili format metod za string. Evo još jedan primer:

racun = 23.60
baksis = 23.60*.25
print('Baksis: {:.2f}, Ukupno: {:.2f}'.format(baksis, racun+baksis))

Način na koji format metod funkcioniše je da stavimo par zagrada {} tamo gde želimo da formatizujemo vrednost. Argumenti u format metodi su vrednosti koje želimo da formatizujemo, gde prvi argument odgovara prvom paru zagrada, drugi argument drugom paru zagrada itd. Unutar svakog para zagrada stavlja se kod formatizovanja kojim se određuje kako će argument biti formatizovan.

Formatizovanje celih brojeva

Za formatizovanje celih brojeva koristi se kod {:d}. Stavljanjem broja ispred d omogućava nam da cele brojeve poravnavamo udesno. Evo primera:

print('{:3d}'.format(2))
print('{:3d}'.format(25))
print('{:3d}'.format(138))

Izlaz:
  2
 25
138

Broj 3 ispred d označava da će za broj biti određena 3 mesta. Vrednost će biti štampana skroz udesno a preostala mesta na levo biće popunjena blako znacima. Ovakve stvari su korisne za lepše formatiziranje tabela sa brojevima.

Za pozicioniranje celih brojeva u centar (umesto udesno) koristite znak ^ , a za pozicioniranje ulevoznak <.

print('{:^5d}'.format(2))
print('{:^5d}'.format(222))
print('{:^5d}'.format(13834))

  2
 122
13834

Svaka od print naredbi dodeljuje 5 mesta za cele brojeve i pozicionira ih u centar tog dodeljenog prostora.

Stavljanjem zareza kod formatizacije dodaće celom broju zareze na mestima gde je to potrebno. Na primer da štampamo 1,000,000 možemo koristiti naredbu:

print('{:,d}'.format(1000000))

Formatizovanje decimalnih brojeva

Za formatizovanje decimalnih brojeva koristimo kod {:f}. Da bi broj prikazali sa samo dve decimale koristimo kod {:.2f}. Promenom 2 u neki drugi broj menja se broj decimalnih mesta.

I decimalni brojevi se mogu pozicionirati udesno. Na primer {:8.2f} će rezervisati osam mesta od kojih je jedno za decimalnu tačku i dva mesta za deo posle decimalne tačke. Ako je vrednost koja se štampa 6.42, potrebna su samo četiri mesta pa će preostala mesta biti popunjena blanko znacima, a cela vrednost će biti pozicionirana udesno.

Znakovi ^ and < pozicioniraju i decimalne brojeve u centar i ulevo, slično kao i za cele brojeve.

Formatizovanje stringova

Za formatizovanje stringova koristimo kod {:s}. Evo jednog primera koji centrira tekst:

print('{:^10s}'.format('Hi'))
print('{:^10s}'.format('there!'))

    Hi
  there!

Za pozicioniranje udesno koristimo znak > character:

print('{:>6s}'.format('Hi'))
print('{:>6s}'.format('There'))
    Hi
there!

Ima još puno stvari koje se mogu postići formatiziranjem. Za sve opcije pri formatizaciji pogledajte Python documentation.

Ugnježdene petlje

Možete dodavati petlje unutar drugih petlji. Za petlju koja se nalazi unutar druge petlje kažemo da je ugnježdena (nested), i možete, manje više, ugnjezditi petlje do proizvoljne dubine.

Primer 1

Štampanje tablice množenja, 10 × 10.

for i in range(1,11):
    for j in range(1,11):
        print('{:3d}'.format(i*j), end=' ')
    print()

Tablica množenja je dvodimenzioni objekat. Da bi ga napravili, koristimo dve for petlje, jedna za horizonatlni a druga za verikalni smer. Naredba print koristi formatizovanje udesno da bi tablica lepše izgledala. Na kraju print naredbe end=’ ‘ nam omogućava da štampamo više podataka u istoj liniji. Kada završimo sa štampanjem jedne linije nerdbom print() se pomeramo na sledeću liniju.

Primer 2

Jedan od čestih matematičkih zadataka je da se nađu rešenja sistema jednačina. Ponekad želimo samo celobrojna rešenja, i to se može pokazati kao matematički problematično. Međutim, možemo napisati program koji traži ta rešenja metodom „brutalne sile“ (brute force). Ovde nalazimo rešenja (x,y) za sistem 2x+3y=4, x-y=7, gde su x i y između -50 i 50.

for x in range(-50,51):
    for y in range(-50,51):
        if 2*x+3*y==4 and x-y==7:
            print(x,y)

Primer 3

Pitagorina trojka je trojka brojeva (x,y,z) takvih da je x2+y2=z2. Na primer (3,4,5) je Pitagorina trojka jer je 32+42=52. Pitagorine trojke odgovaraju trouglovima čije su stranice celi brojevi (kao 3-4-5-trougao). Ovde je program koji pronalazi sve Pitagorine trojke (x,y,z) kada su x, y, z pozitivni brojevi manji od 100.

for x in range(1,100):
    for y in range(1,100):
        for z in range(1,100):
            if x**2+y**2==z**2:
                print(x,y,z)

Ako izvršite ovaj program, primetićete da postoje redundantna rešenja. Na primer pojavljuju se i rešenje (3,4,5) i (4,3,5) iako su ona zapravo jedno te isto. Da bi se oslobodili ove redundantnosti, promenimo drugu petlju da ide od x do 100. Na taj način kada je x jednako 4, na primer, prva vrednost za y će biti 4, a ne 1, pa zato nećemo dobiti redundantno rešenje (4,3,5). Takođe možemo promeniti i zadnju petlju da ide of y do 100.

Ako sada pogledate rešenja možete uočiti da su mnoga rešenja umnošci od drugih rešenja, kao što su, na primer, rešenja (6,8,9) i (9,12,15) umnošci od rešenja (3,4,5). Sledeći program pronalazi samo primitivne Pitagorine trojke, to jest one koje nisu unošci drugih trojki. To se postiže tako što kad god pronađemo novu trojku, proveravamo da li su x,y,i z deljivi sa istim brojem.

for x in range(1,100):
    for y in range(x,100):
        for z in range(y,100):
            if x**2+y**2==z**2:
                for i in range(2,x):
                    if x%i==0 and y%i==0 and z%i==0:
                        break
                else:
                    print((x,y,z), end=' ')

Primer 4

Sastavljanje lista (list comprehensions) može da sadrži ugnježdene petlje. Sledeći primer kreira string Pyyttthhhhooooonnnnnn:

'';.join([c*i for c in 'Python' for i in range(1,7)])

Vežbe

10.1 Napišite program koji koristi funkcije list i range da kreirate listu [3, 6, 9, … , 99].

10.2 Napišite program koji traži od korsinika da unese težinu u funtama. Program treba da konvertuje težinu u kilograme i da formatizuje rezulat na jedno decimalno mesto.

10.3 Napišite program koji traži od korisnika da unese jednu reč. Presložite slova iz reči tako da budu alfabetski uređena (sortirana) i štampajte tako uređenu teč. Na primer, abracadabra treba da posatne aaaaabbcdrr.

10.4 Napišite program koji uzima listu sa deset cena i deset proizvoda, primeni sniženje cena za 11% i prikazuje izlaz kao što je dole prikazano, sa cenama pozicioniranim udesno i lepo formatizovanim.

Apples    $  2.45
Oranges   $ 18.02
itd.
Pears     $120.03

10.5 Iskoristite sledeće dve liste i format metodu da kreirate listu svih karata u standardnom špilu od 52 karte, u formatu vrednost boja (na primer, ‘Dama Pik’).

boja = ['Herc', 'Karo', 'Tref', 'Pik']
vrednost = ['1', '2', '3', '4', '5', '6', '7',
          '8', '9', '10', 'Žandar', 'Dama', 'Kralj', 'As']

10.6 Napišite program koji koristi bulovske zastavice (flags) kojima se određuje da li dve liste imaju zajedničkih elemenata ili ne.

10.7 Napišite program kojim se kreira lista [1, 11, 111, 1111, ..., 111...1], gde poslednji element liste ima 100 jedinica.

10.8 Napišite program koji nalazi sve brojeve od 1 do 1000 koji su deljivi sa 7 a završavaju se sa 6.

10.9 Napišite program koji određuje koliko brojeva od 1 do 10000 sadrži u sebi cifru 3.

10.10 Sabiranje nekih brojeva sa tim brojevima pročitanim unazad kao rezultat daje palindromski broj. Na primer 241+142=383. Ponekad treba da ponovimo proces. Na primer 84+48=132, 132+231=363. Napišite program koji pronalazi oba takva dvocifrena broja za koje se proces mora ponoviti 20 puta da se dobije palindromski broj.

10.11 Napišite program koji pronalazi sve parove palindromskih brojeva koji su jedan od drugog udaljeni za manje od 20. Jedan takav par su brojevi 199991 i 200002.

10.12 Broj 1961 se čita na isti način ako se gleda odozdole ili odozgore. Štampajte sve brojeve od 1 do 1000000 koji imaju isto takvu osobinu.

10.13 Broj 99 ima svojstvo da ako pomnožimo njegove cifre i tome dodamo zbir njegovih cifara, dobijemo nazad 99. To jest (9 · 9) + (9 + 9) = 99. Napišite program koji nalazi sve brojeve manje od 10000 sa ovakvim svojstvom. (Ima ih samo devet)

10.14 Napišite program za pronalaženje najmanjeg celog broja koji zadovoljava sledeće svojstvo: Ako uzmete prvu cifru i premestite je na kraj broja, broj koji dobijete je 3.5 puta veći od originalnog broja. Na primer ako uzmemo broj 2958 i cifru 2 premestimo na kraj dobijemo broj 9582, koji je 3.5 puta veći od svog originala.

10.15 Napišite program kojim se određuje sa koliko se nula završava broj 1000!.

10.16 Napišite program koji konvertuje decimalan broj visine date u inčima u fite i inče ( 1 fit = 12 inča). Na primer 4.75 fita je 4 fita, 9 inča.

10.17 Napišite program koji ponavlja pitanje kojim se od korisnika traži da unese fudbalski skor u obliku broj pobeda-broj poraza, na primer(27-13 ili 21-3). Korisnik označava da je završio sa unosom kada unese kraj. Program treba da štampa najveći i najmanji skor od svih unetih skorova.

10.18 Napišite program koji ponavlja pitanje o datumu rođenja u formatu mesec/dan (kao 12/25 ili 2/14). Korisnik označava da je završio sa unosom kada unese kraj. Program treba da štampa koliko je od unetih rođendana bilo u februaru i koliko ih je bilo 25-tog u mesecu ( u bilo kom mesecu).

10.19 Napišite program koji traži od korisnika da unese datum u obliku mm/dd/yy i konvertuje ga u govorni oblik. Na primer 02/04/77 tzreba da se konvertuje u Februar 4, 1977.

10.20 Napišite program koji od korisnika traži da unese razlomak u obliku stringa kao što je ‘1/2’ ili ‘8/24’. Program treba da izvrši skraćivanje razlomka i da štampa rezultat. (Skraćivanje razlomka je postupak u kojem se brojilac i imenilac dele zajedničkim deliocem dok god takav postoji).

10.21 Napišite program kojim se nalaze sva rešenje sledećeg problema: Ako jedan mango košta $5, jedan grejpfrut košta $3, a tri jabuke koštaju $1, koliko mango, grejpruta i jabuka čiji ukupan broj je 100 se može kupiti za $100?

10.22 Evo jedne stare zagonetke koju možete rešiti korišćenje „brutalne sile“, tako što ćete napisati program koji ispituje sve mogućnosti: U izrazu 43+57=207 svaka cifra je za jedan različita od svoje stvarne vrednosti. Koja je od mogućih zamena daje tačan rezultat?

10.23 Napišite program koji nalazi celobrojna rešenja Pell-ove jednačine x2-2y2=1, gde su x i y između 1 i 100.

10.24 Napišite program koji traži od korisnika da unese broj, a zatim štampa sve načina na koje taj broj može biti prikazan kao razlika dva perfektna kvadrata, x2-y2, gde su x i y između 1 i 1000. Pisanje brojeva kao razlike dva kvadrata je jedan od inteligentnih tehnika da se faktorišu veliki brojevi.

10.25 Napišite program kojim se simuliraju svi mogući ishodi bacanja četiri kockice i izračunavaju sume svih parova kockica u tom bacanju. Na primer ako je bacanje dalo ishod 5 1 2 4, sume su 6,8,9,3,5 i 6. Za svaku moguću sumu os 1 do 12, nađite ukupan broj simuliranih bacanja u kojima se ta suma pojavljuje, kao i procenat pojavljivanja te sume u svim bacanjima. Štampajte broj pojavljivanja i procenat na jedno decimalno mesto. Da proverite ispravnost rada vašeg programa suma 2 se pojavljuje 171 put ili u 13,2 %.

10.26 U magičnim kvadratima, svaki red, svaka kolona i obe dijagonale imaju istu sumu. Jedan parcijalno popunjeni magični kvadrat je prikazan dole. Napišite progra koji proverom svih mogućnosti popunjava ovaj magični kvadrat.

5 _ _
_ 6 2
3 8 _

10.27 Sledeće je jedan koristan deo programa za igru Podmornice. Pretpostavimo da imamo jednu 5 x 5 listu sastavljenu od nula i M slova. Napišite program kojim se kreira nova 5 x 5 lista koja ima M slova na istom mestu kao i originalna lista, ali umesto nula ima brojeve koji pokazuju koliko ima susednih M slova ( susednih ili horizontalno, vertikalno ili dijagonalno). Dole je prikazan jedan primer. [Pomoć: „kratak spoj“ može biti od pomoći slučajeve „probijanja“ indeksa]

0 M 0 M 0          1 M 3 M 1
0 0 M 0 0          1 2 M 2 1
0 0 0 0 0          2 3 2 1 0
M M 0 0 0          M M 2 1 1
0 0 0 M 0          2 2 2 M 1

10.28 Paskalov trougao je prikazan na donjoj slici. Sa spoljašnje strane su jedinice, a svaki drugi broj u trouglu je zbir dva broja neposredno iznad njega. Napišite program koji generiše Paskalov trougao. Omogućite korisniku da unese broj redova. Obezbedite da trougao bude lepo formatizovan, kao ovaj prikazan dole.

          1
        1   1
      1   2   1
    1   3   3   1
  1   4   6   4   1
1   5  10  10   5   1

10.29 Za dva datuma unesena kao stringovi u formi mm/dd/yyyy gde su godine između 1901 i 2099, odredite koliko ima dana između njih. Evo nekoliko informacija koje mogu biti od pomoći: Prestupne godine između 1901 i 2099 pojavljuju se svake četvrte godine počev od 1904 . Februar ima 28 dana, a 29 u prestupnoj godini. Novembar, April, Jun, i Septembar imaju po 30 dana. Ostali meseci imaju po 31 dan.

10.30 Monte Karlo simulacije se mogu koristiti za procenu raznih stvari uključujući i verovatnoću pri bacanju novčića ili kockica. Kao primer za procenu verovatnoće bacanja dve šestice sa dve kockice, možemo koristiti generator slučajnih brojeva da simuliramo bacanje kockica hiljadama puta i da prebrojimo slučajeve pojave dve šestice i izračunamo procenat pojavljivanja dve šestice.

  • Procenite verovatnoću pojavljivanja Jamba pri bacanju pet kockica. Jamb nastaje kada svih pet kockica padnu na isti broj.
  • Procenite verovatnoću pojavljivanja „linije“ pri bacanju 5 kockica. „Linija“ nastaje kada se pojave brojevi 1-2-3-4-5 ili 2-3-4-5-6 bilo kojim redosledom.

10.31 Procenite srednje najduže uzastopno pojavljivanje „glave“ ili „pisma“ pri bacanju novčića 200 puta.

  • Procenite srednji broj potrebnih bacanja novčića pre nego što se pojavi pet uzastopnih „glava“.
  • Procenite srednji broj bacanja novčića pre nego se pojavi string s, gde je s string glava i pisama kao na primer „GGPPG“.