Avansert Pythonutviklingskurs
Kapittel
>
Nivå
Avanserte klasser
Operatoroverlasting
Mål
Tell opp hvor mye vin som blir klarert ved å bruke vektorer og operatør overbelastning.
Etter at vinen har blitt presset, må den filtreres og klareres. Det er flere tønner som filtreres, og de må skylles gjennom. Det er viktig å telle opp hvor mye vin som produseres, slik at tønner kan forsegles og modnes.
For å gjøre dette må du lage vektorer og legge dem sammen. Disse ligner på lister, men er ikke like fleksible, samtidig som de er mer minneeffektive. De brukes vanligvis til å håndtere koordinater; i dette tilfellet vil vi bruke dem som variabler som inneholder mer enn én verdi. Å legge sammen vektorene gjøres ved å bruke Operatør Overbelastning, som utvider funksjonaliteten til klasseobjekter slik at operatører kan benyttes med dem på samme måte som med vanlige verdier.
For å starte: gå og samle de metalliske vanntinnene som er plassert øverst i rommet. Disse vil bli brukt til å hjelpe med å skylle vinen som filtreres i tønner. Når de er samlet, gå til det mørke X-merket over det røde teppet, vend deg mot tønnen og begynn å vektorisere innholdet i hver tønne.
X-merker er arrangert i sett på tre (3) for hvert farget teppe; et gull X-merke, et lyst X-merke og et mørkt X-merke. På alle mørke og lyse X-merker, bruk water()-funksjonen for å hjelpe med å skylle tønner. Også på alle mørke og lyse X-merker, bruk read()-funksjonen for å identifisere hvor mye vin som behandles i den kolonnen med tønner. På det gull X-merket bruker du write()-funksjonen for å notere oppsummeringen av mengdene sammen.
I kodeeditoren finnes det en klasse kalt vector. Denne brukes slik at du ikke bare kan lage en vektor, men også legge dem sammen. Lag vector-objekter for å lagre dataene som er identifisert på de lyse og mørke X-merkene. For eksempel, på red-teppene filtreres rødvin:
# 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
I en vektor kalles den første posisjonen for x og den andre posisjonen for y, med formelen slik: object_name = vector(x,y). Dette er relevant for å fylle vektorene med informasjonen hentet fra read()-funksjonen.
På de gull X-merkene, bruk write()-funksjonen for å skrive ned totalen for hvert sett med vektorer. For eksempel, i tilfelle av de røde teppenes X-merker, skrives det slik:
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)
Husk å legge til .x og .y på slutten av totalen for å identifisere verdiene til hver vektor.
For hvert sett med fargede tepper blir det filtrert en annen type vin. På det nevnte red-teppet filtreres red_wine; på de yellow-teppene filtreres sparkling_wine; på de green-teppene filtreres white_wine; og på de orange-teppene filtreres orange_wine.
Når alle lyse og mørke X-merker har blitt skylt med water()-funksjonen, og alle tegn på de gull X-merkene har totalene skrevet ned, vil du ha fullført nivået.