Tagasi Python-le

Astendamine

Selles peatükis:

  • saad teada, mida teevad Pythonis astendajad,
  • saad teada, kuidas peatada tsüklit,
  • koostad lõbusa ahnetest rottidest, kes jõuluvana kingikotis piparkooke pugivad.

Rotid on jõuluvana kingikotis!

Kuna jõulud on lähedal, siis jätkame meiegi pühade meeleolus. Seekord on meil tegu aplate rottidega, kes on pugenud jõuluvana kingikotti ja pugivad seal piparkooke. Rottidel on kombeks kiiresti paljuneda ning peagi on neid nii palju, et kõik piparkoogid saavad otsa. Neid saab peatada vaid rotipüüdmise robot, mis aga vajab käivitamiseks parooli. Sinul tuleb koostada programm, kus kasutaja peab parooli ära arvama. Kui arvab valesti, korrutatakse rottide arv kahega.

Saame selle visualiseerida järgmise joonisega.

Astendamine

Selleks, et oma programmis rotte paljunema panna on meil vaja astendamist. Astendamine on selline matemaatiline tehe, kus arv korrutatakse iseendaga astendaja-arv kordi. Astendaja (ehk eksponent) märgitakse arvu juurde väikese numbriga. Näiteks:

Pythonis kasutatakse astendaja ehk eksponendi jaoks kaht korrutusmärki **.

Harjutus

Tee nüüd algust oma programmiga. Kõigepealt Shell aknas CTRL + N, et luua uus fail. Seejärel salvesta see kohe ära.

Esmalt määrame algse rottide hulgaks 2. Ning määrame parooliks ROTID.

rotid = 2
parool = "ROTID"

Nüüd aga on vaja printida kasutajale tegevust selgitav tekst. Selleks, et jätta teksti sisse tühje ridu, kasutame print(). Katkendliku joone jaoks kasuta lihtsalt sidekriipsusid.

print("Jõuluvana kotis on 70 000 piparkooki.")
print("Aga seal on ka 2 rotti. Nad krõbistavad piparkooke ja paljunevad kiiresti!")
print("Appi-appi! Rotid söövad kõik piparkoogid ära!")
print("Pead käivitama rotipüüdmise roboti.")
print("Loodetavasti tead selle parooli...")
print()
print("----------------------------------------------------------------")
print("          TERE TULEMAST KASUTAMA ROTIPÜÜDMISE ROBOTIT!          ")
print("----------------------------------------------------------------")
print()

Nüüd määrame muutuja mängija pakutava parooli jaoks. Kasutame selle juures .upper(), mis muudab kirjutatu automaatselt suurtähtedega tekstiks*.

* See on vajalik selleks, et parool ja arvatav parool oleks alati ühtmoodi suurtähtedega. Muidu loetakse väiketähtedega kirjutatud õige parool valeks.

arva = input("Sisesta parool: ").upper()

Nüüd on vajame while-tsüklit. Mäletad != tähendas Pyhtonis “ei ole võrdne”, selle abil määrame, et tsükkel käivitatakse siis, kui kasutaja sisestatud parool ei ole sama kui meie määratud. Tsükli lõpetamiseks teatud tingimusel kasutame if-tingimuslauset ja käsku break.

  • Kui kasutaja sisestab vale parooli, siis while-tsükkel prindil “Vale parool” ja korrutab rottide arvu astendajaga 2.
  • Kui rottide arv on üle 70 000 (ehk rohkem kui piparkooke jõuluvana kotis), siis while-tsükkel katkeb.
  • Kasutajale prinditakse parooli ära arvamiseks vihje.
while arva != parool:
    print()
    print("VALE PAROOL.")
    print()

    rotid = rotid ** 2
    print("Nüüd on", rotid, "rotti jõuluvana kingikotis. Proovi uuesti!")

    if rotid > 70000:
        break

    print()
    print("Parooli vihje: Need, kes armastavad piparkooke.")
    print()
    arva = input("Kiiresti! Sisesta parool: ").upper()

Lõpuks lisame programmi if-tingimuse, kui rotte on saanud rohkem kui 70 000. Siis mängija kaotab. Muul juhul õnnitletakse teda võidu puhul.

if rotid > 70000:
    print("Eiiiii! Rotid sõid kõik piparkoogid ära. Sa kaotasid!")
else:
    print("Hurraaaa! Püüdsid kõik rotid kinni ja piparkoogid jäid alles. Sinu võit!")

Salvesta ja käivita (F5). Kui programm ei tööta, siis kontrolli, kas sul on kõik sulud ja jutumärgid olemas, kas muutujate nimed on korrektsed ja kogu programmis samad, kas kasutasid while-tsükli alguses !=, kas treppimine on paigas.


Väljakutse

Proovi nüüd täiendada programmi nii, et kasutajale saaks printida lisavihjeid. Võid selleks luua näiteks valiku vihjeid, mille hulgast kuvatakse mängijale juhuslik vihje. Selleks on sul vaja esmalt programmi alguses kasutada import = random ning seejärel vihjete kuvamise koha peal random.choise(). Kas saad hakkama?

Lahendus

import random

vihjed = ['Need, kes armastavad piparkooke.',
          'Need, kes on hallid ja pika sabaga.',
          'Need, kes on kingikotis.',
          'Vastikud aplad loomad.']

rotid = 2
parool = "ROTID"
print("Jõuluvana kotis on 70 000 piparkooki.")
print("Aga seal on ka 2 rotti. Nad krõbistavad piparkooke ja paljunevad kiiresti!")
print("Appi-appi! Rotid söövad kõik piparkoogid ära!")
print("Pead käivitama rotipüüdmise roboti.")
print("Loodetavasti tead selle parooli...")
print
print("----------------------------------------------------------------")
print("          TERE TULEMAST KASUTAMA ROTIPÜÜDMISE ROBOTIT!          ")
print("----------------------------------------------------------------")
print()

arva = input("Sisesta parool: ").upper()

while arva != parool:
    print()
    print("VALE PAROOL.")
    print()

    rotid = rotid ** 2
    print("Nüüd on", rotid, "rotti jõuluvana kingikotis.")

    if rotid > 70000:
        break

    print()
    print("Parooli vihje: ")
    vihje = random.choice(vihjed)
    print(vihje)
    print()
    arva = input("Kiiresti! Sisesta parool: ").upper()

if rotid > 70000:
    print("Eiiiii! Rotid sõid kõik piparkoogid ära. Kaotasid!")
else:
    print("Hurraaaa! Püüdsid kõik rotid kinni ja piparkoogid jäid alles. Sinu võit!")

Kasutatud allikad: