Python: Silmukat

Tulosta luvun 12 kertotaulun 10 ensimmäistä riviä

Sen sijaan, että kirjotettaisiin 10 tulostus-käskyä käsin, tämä kannattaa tehdä toistolauseen eli silmukan avulla.

kertoja = 1 # alussa kertoja on 1

while kertoja <= 10:
    tulo = 12 * kertoja
    print("12 * " + str(kertoja) + " = " + str(tulo))
    kertoja += 1 # kasvatetaan kertojaa yhdellä

Tuloste:

12 * 1 = 12
12 * 2 = 24

\(\vdots\)
12 * 10 = 120

while-silmukka toistaa lohkoa niin kauan, kun while-avainsanan jälkeen kirjoitettu ehto on voimassa.

Heitä noppaa niin kauan, kunnes silmäluvuksi tulee 6. Tulosta jokainen heitto ja lopuksi heittojen lukumäärä.

import random

heittoja = 0 # alussa heittoja on 0

while True: # jatketaan toistaiseksi
    silmaluku = random.randint(1, 6) # arvotaan kok.luku väliltä 1-6
    print("Heitettiin silmäluku " + str(silmaluku))
    heittoja += 1 # kasvatetaan heittojen määrää yhdellä

    if silmaluku == 6: 
        break # poistutaan silmukasta

print("Heittoja tarvittiin: " + str(heittoja))

"Ehto" True on aina tosi. Siis while-true-silmukasta poistutaan vain, jos erikseen näin käsketään break -käskyllä 

while True:
  print("Moi!")
  if 1 == 2:
    break

while-true-silmukasta saa helposti vahingossa ikuisen silmukan. Esim. seuraava ohjelma tulostaisi "Moi!" ikuisesti, koska ehto 1==2 ei ole koskaan tosi

⚠️⚠️⚠️

Tulosta kymmenen kertaan "Moi!"

for i in range(10):
	print("Moi!")

while-silmukan sijaan tämä voidaan tehdä näppärämmin for-silmukalla

for i in lista:

ottaa joka toistolla muuttujan i paikalle seuraavan luvun listasta, kunnes luvut loppuu

range(n) luo listan*, jossa on luvut 0, 1, 2, ..., n-1. Listassa on tällöin siis n lukua!

Miksi tässä toistetaan kymmenen kertaa?

* tarkalleen ottaen range on oma tietotyyppinsä, mutta sen saa helposti muutettua tavalliseksi listaksi funktiolla list()

Ensimmäinen esimerkki luvun 12 kertotaulusta olisi voitu helposti tehdä myös for-silmukalla

for kertoja in range(1, 11):
    tulo = 12 * kertoja
    print("12 * " + str(kertoja) + " = " + str(tulo))

range(a, b) luo listan, jossa on kaikki kokonaisluvut luvusta \(a\) lukuun \(b-1\) asti

Funktiolle range voi antaa myös kolmannen parametrin,
joka on askeleen koko.
range(a, b, n) luo listan, joka alkaa luvusta a ja sisältää n:n välein kaikki kaikki b:tä pienemmät luvut.
Huom. myös n:n on oltava kokonaisluku!

for i in range(0, 10, 2):
   print(i)

Tuloste:
0
2
4
6
8

Vinkki: jos haluaa nopeasti tarkistaa, mitä lukuja rangessa on, voi muuttaa rangen ensiksi listaksi ja sitten tulostaa, esim.
print(list(range(0, 10, 2)))

05 Python: Silmukat

By Timo Pelkola

05 Python: Silmukat

  • 232