9. nädala õpijuhis
Eesmärk
editNädala eesmärgiks on:
- Tutvuda kahemõõtmelise massiivi kasutamise ja töötlemise põhimõtetega.
- Praktiseerida algritmide koostamist ja kasutamist kahemõõtmelise andmestiku töötlemisel.
- Praktiseerida Pythoni listide kasutamist, mis sisladavad omakorda liste.
Lugemiseks ja proovimiseks
edit- Loe materjali kahemõõtmelise andmestiku töötlemisest Kahemõõtmelise massiivi töötlemine, uuri materjalis olevaid näiteid ning täienda maagilise ruudu kontrollimise programmi nii, et päris valmis saaks (lisada on vaja veergude summade leidmine ja kontrollimine). Meeldetuletuseks - maagiline ruut on arvudest koosnev ruut, kus kõigi ridade ja veergude summad on võrdsed.
- Mõtle eelneva materjali põhjal läbi tegevused kahemõõtmelise struktuuri töötlemisel (elementide töötlemine ridade või veergude kaupa jme)
- Ja edasi lahenda allpool olevaid ülesandeid
Ülesanded
editAlustame proovimist "kahemõõtmelise info" väljatrükkimisest.
Ülesanne 1 Tärnid
editMoodusta ekraanile tärnidest ruut. Tärnide arvu ruudu külgede jaoks sisestab kasutaja. Näiteks kui ruudu külg on 5, siis ekraanile ilmub:
***** ***** ***** ***** *****
Mnjah, ega ta nüüd ruudu moodi päris pole, aga käib kah. Et lahendusest rohkem kasu oleks, proovi tärnid trükkida nii, et trükilause näeks välja:
print("*")
Muu organiseerivad tsüklid sobival viisil.
Ülesanne 2 Korrutustabel
editKust esialgu õppida korrutustabelit? Trüki programmi abil ekraanile korrutustabel kujul:
1 2 3 4 5 6 7 8 9 10 _______________________________________________________________ 1 | 1 2 3 4 5 6 7 8 9 10 | | | 2 | 2 4 6 8 10 12 | | | 3 | 3 6 9 12 15 | | | 4 | | | | 5 | jne. | 6 | | 7 | | 9 | | | 10 | | | | ________________________________________________________________
NB! Sul tuleb kasutada tsükleid, aga mitte lihtsalt print()
'iga
vastavad read ekraanile manada! Ja loomulikult tuleb tabel lõpuni täita!
Soovitus:
Et trükkida mitu väärtust erinevate print()
-käskudega ühele reale, tuleks print lausesse lisada parameeter end=""
. Näiteks print(a, end="")
trükib ekraanile a väärtuse ja jätab rea vahetamata, st järgmine väljund trükitakse a järele, samale reale. Parameetriga "end" saab näidata, milline sümbol lisatakse väljatrüki lõppu. Vaikimisi on selleks sümboliks reavahetus (seepärast uus väljund uuelt realt reeglina algabki).
Mõtle, milline tsükkel oleks kasutamiseks sobiv ja püüa vältida ülearuste muutujate tarvitamist.
Ülesanne 3 Nimed ja pikkused
editAlgandmetena on teada õpperühma üliõpilaste nimed ja pikkused. Loenda ja väljasta keskmisest lühemate üliõpilaste arv, pikkused ja vastavad nimed.
Mida teha selleks, et teaksime ja saaksime kasutada koos pikkustega üliõpilaste nimesid? Appi tõttab listidest koosnev list, mida ei saa päris tõeliseks kahemõõtmeliseks listiks kutsuda. Mõeldes klassikaliste massiivide peale, on selline olukord lahendatav kahte eraldi massiivi kasutades. Ühte salvestatakse nimed ja teise pikkused. Ikka nii, et sama inimese andmeid seob sama indeks. Pythonis on võimalik panna ühte listi kokku erinevat tüüpi andmed ja sellest tulenevalt võib kaaluda järgmise listide listi moodustamist:
opilased = [["Maali",168],["Juuli",154],["Tuuli",170],["Aali",174],["Saali",161]]
Näiteks nimi "Tuuli" paikneb positsioonil opilased[2][0]
ja tema pikkus 170 opilased[2][1]
Ülesanne 4 Spordipäev (APPI! Jälle!!!)
editSpordipäeval toimunu kohta on teada järgmine info: õpilase nimi ja tema 60 m jooksu tulemus. Andmed on vaja sisestada ja seejärel leida:
- Võitja nimi ja tulemus.
- Nime järgi saavutatud koht.
Mõlemad tulemused tuleb leida eraldi funktsiooni kasutades. Idee sellest, kuidas andmete sisestus võiks käia leiad failist spordikas.py. Tegelikult võiks sisestuse ringi teha suvalise pikkusega sisendi peale.
Ülesanne tuleks lõpuni lahendada siis, kui järgmise nädala raames on alamprogrammid selgeks saanud. Aga andmete struktureerimise poolest tuleb mõtelda, kuidas õpilase nime ja sportlikku tulemust meeles pidada nii, et õpilase andmed "laiali ei laguneks". Kasutada sobib sama ideed, mis üliõpilaset pikkuset ülesandes väljakäidud sai.