230819IFIFB.DT Elegantne viis suuria väärtuse leidmiseks. Aga while True tsükli kasutamist ei peeta alati heaks stiiliks. Aga siin on ka tegemist maitseasjaga ja või kokkuleppega. 230469IFIFB.DT Kui see on ikka tegelikult 7. variant, siis ei peaks arve lisama kolme kaupa ja nendest kolmest arvust suurimat leidma. Suurima väärtuse leidmise ideest rääkisime eelmisel nädalal. Teine probleem pudutab koodi ülesehitust – sama koodi ei ole hea mõte korrata enne tsüklit ja siis veel tsükli sees. 230783IFIFB.DT Juurimise osa on korras. Aga tsükli organiseerimine lonkab. Kuidas töötab input? Arvu küsimisega saad ju kenasti hakkama. Kui while tsüklil on korralik tingimus olemas, ei ole mõistlik sarnast tingimust tsükli sees kontrollida ja siis breakiga väljuda. 230730IFIFB.DT Lahendus ei vasta ülesandepüstitusele. Muutujas juhuslikud_arvud ei ole mitut arvu – ainult üks. Et saada mitu arvu, tuleks neid tsükli sees teha. Ja arvu kohta oli vaja tuvastada, kas see jagub kolmega. Mitte teda jagada kolmega ning summasse lisada jagatist. Lisaks mõtle läbi, mida teed tsükli sees muutujaga I? Soovitav vaadata oma programm üle debug-režiimis! 230784IFIFB.DT 230584IFIFB.DT 1: korras. 5. jaguvust saab kontrollida jäägi leidmise kaudu. Tegime seda paaris/paaritu tuvastamiseks: et kui arv jagub 2-ga (jagamisel tekkiv jääk = 0), siis on paaris. Et leida 3 ja 5-ja jaguvad arvud, tuleb ka uurida jääki, mis jagamisel tekib. 230818IFIFB.DT Lahendus korras. 220515IFIFB.DT Aga mis ülesannet siis tegid? Kas kolmandat? Siis tundub korras olevat. Ülesande valiku selgitus oli ülesannete faili alguses. 230801IFIFB.DT 230545IFIFB.DT Korras. 230627IFIFB.DT 230547IFIFB.DT 231253IFIFB.DT Korras. 220850IFIFB.DT 220978IFIFB.DT 221043IFIFB.DT Loodan, et suurima väärtuse leidmine õnnestub ka max()-funktsiooni kasutamata. Kui nüüd aga seda siiski kasutada, siis ei ole mitte kuidagi põhjendatud tema välja kutsumine 7(!) korda. Funktsiooni väljakutse ei ole elementaartehe ja pikemas perspekriivis suuremate programmide korral võib selline toimimine hakata koodi efektiivsust mõjutama. 230641IFIFB.DT Programm töötab korralikult. Mõned märkused: muutujate nimed olgu kõik ühes keeles. While-tsükli tingimus on tavaks pigem kirjutada while count < kordus Peale tsüklit ei oma if-lause vastuse trükkimisel suuremat mõtet. 230879IFIFB.DT Juurmise osa on korras. While True tsüklit ei peeta reeglina heaks stiiliks. 230940IFIFB.DT Jaguvust saab kontrollida jäägi leidmise kaudu. Tegime seda paaris/paaritu tuvastamiseks: et kui arv jagub 2-ga (jagamisel tekkiv jääk = 0), siis on paaris. Et leida 3 ja 5-ja jaguvad arvud, tuleb ka uurida jääki, mis jagamisel tekib. Sinu programm jagab. Kui if-i tingimus korda teha, siis võiks täitsa töötada. 230662IFIFB.DT 221036MLBB.LT Väga palju if-e. Nii põhjalikult tegelikult ei pidanud kommentaare andma. Piisanuks vaid väikaema väärtuse väljatrükist. Vihje võrdumisele olki pigem selleks, et liiga jäigalt < märke ei kasutataks. Aga tundub, et programm töötab kenasti. 230633IFIFB.DT 230992IFIFB.DT 1: listi kasutamiseks ei ole praegu vajadust, sest summa saab ka jooksvalt (st arvude sisestamisega paralleelselt) leida. Kui nüüd juba arvud listi panna, siis listist võtmisel ei ole tsükli muutuja nimi I kõige parem. Pigem on see number. Nimi I sobib indeksile. Ja tähti närides – paaritule arvule ei pidanud programm üldse reageerima ;) 2: Inimlikus plaanis ei ole lühemdamine from random import randint as ri kõige mõistlikum. Seda ena, et seda funktsiooni vaid ühe korra kasutad. Ka siin pole listi vaja. Ja kokku oli vaja lugeda vaid vahemikku jäävad arvud. Aga kokkuvõttes mõlemad ülesanded tulemuslikult lahendatud. 230498IFIFB.DT Lahendus korras. Täisarv, mitte täisnumber :) 230589IFIFB.DT 230548IFIFB.DT 220866IFIFB.DT Lahendus korras. 230538IFIFB.DT Kui leida jääk, mis tekib 8-ga jagamisel, ei saa see kunagi olla suurem kui 7. Tekib küsimus, mis tehet tegelikult kasutasid? 1. Programm ei tööta päris täpselt ülesandele vastavalt. Loendatakse paarisarve ja lõpetatakse töö, kui soovitud kogus paarisarve on kokku saadud. Vaja oli aga loendada kõiki arve. Tsüklist välja breakimine on täiesti ülearune. Selleks while-tsüklil tingimus ongi, et tsükkel õigel ajal oma töö lõpetaks. 3. Sama probleem tsüklist välja breakimisega. Muus osas korras. 230694IFIFB.DT Korras. 230424IFIFB.DT For-tsükkel on hea selleks, et teha tsüklit ettemääratud arv kordi. Kui while True tsükkel ei ole hea stiil (nagu olen mitmel korral kirjutanud), siis selle programmi “trikitamine” for-tsükliga on tunduvalt kahtlasem. 232348IFIFB.DT Korras. 220698IFIFB.DT 230990IFIFB.DT Korras. 230570IFIFB.DT Lahendus korras. 230500IFIFB.DT Ma ei teagi, millist versiooni kommenteerida :) Esimeset proovist võiks võtta tsükli, aga arvu tegemise peaks panema tsükli sisse. Randint() teeb ühe ühe arvu. Et saada mitut, peab tsüklis seda tegevust kordama. Ja sinna juurde saaks võtta 3. variandist jaguvuse kontrolli. Praegu 3. variandi if ei tööta seepärast, et seal tehtud arvud on list, mis koosneb mitmest arvust. Aga terve listi kohta ei saa otsustada, kas ta jagub 3-ga või mitte. List ipoleks praegu aga üldse vaja. Lisaks and tehe tulebki kirjutada sõnana and. 230621IFIFB.DT Korras. Lahenduses on kenasti väikseima väärtuse leidmise ideed kasutatud. 230965IFIFB.DT Korras. 230806IFIFB.DT Millise arvutuse läbi sellised variandi numbrid said? 4. variant on ilmselt poolik. 3. variant teeb oma töö kenasti ära. 230795IFIFB.DT Korras. 220675IFIFB.DT Korras. Siin gen == ("jah"): ei ole vajadust sulge kasutada. 170812HIFIB.HT 230824IFIFB.DT Korras. 230789IFIFB.DT Loodan, et oskad väikseimat väärtust ka min()-funktsiooni kaustamata leida. While True: tsükli kasutamist ei peeta üldiselt heaks stiiliks. Vastused tulevad õiged. 230507IFIFB.DT Korras. While True-tüüpi tzüpklit ning sellest break’iga väljumist ei peeta alati heaks stiiliks. Aga samas on siin ka tegemist maitseasja või kokkuleppega. 230568IFIFB.DT Korras. 230551IFIFB.DT 230773IFIFB.DT Loodan, et oskad väikseimat väärtust ka min()-funktsiooni kaustamata leida. Vastused tulevad õiged. Tsükli jätkamiseks / lõpetamiseks ei ole vaja nii palju vaeva näha ja kui juba whilel on korralik tiungimuse olemas, võiks tsükkel selle tingimuse alusel oma töö lõpetada, mitte lisa if-i ja breakiga. 230885IFIFB.DT Loodan, et oskad väikseimat väärtust ka min()-funktsiooni kaustamata leida. Vastused tulevad õiged. Lisaks kommentaar: if-lauses peaks siiski sisulise tegevusega tegelema if-osas, mitte seal pass’iga üle lendama (sama probleemi esineb veelgi). 3. varaindis – while tsüklil on kenasti jätkamise tingimus olemas. Mingit põhjust ei ole tingimust topelt kontrollida ja siis tsüklist välja breakida. Ja jälle liigne pass. Pass käsk on valdavalt mõeldud koha hoidmiseks, et sinna edaspidi vajalik kood lisada. 230645IFIFB.DT Loodan, et oskad väikseimat väärtust ka min()-funktsiooni kaustamata leida. While True: tsükli kasutamist ei peeta üldiselt heaks stiiliks. Vastused tulevad õiged. 230592IFIFB.DT Korras. 238253FAY Loodan, et oskad väikseimat väärtust ka min()-funktsiooni kaustamata leida. While True: tsükli kasutamist ei peeta üldiselt heaks stiiliks. Vastused tulevad õiged. 220554IFIFB.DT Töö variandi arvutus ei meenuta küll jäägi leidmist, aga täiesti juhuslikult oled õige variandi leidnud :). Lahendusega on kõik korras. 210813MLBB.LT 210941MLBB.LT 238248FAY 230610IFIFB.DT Lahendus ei vasta ülesande püstitusele. Võib-olla läks midagi tõlkes kaduma? Kasutaja määrab piiri. Arve genereerib arvuti ja iga arvu kohta peab programm tuvastama, kas see jagub 3-ga või mitte. Kui jagub, siis läheb summasse. Summa piuiri kontroll on tehtud õigesti. 220852IFIFB.DT Loodan, et oskad suurimat väärtust ka max()-funktsiooni kaustamata leida. While True: tsükli kasutamist ei peeta üldiselt heaks stiiliks. Vastused tulevad õiged. 230677MLMB.DT Loodan, et oskad suurimat väärtust ka min()-funktsiooni kaustamata leida. While True: tsükli kasutamist ei peeta üldiselt heaks stiiliks. Vastused tulevad õiged. 230805MLMB.DT 230553MLMB.DT Suurim väärtus tuleb õige. While True tsükkel ja break’iga katkestamine ei ole üldiselt hea stiil. 220442MLMB.DT Korras. 230601MLMB.DT 230756MLMB.DT Korras. 230915MLMB.DT Loodan, et suurima väärtuse leidmine õnnestub ka max()-funktsiooni kasutamata. While True tsükli kasutamist ei peeta alati heaks stiiliks. 220813MLMB.DT 230455MLMB.DT Miks 4. variant? Lahendus ei arvesta päris õigesti võrdsete arvudega. Mõnel juhul tuleb vale vastus. Funktsiooni on üsna mõistlikult kasutatud. 230708MLMB.DT Täisarvude saamiseks tuleks kasutada randint() funktsiooni. Üksikutel juhtudel tuleb vale vastus. Kordamise küsimise peaks pigem paigutama ühe korra tsükli lõppu. 238157FAY 4. Alati ei tule õiged vastused. Probleem on selles, et võrdled vaid kahte arvu omavahel ja teed selle järgi otsuse. Suurima saab aga määrata siiski vaid nii, et kõik kolm arvu osalevad võrdluses. 8. Mis saab siis, kui arv on -1? Üldiselt aga korras. 230755MLMB.DT 230697MLMB.DT 230440MLMB.DT On väike erinevus ülesande püsitusega võrreldes – nimelt oli vaja lugeda kokku kõik sisestatud arvud, kuid Sinu programm loeb kokku vaid paarisarve. Täiesti üleliigne in teine if-lause (if not …). Selles lauses ei tehta mitte midagi kasulikku. Aga paarisarvud programm tuvastab ja liidab nad ka kokku. 220936GRENB.HT Selle lausega print=("Arv mahub vahemikku.") rikud ära print käsu ja peale seda enam trükkimine ei õnnestu. Miks omistusmärk =? Vahemikku kuulumine on õigesti tuvastatud. Muutuja pakkumisi peaks aitama järge pidada, mitu arvu tehakse. Praegu see loendamine päris õigesti ei õnnestu. Arve tuleb vähem kui 100. Mõtle välja miks? 230827MLMB.DT Programm ei korda oma tegevust. Vastus tuleb õige. 220989MLMB.DT 220976MLMB.DT 230733MLMB.DT 230451MLMB.DT Kõik variandid on ülekontrollitud. Korras. 230705MLMB.DT 230669MLMB.DT If-lausete tingimusi on saanud natuke palju. Näiteks: arv1 < arv2 and arv1 != arv2 kui juba kehtib tingimus arv1 < arv2, siis nad ei saa mitte kuidagi võrdsed olla. Tsükli while True kasutamist ei peeta heaks stiiliks. 230710MLMB.DT Programm ei käitu korralikult. Esiteks peaks tsükli sees ühe arvu korraga sisestama. Edasi tuleb mõelda, mis põhimõttel suurima väärtuse leidmine toimub ja mida tähendab omistamine (kas andmed liiguvad paremalt vasakule või vasakult paremale). 231005MLMB.DT Korras. Lahenduses on kenasti väikseima väärtuse leidmise ideed kasutatud. 230860MLMB.DT Lahendus ei vasta päris täpselt ülesande püstitusele – nimelt pidi programm genereerima juhuslikke arve soovitud hulga, mitte võtma arve järjest. Oluline osa – õigete arvude tuvastamine ja keskmise leidmine on korras. Siiski poleks vaja teha listi, et teada saada, mitu arvu on. Selleks on loendamise võte. 230845MLMB.DT Töötab kenasti. Jätkamise soovi võib kohe muutujasse kord lugeda. Ehk muutuja cl on liigne. 230543MLMB.DT 230646MLMB.DT suurim = None – None ei ole 0. See muudab edasise kontrolli palju tülikamaks – iga kord peab võrdlema ka nonega. While True tsüklit ei peeta üldiselt heaks stiiliks. Tulemus leitakse õigesti. 231233MLMB.DT 220947MLMB.DT Number faili nimes ei viita õigele variandile. Programmis puudub kordamise võimalus. Arvude võrdlemine on jäik. Võrdsete arvude korral võib osadel juhtudel tulla vale vastus või ei tule üldse vastust (nt 4 2 4). 230599MLMB.DT Korras.