Edistynyt Python-kehityskurssi
Luku
>
Taso
Edistyneet luokat
Operaattorien ylikuormitus
Tavoite
Laske, kuinka paljon viiniä kirkastetaan käyttämällä vektoreita ja operaattorien ylikuormitusta.
Viinin puristuksen jälkeen se täytyy suodattaa ja kirkastaa, useita tynnyreitä suodatetaan ja koko erä täytyy huuhdella. On tärkeää laskea, kuinka paljon viiniä valmistuu, jotta tynnyrit voidaan sulkea ja kypsyttää.
Tätä varten sinun täytyy luoda vektoreita ja lisätä niitä yhteen; ne ovat samanlaisia kuin listat, mutta eivät ole yhtä joustavia, mutta vievät vähemmän muistia. Niitä käytetään yleensä koordinaattien käsittelyyn, tässä käytämme niitä kuin muuttujia, jotka sisältävät useamman arvon. Vektorien yhteenlasku tehdään käyttämällä Operator Overloading -tekniikkaa, joka laajentaa luokkaobjektien toimintaa, jotta voit käyttää operaattoreita niiden kanssa kuten normaalien arvojen kanssa.
Aloittaaksesi, kävele ja kerää metalliset vesitölkit, jotka sijaitsevat huoneen yläosassa; näitä käytetään auttamaan tynnyreissä suodatettavan viinin huuhtelua. Kun olet kerännyt tölkit, kävele tummaan X-merkkiin punaisen maton päällä, kohtaa tynnyri ja aloita kunkin tynnyrin sisällön vektorisointi.
X-merkit on järjestetty kolmen (3) ryhmissä jokaista värimattoa kohden: kultainen X-merkki, vaalea X-merkki ja tumma X-merkki. Kaikissa tummaissa ja vaaleissa X-merkeissä käytä funktiota water() auttamaan tynnyrien huuhtelua. Samoin kaikissa tummaissa ja vaaleissa X-merkeissä käytä funktiota read() selvittääksesi, kuinka paljon viiniä käsitellään kyseisessä tynnyrien rivissä. Kultaisessa X-merkissä käytät funktiota write() kirjataaksesi summien yhteenlasketun kokonaissumman.
Koodieditorissa on luokka nimeltä vector, jota käytetään paitsi vectorin luomiseen myös niiden yhteenlaskuun. Luo vector-olioita tallentaaksesi vaaleissa ja tummaissa X-merkeissä tunnistetut tiedot; esimerkiksi punaisella matolla suodatetaan punaviiniä:
# Create object using data from dark X mark red_wine_dark = vector(345, 272) # Create object using data from light X mark red_wine_light = vector(248, 432) # Add together vectors for totals red_wine_total = red_wine_dark + red_wine_light
Vektorissa ensimmäistä paikkaa kutsutaan nimellä x ja toista y: kaava on tällainen: object_name = vector(x,y). Tämä on olennaista vektorien täyttämisessä read()-funktion avulla hankitulla tiedolla.
Kultaisten X-merkkien kohdalla käytä write()-funktiota kirjoittaaksesi kunkin vektorijoukon kokonaissumman; esimerkiksi punaisen maton X-merkkien tapauksessa se kirjoitetaan näin:
await player.write( "There is a total of %s pounds on the left barrels and %s pounds on the right barrels" % (red_wine_total.x, red_wine_total.y)
Muista lisätä .x ja .y kokonaissumman loppuun tunnistaaksesi kunkin vektorin arvot.
Jokaisessa värimaton joukolle suodatetaan erilaista viiniä. Edellä mainitulla punaisella matolla suodatetaan red_wine:ä; keltaisilla matoilla suodatetaan sparkling_wine:ä; vihreillä matoilla suodatetaan white_wine:ä; ja oransseilla matoilla suodatetaan orange_wine:ä.
Kun kaikki vaaleat ja tummat X-merkit on huuhdeltu funktiolla water() ja kaikissa kultaisissa X-merkeissä on merkitty kokonaissummat, olet suorittanut tason.