Python example

Iš Alpinizmo vikis.
Pereiti į navigaciją Jump to search

Šablonas:Navigation


Ciklai kol (While loops)[keisti]

Šiame skyriuje susipažinsi su ciklu while(liet. kol). Kaip jau sužinojai praeitame skyriuje, kompiuteris įprastai programą pradeda skaityti ir vykdyti nuo pirmos eilutės ir taip eilutė po eilutės keliauja žemyn per visas duoto kodo eilutes. Tačiau ciklas while šią tvarką pakeičia ir dėl to kompiuteris priėjęs šią kodo vietą eilutes skaito iki galo, pagal šio ciklo nustatytą tvarką. Štai čia yra programos su ciklo while pavyzdžiu:


<syntaxhighlight lang="python"> a = 0 # PIRMA, nustatome pradinio kintamojo a reikšmę 0 (nuliui). while a < 10: # Kol kintamojo a vertė yra mažesnė nei 10, programa atlieka šiuos veiksmus:

   a = a + 1    # Padidina kintamojo a reikšmę 1 (vienu), visai taip kaip nurodyta: a = a + 1! 
   print(a)     # Tuomet nurodome, kad spausdintų. Viskas tam, kad pamatytumėte, kokia yra dabartinė kintamojo a vertė.
                # Ir visą šitą ciklą programa vykdo tol, kol kintamojo a reikšmė bus lygi 9!? Žr. Pastabą.
                
                # PASTABA:
                # Kintamojo a vertė padidės 1
                # su kiekvienu pakartojimu ar ciklu, kol pasieks nustatytą sąlygą ir sustos.
                # pvz. a = 1, tada a = 2, tada a = 3 ir t.t., kol a bus lygus 9 (a = 9), tada...
                # kodas baigs pridėjinėti po 1 prie a, nes taps lygus 10 (a = 10) kaip ir 
                # numatyta mūsų parašytoje sąlygoje. 
                # O kai mūsų nurodyta sąlyga yra patenkinama, programa atspausdina rezultatą.
                #              --
                # While a < 10: |
                #     a = a + 1 |<--[ Ciklo Kol sąlygos blokas ]
                #     print (a) |
                #              --

</syntaxhighlight>

Na, o jeigu paleidžiame programą, tai turime štai tokį įdomų rezultatą:

1
2
3
4
5
6
7
8
9
10

(Tikriausiai iki šios pamokos net nesusimąstei, kad kompiuterį gali paversti pigiu skaičiuotuvu...)

Na, o dabar pasiaiškinkime kaip veikia ši programa. Pirmiausia kompiuteris mato eilutę a = 0 ir nustato a reikšmę lygią nuliui. Tada programa mato sąlygą while a < 10:, todėl kompiuteris patikrina, ar a < 10. Kompiuteriui pirmą kartą matant šį teiginį, a yra lygus 0, ir akivaizdu, kad turima reikšmė yra mažesnė nei 10. Kitaip tariant, kol a yra mažesnis skaičius nei dešimt, tol kompiuteris tikrins teiginį ir kartos jį (t.y. pridėjinės po 1). Ciklas baigsis, kai a bus lygus dešimčiai. Kadangi šiame kode daugiau nieko nėra, tai programa sustoja.

ĮSIDĖMĖK: Nepamiršk parašyti dvitaškio : eilutės pabaigoje, tik taip kompiuteris supras, kad čia yra komanda!

Kitas ciklo while pavyzdys: <syntaxhighlight lang="python"> a = 1 s = 0 print("Įvesk skaičius, kuriuos nori pridėti prie sumos") print("Norint išeiti, įvesk 0.") while a != 0:

   print("Dabartinė suma:", s)            
   a = float(input("Skaičius? "))        
   s = s + a                            

print("Galutinė suma =", s) </syntaxhighlight>

Galimas programos scenarijus:

Įvesk skaičius, kuriuos nori pridėti prie sumos.
Norint išeiti, įveskite 0.
Dabartinė suma: 0
Skaičius? 200
Dabartinė suma: 200.0
Skaičius? -15.25
Dabartinė suma: 184.75
Skaičius? -151.85
Dabartinė suma: 32.9
Skaičius? 10.00
Dabartinė suma: 42.9
Skaičius? 0
Galutinė suma = 42.9

Atkreipk dėmesį, kad print('Galutinė suma =', s) yra įvykdoma tik pačioje pabaigoje, kai jau ciklas būna nutrauktas. Komanda while veikia tik tas eilutes, kurios yra atitrauktos nuo krašto ir priklauso ciklo while blokui. != reiškia nelygu, taigi while a != 0: reiškia tol, kol a nėra nulis, programa vykdo kodą.

Ar pastebėjai, kad šiuo atveju a yra skaičius su reikšme po kablelio ir ne visi tokie skaičiai gali būti tiksliai atvaizduoti, kai naudojamas !=. Pabandyk paleidęs programą įvesti 1.1

Begaliniai ciklai (infinitive loops) arba niekada nesibaigaintys ciklai (Never Ending Loop)[keisti]

Dabar, kai jau išsiaiškinome, kas yra ciklas while, pasižiūrėkime kaip atrodo niekada nesibaigiantys ciklai, kaip kad ir šis: <syntaxhighlight lang="python"> while True:

  print("Padėk! Užstrigau cikle!")

</syntaxhighlight> Operatorius == naudojamas abiejų operatoriaus pusių išraiškų lygybei patikrinti, kaip ir < buvo naudojami norint pasakyt „mažiau nei“ (kitame skyriuje rasi išsamų visų palyginimo operatorių sąrašą).

