Python Bandymai/Įvadas

Iš wiki.angis.net.
(Nukreipta iš Python Pamokos/Įvadas)
Jump to navigation Jump to search
 ← Kas čia eina? Turinys Pasirinkimai → 


Ciklai kol (While loops)

Š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:


#include <iostream>
using namespace std;

string getFix(int n){
    char buf[n+1];     // buferis vardo nuskaitymui
    cin.get(buf, n+1); // fiksuoto ilgio teksto nuskaitymas
    return buf;    
}

struct Pora{
    string vardas;
    int kiekis;
};
Pora poros[10];
int p_sk;

int formuotiInd(string paieska){
    poros[p_sk].vardas = paieska;
    int i = 0;
    while(poros[i].vardas != paieska) i++;
    if(i == p_sk) p_sk++;
    return i;
}

int main()
{
    freopen("Pvz.txt", "r", stdin);
    while(!cin.eof()){
        string a = getFix(10);
        int b;
        cin >> b >> ws;
        cout << a << b << endl;
        int pi = formuotiInd(a);
        poros[pi].kiekis += b;
    }
    cout << "------\n";
    for(int i=0; i<p_sk; i++)
        cout << poros[i].vardas << poros[i].kiekis << endl;   
}             --

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:

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)

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)

Dabar, kai jau išsiaiškinome, kas yra ciklas while, pasižiūrėkime kaip atrodo niekada nesibaigiantys ciklai, kaip kad ir šis:

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

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

Fibonačio skaičių seka

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

# Š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ę.

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

# 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ę.

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

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

#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()

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į

Slaptaždis.py

# Laukia, kol bus įvestas slaptažodis. Naudok „ctrl+ C“, kad sustabdytum programą
# be slaptažodžio

#atkreipk dėmesį, kad tai neturi būti slaptažodis, kad
# ciklas while turi prasisukti bent kartą.
slaptažodis= str()

# įsidėmėk != reiškia nelygu
while slaptažodis!= "Angis":
    slaptažodis = input("Slaptažodis: ")
print("Prisijungimas sėkmingas")

Kaip programa veikia:

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

Pratimai

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  
  #
  # testas
  #
 ← Kas čia eina? Turinys Pasirinkimai →