Ladje potrebujejo gorivo. Količina goriva je odvisna od teže tovora. V navodilih za uporabo piše takole: težo tovora celoštevilsko delimo s 3 (torej: delimo s 3, a zaokroženo navzdol) in odštejemo 2. To ponavljamo, dokler ne dobimo števila, ki je manjše ali enako 0. Za prevoz potrebujemo toliko ton goriva, kolikor korakov je bilo potrebnih.
Za primer vzemimo, da je teža tovora 756 ton.
756 / 3 - 2 = 250
250 / 3 - 2 = 81
81 / 3 - 2 = 25
25 / 3 - 2 = 6
6 / 3 - 2 = 0
Ker smo za to, da smo prišli do 0 (ali manj) potrebovali pet korakov, potrebujemo 5 ton goriva.
Napiši program, ki mu vnesemo maso tovora in izpiše količino goriva. Če vnesemo 756, izpiše 5. Če vnesemo 100756, izpiše 10.
Potrebovali bomo zanko, ki bo tekla, dokler masa ne pade na 0
(while masa > 0
). V vsakem koraku deli maso
(celoštevilsko! //
!) s 3 in odšteje 2. Pa korake šteje, da
lahko na koncu izpiše, koliko jih je bilo.
= int(input("Masa: "))
masa
= 0
gorivo while masa >= 0:
= masa // 3 - 2
masa += 1
gorivo print(gorivo)
Masa: 100756
10
V resnici smo navodila brali čisto narobe. (Ni čudno: ladjo smo kupili na Ali Expressu za $35 (s pošiljanjem zastonj) in angleški prevod navodil je bil enaka katastrofa kot običajno.) Dejansko gre takole: za 756 ton tovora, potrebujemo 756 / 3 - 2 = 250 ton goriva. Problem pa je v tem, da je potrebno tudi to gorivo voziti. Za prevoz teh 250 ton goriva potrebujemo še 250 / 3 - 2 = 81 ton goriva. In tako naprej. Količina potrebnega goriva je torej vsota vseh gornjih števil: 250 + 81 + 25 + 6 = 362 ton goriva.
Dopolni program, da bo poleg številke iz obveznega dela izpisal tudi številko izračunano po tem receptu. Če vnesemo 756 izpiše 5 (tako kot prej) in nato 362. Če vnesemo 100756 izpiše 10 (tako kot prej) in nato 50346.
Opombi: ladja ima slab izkoristek, vem. (Kaj, točno, smo pa pričakovali od ladje z Ali Expressa?) In še: teh 756 ton goriva ne vozimo celo pot; ko gorivo kurimo, je ladja vedno lažja. Tudi to bi lahko upoštevali, vendar najbrž nočete, da vam preveč zapletem nalogo. :)
Najpreprosteje bi bilo tako:
= 100756 # Da ne bo potrebno vedno znova tipkati v `input`
masa
= 0
gorivo while masa > 0:
= masa // 3 - 2
masa += masa
gorivo print(gorivo)
50344
Vendar to ne dela pravilno, ker je lahko masa v zadnjem koraku tudi negativna. Da je ne bi prištevali, dodamo pogoj:
= 100756 # Da ne bo potrebno vedno znova tipkati v `input`
masa
= 0
gorivo while masa > 0:
= masa // 3 - 2
masa if masa > 0:
+= masa
gorivo print(gorivo)
50346
Tipičen trik, ki bi ga uporabili, da se temu izognemo, je funkcija
max
: podamo ji dve števili in vrne večjega. (Lahko ji
podamo tudi seznam in vrne največji element seznama, vendar seznamov še
ne poznamo.)
= 100756 # Da ne bo potrebno vedno znova tipkati v `input`
masa
= 0
gorivo while masa > 0:
= masa // 3 - 2
masa += max(0, masa)
gorivo print(gorivo)
50346
Če je masa pozitivna, bo `max(0,