Ši mūsų sukurta programa spausdins Padėk! Užstrigau cikle! visą amžinybę... Tol, kol pats ją sustabdysi, todėl kad ji visą laiką yra True (visada atitinka teigiamą reikšmę) ir niekada nesikeičia (True, lietuviškai teisinga arba tiesa, paprastai programavime dar rašomas kaip 1). Kaip programą sustabdyti? Paprasčiausiai paspausk ctrl + c mygtukus.

Pavyzdžiai[keisti]

Fibonačio skaičių seka[keisti]

Fibonačio skaičių seka – sveikųjų skaičių seka. Seka prasideda šiais skaičiais: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233. Kiekvienas šios sekos skaičius lygus dviejų prieš jį einančių skaičių sumai. Toliau parodysiu, kaip gali atvaizduoti pirmus dvidešimt Fibonačio skaičius 3 skirtingais būdais.

Fibonacci-metodas1.py <syntaxhighlight lang="python">

  1. Ši programa skaičiuoja Fibonačio seką

a = 0 b = 1 pradinis_skačius = 0 maksimalus_skaičius = 20

while pradinis_skačius < maksimalus_skaičius:

   pradinis_skačius = pradinis_skačius + 1
   print(a, end = " ")  # Atkreipkite dėmesį į end = " " spausdinimo funkcijos argumentuose  
                      # būtent tai neleidžia sukurti naujos eilutės.
   senas_a = a    # turime sekti, nes mes jį keičiame.
   a = b
   b = senas_a + b

print() # gauna naują (tuščią) eilutę. </syntaxhighlight> Išvestis :

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181

Įsidėmėk, kad išvestis yra vienoje eilutėje dėl papildomų argumentų end = " " funkcijos print argumentuose.

Fibonacci-metodas2.py <syntaxhighlight lang="python">

  1. Supaprastintas ir greitesnis Fibonačio sekos apskaičiavimo metodas

a = 0 b = 1 pradinis_skačius = 0 maksimalus_skaičius = 10

while pradinis_skačius < maksimalus_skaičius:

   pradinis_skačius = pradinis_skačius + 1
   print(a, b, end=" ")  # Įsidėmėk end=" "
   a = a + b    
   b = a + b

print() # gauna naują (tuščią) eilutę. </syntaxhighlight>

Išvestis:

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181

Fibonacci-metodas3.py <syntaxhighlight lang="python"> a = 0 b = 1 pradinis_skačius = 0 maksimalus_skaičius = 20

  1. kai ciklas prasideda, mes jame pasiliekame

while pradinis_skačius < maksimalus_skaičius:

   pradinis_skačius += 1
   senas_a = a
   a = a + b
   b = senas_a
   print(senas_a,end=" ")

print() </syntaxhighlight>

Išvestis:

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181

Įvesk slaptažodį[keisti]

Slaptaždis.py <syntaxhighlight lang="python">

  1. Laukia, kol bus įvestas slaptažodis. Naudok „ctrl+ C“, kad sustabdytum programą
  2. be slaptažodžio
  1. atkreipk dėmesį, kad tai neturi būti slaptažodis, kad
  2. ciklas while turi prasisukti bent kartą.

slaptažodis= str()

  1. įsidėmėk != reiškia nelygu

while slaptažodis!= "Angis":

   slaptažodis = input("Slaptažodis: ")

print("Prisijungimas sėkmingas") </syntaxhighlight>

Kaip programa veikia:

Slaptažodis: auo
Slaptažodis: y22
Slaptažodis: slaptažodis
Slaptažodis: 'Sezamai atsiverk
Slaptažodis: Angis
Prisijungimas sėkmingas

Pratimai[keisti]

Parašyk programą, kuri prašo vartotojo įvesti skaičius tol, kol jis įveda 0. Tada programa turi išvesti skaičių vidurkį. Gali remtis skyriuje aptartu skaičių sumos pavyzdžiu.

Sprendimas  

<syntaxhighlight lang="python"> vardas = input("Koks tavo prisijungimo vardas?: ") slaptažodis = input("Koks tavo slaptažodis: ") print("Kad užrakintum kompiuterį, parašyk: užrakinti") įvesta_komanda = None input1 = None input2 = None while įvesta_komanda != "užrakinti":

   įvesta_komanda = input("Kokia tavo komanda: ")

while input1 != vardas:

   input1 = input("Tavo prisijungimo vardas: ")

while input2 != slaptažodis:

   input2 = input("Tavo slaptažodis: ")

print("Prisijungimas sėkmingas") </syntaxhighlight>

Jei nori, kad programa veiktų nepertraukiamai, tiesiog pridėk while 1 == 1: prieš visą programą. Tik nepamiršk, kad reikia visą likusią programos dalį, t.y. ciklo bloką reikia atitraukti nuo krašto.

Kitas sprendimo būdas <syntaxhighlight lang="python"> vardas = input('Nustatyti vardą: ') slaptažodis = input('Nustatyti slaptažodį: ') while 1 == 1:

   vardospėjimas=""
   slaptažodžiospėjimas=""
   raktas=""
   while (vardospėjimas!= vardas) or (slaptažodžiospėjimas!= slaptažodis):
       vardospėjimas = input('Vardas? ')
       slaptažodžiospėjimas= input('Slaptažodis? ')
   print("Labas,", vardas, ". Parašyk užrakinti, kad užrakintum.")
   while raktas != "užrakinti":
       raktas = input("")

</syntaxhighlight>

Atkreipk dėmesį į or, kuris yra prie (vardospėjimas!= vardas) or (slaptažodžiospėjimas!= slaptažodis), kurių dar neįvedėme. Pabandyk suprasti šią logiką ir kaip ji veikia.

Šablonas:Navigation