While petlja(2)
Primer
4: Za uneti broj x ispitati da li je prost.
prost=True
i=2
x=int(input('unesite x '))
n=round(x**(1/2))
while i<=n and prost:
if x%i==0:
prost=False
i=i+1
if prost:
print('broj je prost')
else:
print('broj nije prost')
Postavljamo promenljivu prost
na vrednost tačno jer nam je to jedan od uslova za izvršavanje ciklusa. Ovaj
zadatak nam je ujedno i ilustracija rada sa konstantama i promenljivima logičkog
tipa.
Da se podsetimo, broj je
prost ako nije deljiv ni sa jednim brojem osim sa samim sobom.
Međutim, ciklus ne mora da se
izvršava do vrednosti samog broja, već je dovoljno ići do korena. Ako broj do
korena nema delilaca, neće ih imati ni nadalje. Pošto je za koren moguća realna
vrednost, zaokružili smo ga na ceo sa round.
Uslov za while je da je
mogući delilac i ( koji smo na početku stavili na dvojku) manji od korena i da
je vrednost promenljive prost tačno.
U ciklusu ispitujemo da li je
broj deljiv sa i. Ako jeste, broj automatski nije prost, tako da promenljiva
prost dobija vrednost netačno i iz ciklusa se izlazi.
Ako nije, uvećavamo i za 1 i
nastavljamo ispitivanje deljivosti.
Uglavnom, čim se u ciklusu
pojavi neki delilac broja, završava se, jer broj tada nije prost.
Interesantna je izlazna if.
Nema klasičnog uslova nego je stavljena samo promenljiva prost.
Ako joj je vrednost True broj
je prost, a ako je False, broj nije prost.
Primer
5: Za uneti broj n prebrojati koliko ima cifara
n=int(input('unesite n '))
k=0
while n>0:
n=n//10
k=k+1
print('broj cifara je ',k)
Uneti broj celobrojno delimo
sa 10. Istovremeno sa svakim deljenjem brojač uvećavamo za 1. Ciklus se
izvršava dok ne dobijemo nulu kao rezultat, što je znak da smo došli do
poslednje cifre. Praktično, sa svakim okretanjem ciklusa, tj. sa svakim
deljenjem, odbacujemo po jednu cifru i istovremeno brojač cifara uvećavamo za
1.
Primer 6: Za uneti broj n
ispitati da li je palindrom
n=int(input('unesite n '))
m=n
s=0
while m>0:
s=s*10+m%10
m=m//10
if s==n:
print('Broj je palindrom')
else:
print('Broj nije palindrom')
Unosimo prirodan broj.
Palindrom je ako ima istu vrednost i ako se čita naopačke, npr 1221 je
palindrom. Zadatak ćemo rešiti tako što ćemo formirati drugi broj, kome ćemo
obrnuti cifre. Ako su uneti i novodobijeni broj jednaki, to znači da je broj
palindrom. Na primer, od broja 1234 napravićemo 4321, a pošto su uneti i
dobijeni broj različiti, ovaj broj nije palindrom.
Pošto nam uneti broj n treba
na kraju za upoređivanje, sačuvaćemo njegovu vrednost i koristiti pomoćnu
promenljivu m koju ćemo menjati u ciklusu.
S je novodobijeni broj sa
obrnutim ciframa.
U ciklusu uzimamo ostatak deljenja broja sa 10 ( to nam je uvek
preostala poslednja cifra broja sa desne strane, tj cifra jedinica)
m=1234 m%10=4
Znači u prvom prolasku kroz
ciklus novodobijeni broj je 4.
Sada m delimo sa 10 i
dobijamo 123
U
sledećem prolasku s=s*10+m%10 što znači da od 4 dobijamo 40 i na to dodajemo 3
pa nam je novodobijeni broj 43, a m dobija novu vrednost 12 posle m=123//10.
U sledećem prolasku
s=s*10+m%10 što znači da od 43 dobijamo 430 i na to dodajemo 2 pa nam je
novodobijeni broj 432, a m dobija novu vrednost 1 posle m=12//10.
U sledećem prolasku
s=s*10+m%10 što znači da od 432 dobijamo 4320 i na to dodajemo 1 pa nam je
novodobijeni broj 4321, a m dobija novu vrednost 0 posle m=1//10.
Sada je jasno zašto nam je
uslov za izvršavanje ciklusa da je m>0. Kada je m=0 "potrošili"
smo sve cifre i dobili novi broj čije su cifre obrnute od unetog.
Na
izlazu, ako su uneti i novodobijeni broj
jednaki, broj je palindrom, ako nisu, nije.
DOMAĆI ZADATAK:
Dobro proučiti ova tri
primera i isprobati ih u Pajtonu. Pomoći će vam da shvatite i prethodna tri
WHILE zadatka. Ko nije do sada uradio, neka uradi i pošalje prethodne domaće
zadatke.
Srećni uskršnji praznici!
Нема коментара:
Постави коментар