Ap/Py/Pamoka A2

Iš wiki.angis.net.
Jump to navigation Jump to search

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)
Turinys