Ap/Py/Pamoka A2
Range intervalai - išbandome ciklų jėgą
Pilnas šios treniruotės Python kodas yra čia
Funkcijos range() paskirtis
Funkcijos range() pagalba yra generuojamos įvairios sekos, užtikrinamas ciklų kartojimas. Šios funkcijos elgsenai tirti sukurtos demonstracinės funkcijos, kurių vardas prasideda žodeliu demo. Tokios funkcijos paprastai neatlieka jokios konkrečios užduoties, o yra skirtos išsiaiškinti kitų funkcijų veikimą, atliekant bandymus.
Patikslinsime funkcijos veikimą, panaudodami matematinio intervalo sąvoką [a : b), kas reiškia pusiau atvirą intervalą, kur reikšmė a priklauso intervalui, tuo tarpu b -ne. Funkcija range() būtent ir generuoja reikšmes iš tokio intervalo. Bendrai galimi tokie funkcijos panaudojimo variantai, kai intervalas [nuo : iki):
- range(nuo, iki, pokytis) – ribos ir pokytis nurodomas konkrečiai;
- range(nuo, iki) – pokytis yra lygus vienetui;
- range(iki) – nuo yra 0, o pokytis yra lygus vienetui.
Atvejų aptarimas
Kodėl naudojamas pusiau atviras intervalas? Todėl kad tuo atveju skirtumas (iki - nuo) visada duoda elementų skaičių. Vieno argumento atveju parametras tiesiog reiškia kartojimo skaičių. Jei mums reikia kad intervalas [a, b] būtų uždaras, tai reikia rašyti range(a, b+1). Atkreipiami dėmesį, kad funkcija range() yra skirta tik sveikiems skaičiams, realių skaičių atveju gaunama klaida. Generuojamos reikšmės gali būti ir neigiamos. Pokytis taip gali būti neigiamas, tokiu atveju seka bus mažėjanti. Tačiau pokytis negali būti nulis, nes tokiu atveju sekos nariai nesikeis ir būtų begalinis ciklas 🙂.
Visą tą intervalų įvairovę galima išbandyti demonstracinių funkcijų pagalba. Stebėkite gaunamus rezultatus, keiskite parametrus, kol įsitikinsite jog supratote kaip veikia funkcijos.
Progresijų generavimas
Išbandykite aritmetinės ir geometrinės progresijų narių skaičiavimą. Spausdinant realius skaičius yra svarbu apriboti ženklų po kablelio skaičių. Tai atliekama formatavimo eilutės pagalba, žiūr. pvz.: print("%0.2f" % gn), kas reiškia, jog rodomos tik 2 skiltys po kablelio. Atkreipkite dėmesį, kad geometrinės progresijos nariai reiškia, kaip kinta jūsų banko indėlis taikant skirtingas palūkanas ☺
Užduotys savarankiškam darbui
Toliau patys parašykite funkciją, skirtą uždaro intervalo [a, b] kvadrato
reikšmių lentelei spausdinti.
Įdomus uždavinys yra pilnos sandaugos lentelės sudarymas, kur tenka panaudoti ciklą cikle. Pasižiūrėkite kokius rezultatus reikia gauti ir sukurkite savo funkciją!
Rezultatai turi būti tokie | |
---|---|
Lentelė 6*6
1 2 3 4 5 6
2 4 6 8 10 12
3 6 9 12 15 18
4 8 12 16 20 24
5 10 15 20 25 30
6 12 18 24 30 36
Lentelė 10*10
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100
Lentelė 15*15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30
3 6 9 12 15 18 21 24 27 30 33 36 39 42 45
4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
5 10 15 20 25 30 35 40 45 50 55 60 65 70 75
6 12 18 24 30 36 42 48 54 60 66 72 78 84 90
7 14 21 28 35 42 49 56 63 70 77 84 91 98 105
8 16 24 32 40 48 56 64 72 80 88 96 104 112 120
9 18 27 36 45 54 63 72 81 90 99 108 117 126 135
10 20 30 40 50 60 70 80 90 100 110 120 130 140 150
11 22 33 44 55 66 77 88 99 110 121 132 143 154 165
12 24 36 48 60 72 84 96 108 120 132 144 156 168 180
13 26 39 52 65 78 91 104 117 130 143 156 169 182 195
14 28 42 56 70 84 98 112 126 140 154 168 182 196 210
15 30 45 60 75 90 105 120 135 150 165 180 195 210 225
|
Galimas sprendimas | |
---|---|
def sandaugos_lentelė(n):
print(f"Lentelė {n}*{n}")
for i in range(1, n+1):
for j in range(1, n+1):
print(f"{i*j:4}", end="")
print()
sandaugos_lentelė(6)
sandaugos_lentelė(10)
sandaugos_lentelė(15)
|