Sestavi funkcijo, ki v tekstovno datoteko
zapiše prvih n sodih števil, ki niso deljiva s šest. Števila izpišimo ločena z znakom '/', na primer kot:
Naloga
Sestavi funkcijo, ki v tekstovno datoteko
zapiše prvih n sodih števil, ki niso deljiva s šest. Števila izpišimo ločena z znakom '/', na primer kot:
Strategija reševanja
Da rešimo to nalogo, bomo postopoma ponovili vse, kar potrebujemo:
Deljivost naravnih števil
V 6. in 7. razredu smo se naučili pravila za deljivost naravnih števil. Da jih ne pozabimo, jih bomo ponovili:
ZADNJA ŠTEVKA oz ENOMESTNI KONEC:
DVOMESTNI KONEC:
TRIMESTNI KONEC:
VSOTA ŠTEVK:
Če se malo bolje pogleda prve 3 skupine
2 - 5 - 10,
4 - 25 - 100,
8 - 125 - 1000
se kaj hitro opazi lepa pravilnost: produkt manjših dveh je enak največjemu številu.
Nadaljevanje strategije
To pravilnost se lahko uporabi pri iskanju pravila za deljivost s katerim koli sestavljenim številom (tj. ki ni praštevilo ali 1). Mi ga bomo uporabili pri pravilu za deljivost s 6:
2 - 3 - 6
ali drugače
Pravilo za deljivost s 6 bi se torej glasilo:
Torej:
Zakaj s 3?
Zato, ker, če ni deljivo s 3, ni deljivo niti s 6.
Zgoraj napisano ni nujno potrebno za reševanje naše naloge, je pa vseeno dobro ponoviti, če smo slučajno pozabili.
Deljivost s Pythonom
Kako deljivost preverjamo s Pythonom?
Python se lahko med drugim uporabi tudi kot izredno močan kalkulator.
In ena od funkcij, ki jo potrebujemo za reševanje našega problema, je ostanek pri deljenju. Za to se uporablja znak %.
Na primer:
Ker z ostankom 2.
Kakšen je pa ostanek pri deljenju dveh števil, ki sta si v razmerju "večkratnik - delitelj"?
Odgovor:
Je enak številu 0.
Primer:
Ker z ostankom 0
Pogojni stavek
Za preverjanje deljivosti bomo uporabili stavek if oz. pogojni stavek.
Če bo število deljivo z 2 in ne s 3, bo ustrezno, če pa bo deljivo in z 2 in s 3, bo neustrezno in ga ne bomo upoštevali.
Za prevetjanje enakosti (ali bo ostanek pri deljenju enak 2) se uporablja dvojni enačaj "==". Enega uporabimo, ko neki spremenljivki določamo vrednost.
Če želimo preverjati neenakost (ali je ostanek pri deljenju različen od 0) pa uporabimo "!="
Pogoja bi zgledala takole:
ali združena v krajši zapis s pomočjo and:
Zanka for
Če pogledamo množici večkratnikov:
V2 = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20...} in
V6 = {6, 12, 18, 24, 30...}
vidimo, da so vsi večktatniki števila 6 vsebovani v množici večkratnikov števila 2.
Torej potrebujemo nekaj, kar bo "preletelo" vse večkratnike števila 2 in bi izločilo vse večkratnike števila 6 (oz. večkratnike števila 3 - glej četrto stran povezava).
Za to je primerna zanka for.
Imamo spremenljivko i, ki bo tekla od 0 do nekega števila k, s korakom 2.
Katero je pa pravzaprav število k?
To je število, ki mora biti višje od n-tega večkratnika števila, ki ga vnese uporabnik programa, ko bo klical funkcijo z želenim številom večkratnikov števila 2, ki niso večkratniki števila 6.
Torej:
če želi uporabnik 5 izpisanih ustreznih večkratnikov, bi to bili:
2, 4, 8, 10, 14.
Po natančnejšem razmisleku bi bilo bolje napisati n * 3, ker je 5 * 3 = 15, kar je že čez 14, ki je zadnji ustrezen večkratnik.
Torej zgornja meja našega intervala, znotraj katerega iščemo ustrezne večkratnike je:
.
Kaj pa pomeni število 2 v oklepaju for i in range (0, n*3, 2): ?
To je korak, s katerim se naj spremenljivka i premika med števili 0 in n * 3.
Na ta način se izognemo preverjanju vseh lihih števil, za katere že v štartu vemo, da niso ustrezna.
Zanka while
Zanko while potrebujemo zato, ker želimo zanko uporabljato dovolj veliko krat.
Števec je spremenljivka, ki bo štela koliko ustreznih večkratnikov smo že našli.
Zanka se bo ponavljala vse dokler ne najdemo n ustreznih večkratnikov. Ko to število dosežemo, se zanka zaključi in se začne izvajati preostanek kode, ki je izven zanke while.
Funkcija
Funkcija je zelo koristen programček oz. del programa.
Lahko jo poljubno krat pokličemo znotraj istega programa ali iz drugega programa, če vemo v kateri mapi in v katerem dokumentu je napisana.
Ni potrebno celo funkcijo pisati še enkrat. Le pokličemo jo z ustreznimi parametri.
Pri naši nalogi je parameter število n, ki ga uporabnik vnese ob klicu funkcije, ko pove, koliko ustreznih večkratnikov želi imeti izpisanih.
Funkcijo se vedno najprej "definfira" z def , sledi ime funkcije , nato pa v oklepaju še morebitni parametri, ki jih funkcija potrebuje.
def sodaNeSestDat(n):
Jaz sem jo poimenoval sodaNeSestDat . Tako sem že v imenu funkcije povedal, kaj funkcija naredi:
poišče soda števila, ki niso večkratniki števila 6 in bodo izpisana v datoteko.
Datoteke
Programski jeziki nekoč praviloma niso imeli možnosti izpisovanja v tekstovne datoteke ali iz njih "jemati" podatke. Pythonu to možnost ima.
Datoteko ustvarimo z open('ime_datoteke', 'w') .
'w' pomeni pisanje (write) v datoteko. Če datoteke s tem imenom v našem direktoriju ni, se jo ustvari in pripravi za pisanje. Če pa obstaja, se izbriše vso vsebino in prav tako pripravi za pisanje.
Pišemo takole:
ali takole:
Mi bomo uporabili drugi način pisanja.
Vse, kar želimo izpisati v tekstovno datoteko, se najprej prenese v medpomnilnik, kjer "čaka", da odprto datoteko zapremo z ukazom close() . Šele nato se zapiše vanjo.
Ko datoteko zapremo, s Pythonom ne moremo več vanjo pisati ali iz nje brati.
Iz datoteke beremo z open('ime_datoteke', 'r') , kjer 'r' pomeni branje (read). Da pa bi sploh lahko brali iz nje, mora biti odprta open
Mnogokrat pa v že obstoječi datoteki ne želimo izbrisati vsebine, temveč jo le dopisati. To pa naredimo z open('ime_datoteke', 'a') , kjer 'a' pomeni dodajanje (add).
V tem primeru se novo besedilo dopisuje na koncu datoteke.
Če ne dodamo nobene izmed črk 'w', 'r', 'a' je privzeto, da je datoteka odprta za branje.
Rešitev
Če združimo vse, kar smo povedali do sedaj, bi rešitev zgledala tako:
Ob klicih funkcije za različnimi parametri smo dobili:
Kaj se je zgodilo ob tretjem klicu?
Nič!?
Nadaljevanje rešitve
Ne. zgodilo se je ravno tisto, kar smo želeli.
|