Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

Valintarakenteiden lisäksi Pythonissa on koodin suorituksen hallitsemiseksi toistorakenteet. Ne nimensä mukaisesti toistavat niissä olevaa koodia. Pythonissa näitä on kaksi, joita vastaavat avainsanat while ja for.
 
Avainsana while kuvaa toistorakennetta, jota suoritetaan niin kauan kuin tietty ehto täyttyy. Yleensä ehdossa vertaillaan jotain muuttujaa, jota muutetaan while rakenteen koodissa. Jos vertailu on heti alussa epätosi, while rakenteen koodia ei suoriteta olenkaan.
 
Tämä esimerkki kysyy käyttäjältä vastausta kysymykseen kunnes käyttäjä antaa oikean vastauksen.

Code Block
answer = input("Paljon on 2 + 2?\n")

while answer != "4" and answer != "neljä":
    answer = input("Ei... yritä uudestaan.\n")

print("Arvasit oikein!")
input("\nPaina Enter näppäintä lopettaaksesi...")

Toinen toistorakenne saadaan avainsanalla for. Sen tarkoituksena on tehdä toistorakenne, jonka koodi suoritetaan tietty määrää. Tälle rakenteelle määritellään myös tunniste muuttujalle, joka kuvaa toistokertaa, jonka jälkeen tulee avainsana in ja jokin kokoelma, jonka jokaista alkiota kohti for rakenteen koodi suoritetaan.
 
Kokoelmaksi käy mikä tahansa kokoelma kuten monikko tai merkkijono. Tässä ohjelmassa käyttäjältä kysytään tekstiä, jonka jokainen merkki tulostetaan omalle rivilleen.

Code Block
s = input("Anna tekstiä: ")

for c in s:
    print(c)

input("\nPaina Enter näppäintä lopettaaksesi...")

Usein käytetään myös sisäänrakennettua funktiota range, joka palauttaa kokoelman numero arvoja. Yhdellä parametrilla funktio ottaa kokonaisluvun, jolloin paluuarvona on numerot 0;sta annettuun lukuarvoon asti (lukuarvoa itseään mukaan lukematta). Kaksi parametria antamalla määritellään alkuarvo ja loppuarvo. Vielä kolmannen parametrin lisäämällä saadaan määriteltyä yksittäisten arvojen arvoväli.
 
Tämä ohjelma kysyy käyttäjältä kokonaislukua - while rakenteessa kunnes syöte on sopiva - ja laskee sitten annetun luvun kertoman.

Code Block
s = ""

while not s.isnumeric():
    s = input("Anna positiivinen kokonaisluku: ")

x = int(s)
y = 1

for i in range(1, x):
    y *= i

print("Antamasi luvun kertoma oli...\n%s" % y)
input("\nPaina Enter näppäintä lopettaaksesi...")

Pythonissa on myös useita avainsanoja toistorakenteiden hallintaan. Yksi näistä on break, joka antaa vaihtoehtoisen tavan poistua toistorakenteesta. Toistorakenteiden ollessa sisäkkäin break poistuu vain yksittäisestä rakenteesta - ei kaikista.
 
Tämä ohjelma kysyy käyttäjältä numeroita toistorakenteessa ja poistuu avainsanan break avulla, jos käyttäjä syöttää tekstiä. Tässä esimerkissä ohjelma pysyy ilman break käskyä while rakenteessa koska True;n arvo on aina True.

Code Block
while True:
    s = input("Anna positiivinen kokonaisluku: ")
    if not s.isnumeric():
        print("Et antamasi arvo ei ollut numero...")
        break

input("\nPaina Enter näppäintä lopettaaksesi...")

Avainsana else toimii Pythonissa myös toistorakenteiden yhteydessä. Toistorakenteissa else osio suoritetaan, jos toistorakenteesta poistutaan normaalisti eli ilman avainsanaa break. Tässä ohjelma tulostaa numeroita 10 - 0 ja kysyy lopetetaanko; jos lopettamalla poistutaan break käskyllä ja antamalla laskennan kulua loppuun, poistutaan normaalisti.

Code Block
for i in range(10, 0, -1):
    s = input(str(i) + "... Lopetetaanko? (kirjoita L)")
    if s == 'L':
        print("Poistutaan break;llä")
        break
else:
    print("Poistutaan normaalisti")

input("\nPaina Enter näppäintä lopettaaksesi...")

Vielä on avainsana continue, jonka avulla voidaan toistorakenteessa siirtyä seuraavaan toistokertaan suorittamatta sen jälkeen tulevaa koodia. Tämä ohjelma laskee numeroiden jakojäännökset, jos numero ei ole jaollinen jakajalla.

Code Block
denominator = 3

for i in range(50):
    if i % denominator:
        continue
    print("%s / %s = %s" % (i, denominator, i // 3))

input("\nPaina Enter näppäintä lopettaaksesi...")