Oppsummering fra sist

Like dokumenter
Med løkke: Læringsmål og pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker/Sløyfer Utgave 3: Kap. 4 Utgave 2: Kap. 5. Mål.

TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker. - 3rd edition: Kapittel 4. Professor Alf Inge Wang

Læringsmål og pensum. Intro løkker. Mål Lære om begrepet løkker Lære om bruk av while-løkke Lære om bruk av for-løkke Pensum. Kapittel 4.

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap. 3

if (be): else (not_to_be): TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap.

Læringsmål og pensum. if (be): else (not_to_be):

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk. - 3rd edition: Kapittel 3. Professor Alf Inge Wang

Øvingsforelesning 3 Python (TDT4110)

TDT4110 IT Grunnkurs Høst 2015

Python: Valg og betingelser. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Læringsmål og pensum. Oversikt

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Unntak (exceptions) (Kap 6) Dictionaries (Kap. 9) Terje Rydland - IDI/NTNU

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og sets (mengder) Utgave 3: Kap. 9. Terje Rydland - IDI/NTNU

Python: Variable og beregninger, input og utskrift. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Filer og unntak (exceptions) Utgave 3: Kap. 6. Terje Rydland - IDI/NTNU

Øvingsforelesning 5 Python (TDT4110)

TDT4110 Informasjonsteknologi grunnkurs: Tema: Funksjoner med retur og moduler Utgave 3: Kap

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Et større case. Terje Rydland - IDI/NTNU. Lære å lage større og sammensatte programmer

Øvingsforelesning 5 Python (TDT4110)

TDT4110 Informasjonsteknologi grunnkurs: Tema: Lister og tupler. - 3rd edition: Kapittel 7. Professor Alf Inge Wang

TDT4110 IT Grunnkurs Høst 2014

Pensum: Starting out with Python

Øvingsforelesning 1 Python (TDT4110)

Repetisjon Novice Videregående Python PDF

Tirsdag 21/11. Onsdag 24/11. Tirsdag 12/12. TDT4110 Informasjonsteknologi grunnkurs: Tema: Et større case

Hvordan løse problemer med programmering?

Øvingsforelesning i Python (TDT4110)

TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og mengder (sets) - Kapittel 9. Professor Alf Inge Wang

MENGDER (SETS) Læringsmål og pensum. Kapittel 9.2

Læringsmål og pensum. Designe et program

Bruk piazza for å få rask hjelp til alles nytte!

Designe et program. TDT4110 Informasjonsteknologi grunnkurs: Kapittel 2 Python: Bruk av funksjoner, variabler og input/output. Mål.

Hangman. Steg 1: Velg et ord. Steg 2: Gjett en bokstav. Sjekkliste. Sjekkliste. Introduksjon

TDT4110 Informasjonsteknologi grunnkurs: Tema: Filer og unntak ( exceptions ) - 3rd edition: Kapittel 6. Professor Alf Inge Wang

Læringsmål og pensum. Inn- og utoperasjoner 21/10/16

TDT4110 IT Grunnkurs Høst 2016

Løse reelle problemer

TDT4110 Informasjonsteknologi grunnkurs: Tema: Funksjoner med retur og moduler. - 3rd edition: Kapittel Professor Alf Inge Wang

YouTube-kanal ITGK. Læringsmål og pensum

I denne oppgaven skal vi repetere litt Python-syntaks, det er en god blanding av alle tingene du har lært i Python til nå.

Først må vi få datamaskinen til å velge et tilfeldig ord, så la oss begynne. Lagre programmet ditt og kjør det. Hvilket ord skrives ut?

Læringsmål og pensum. Intro til returverdifunksjoner: Generering av tilfeldige tall 27/09/16

Dictionary er et objekt som lagrer en samling av data. Minner litt om lister men har klare forskjeller:

TDT4110 Informasjonsteknologi grunnkurs: Tema: Enkle funksjoner. - 3rd edition: Kapittel Professor Alf Inge Wang

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 2 Python: Bruk av funksjoner, variabler og input/output. Professor Alf Inge Wang

Hangman. Level. Introduksjon

Auditorieøvingstider for alle linjer er postet på forsiden av wikien (under «Siste nytt»). Studenter som ikke kan møte til oppsatt tidspunkt, kan

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

TDT4110 IT Grunnkurs Høst 2016

Python: Intro til funksjoner. TDT4110 IT Grunnkurs Professor Guttorm Sindre

JS: Grunnleggende JavaScript Nybegynner

TDT4110 Informasjonsteknologi grunnkurs: Programmering: En større case. Professor Alf Inge Wang

Læringsmål og pensum. En større case. Mål Lære å lage større og sammensatte programmer Pensum Kapitlene 1-9 og 12.

TDT4105 Informasjonsteknologi, grunnkurs. Matlab 5: Løkker (FOR og WHILE) Matlab 6: Problemløsning / Algoritmer

Hvor gammel er du? Hvor gammel er du? Del 1: Skrive ut til skjerm. Gjøre selv. Skrevet av: Sindre O. Rasmussen, Kodeklubben Trondheim

Oppgaver uke 1: Løsningsforslag

TDT4110 Informasjonsteknologi grunnkurs: Tema: Mer om strenger. - 3rd edition: Kapittel 8. Professor Alf Inge Wang

Dictionary er et objekt som lagrer en samling av data. Minner litt om lister men har klare forskjeller:

Kontrollstrukturer (valg og løkker)

TDT4105 Informasjonsteknologi, grunnkurs. Matlab 5: Løkker (FOR og WHILE) Matlab 6: Problemløsning / Algoritmer

print("hurra!") som ikke har innrykk, er ikke del av løkka, og vil derfor bare bli utført en gang, etter at løkka er ferdig.

Mattespill Nybegynner Python PDF

C# (.Net) Tema: Loops (Løkker) Leksjon 7 Kap 18

Læringsmål og pensum. Algoritmeeffektivitet

MAT1030 Plenumsregning 1

TDT4110 Informasjonsteknologi grunnkurs: Tema: Algoritmer i praksis. Professor Alf Inge Wang

TDT4110 Informasjonsteknologi grunnkurs: Tema: Lister og tupler Kap 5: Egne moduler + et større eksempel Kap. 7

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

INF1000 (Uke 4) Mer om forgreninger, While-løkker

Ta kontakt i pausen. Viktig at vi kommer i gang med dette arbeidet!

Python: Funksjoner og moduler Kapittel

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Repetisjon. Mer om forgrening While-løkker

Løse reelle problemer

MAT1030 Diskret Matematikk

Python: Oppslagslister (dictionaries) og mengder 3. utgave: Kapittel 9

Excited. Hvordan komme i gang med tekstbasert programmering? Centre for Excellent IT Education. Guttorm Sindre

JS: Grunnleggende JavaScript

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

Plenumsregning 1. Kapittel 1. Roger Antonsen januar Velkommen til plenumsregning for MAT1030. Repetisjon: Algoritmer og pseudokode

TDT4110 Informasjonsteknologi grunnkurs: Tema: Mer om strenger Utgave 3: Kap. 8

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Tre måter å lese fra terminal.

Løsningsforslag Kontinuasjonseksamen i TDT4110 Informasjonsteknologi - grunnkurs

Læringsmål og pensum. Oppgave

I dag skal vi ved hjelp av ganske enkel Python-kode finne ut om det er mulig å tjene penger på å selge og kjøpe en aksje.

Programmering Høst 2017

TDT4110 Informasjonsteknologi grunnkurs: Python: Repetisjon. Professor Alf Inge Wang

Løkker og arrayer. Løse problemer med programmering. INF1000, uke3 Geir Kjetil Sandve

Obligatorisk oppgave MAT-INF1100. Lars Kristian Henriksen UiO

MAT1030 Plenumsregning 3

Plenumsregning 1. MAT1030 Diskret Matematikk. Repetisjon: Algoritmer og pseudokode. Velkommen til plenumsregning for MAT1030

Python: Variable og beregninger, innlesing fra tastatur utskrift til skjerm. TDT4110 IT Grunnkurs Professor Guttorm Sindre

INF uke 2. Inputt, beslutninger, kontrollflyt og prosedyrer

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Noen innebygde funksjoner - Vektorisering

INF 1000 høsten 2011 Uke september

Transkript:

1 av 34 Kunnskap for en bedre verden TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker/Sløyfer Utgave 3: Kap. 4 Terje Rydland - IDI/NTNU 2 av 34 Oppsummering fra sist Betingelser i Python: <, >, <=, >=, ==,!=, <> Operatorer for logiske uttrykk: and, or, not Logiske uttrykk kan enten bli False eller True 3 varianter if, if else, if elif elif elif else if-setninger: if (<betingelse>): <utfør noe> # HUSK INNRYKK! elif (<betingelse): <utfør noe> # HUSK INNRYKK! else: <utfør noe annet> Vi kan også bruke nøstede if-setninger Husk : etter det logiske uttrykket i if, else og elif.

3 av 34 Læringsmål og pensum Mål Lære om begrepet løkker (eller sløyfer hvis du vil) Lære om bruk av while-løkke Lære om bruk av for-løkke Pensum Starting out with Pyton: Chapter 4 Repetition Structures 4 av 34 Løkker - gjenta kodelinjer flere ganger - Kap. 4.1 Det er nyttig å kunne gjenta en del av et program flere ganger, uten å skrive det samme mange ganger. Til dette bruker man løkker. Dette er tungvint, bruk heller løkke: Ordet løkke brukes fordi vi skal gjenta noe flere ganger (rundt og rundt) Med løkke: for i in range(10):

5 av 34 Begreper Løkke: En repeterende struktur som gjør at en kodelinje eller flere kodelinjer blir kjørt flere ganger. Betingelseskontrollert løkke (while): Bruker en True/False betingelse for å bestemme hvor mange ganger kodelinjene skal kjøres Kalles en pretest-løkkestruktur fordi man tester betingelsen før løkken utføres. Antallkontrollert løkke (for): Repeterer kode et bestemt antall ganger 6 av 34 To typer løkker i Python While-løkke Hvis man skal gjenta en kodebit flere ganger så lenge en betingelse er oppfylt. Typisk gjentagelse av kode hvor man ikke vet helt hvor mange ganger koden skal gjentas. For-løkke Hvis man skal gjenta en kodebit et bestemt antall ganger, bruker man en for-løkke. Typisk hvis man skal gjøre noe med alle elementene i ei liste eller en tabell.

7 av 34 while-løkka Kap. 4.2 Betingelse True Kode False 8 av 34 Skrive en while-løkke Generell format for while-løkke i Python: while betingelse: kodelinje1 kodelinje2 kodelinje3 Hvis betingelsen er True vil kodelinje1 og kodelinje2 bli utført helt til betingelsen blir False Kun kode med innrykk hører til while-løkka (altså ikke kodelinje3) NB: Pass på at det skjer noe i sløyfa som gjør at betingelsen for å oppholde seg i sløyfa har en mulighet for å feile. Her endres verdien av x slik at det er mulig at x > 0 kan bli False og while-løkka avsluttes

9 av 34 Et eksempel på bruk av while Summer et vilkårlig antall positive tall ved at brukeren skal skrive inn tall ved hjelp av input() Brukeren avslutter ved å skrive inn 0 og deretter skrives summen ut til konsollet (tekstvinduet) Vi titter på en mulig løsning kode: TDT4105 summer.py IT Grunnkurs 10 av 34 Evig løkke Løkker må inneholde kode som gjør at de terminerer (avslutter): Noe inne i while-løkka må føre til at betingelsen blir False Evig løkke: En løkke som ikke har kode som gjør at den stopper Programmet gjentar kode helt til brukeren avbryter programmet Oppstår når programmereren glemmer å inkludere kode som avslutter løkka (gjør betingelsen False)

11 av 34 Litt større eksempel Lag et program som tar inn salgsbeløp fra tastaturet og beregner hvor mye selgeren skal ha i kommisjon. For beløp over 10000 skal han ha 10%, for beløp mellom 5000 og 10000 skal han ha 5%. Programmet skal beregne den totale kommisjonen selgeren skal ha og kjøre helt til brukeren sier det er slutt. Planlegging: 1. Vi må bruke en while-løkke siden det ikke er forbestemt hvor mange dataverdier som skal legges inn 2. Vi må ha en variabel for å summere sammen kommisjonen. 3. Vi må bruke en if-struktur for å avgjøre kommisjonsbeløpet. Denne må ligge inne i while-løkka 4. Printsetningen for å skrive ut resultatet må ligge utenfor while-løkka Pseudokode: 1. Nullstill en variabel for å inneholde kommisjonssummen. 2. Nullstill en variabel for å styre while-løkka. Den må få en verdi slik at vi kommer inn i while-løkka første gang 3. Så lenge det er data igjen 1. Hent inn data fra tastaturet. Verdien må konverteres til tall - float 2. Sjekk verdien og beregne kommisjon. 3. Oppdater kommisjonssummen ved å legge til ny kommisjon til den gamle verdien 4. Spør brukeren om det skal legges inn flere verdier 4. Skriv ut resultatet 12 av 34 Pseudokode: Større eksempel 1. Nullstill en variabel for å inneholde kommisjonssummen. 2. Nullstill en variabel for å styre while-løkka. Den må få en verdi slik at vi kommer inn i while-løkka første gang 3. Så lenge det er data igjen 1. Hent inn data fra tastaturet. Verdien må konverteres til tall - float 2. Sjekk verdien og beregne kommisjon. 3. Oppdater kommisjonssummen ved å legge til ny kommisjon til den gamle verdien 4. Spør brukeren om det skal legges inn flere verdier 4. Skriv ut resultatet

13 av 34 Oppgave: while-løkke Skriv Python-koden til følgende pseudokode: Opprette en variabel n og sette den lik 5 Så lenge at n er større enn 0, gjenta: skriv ut verdien av n til konsoll minsk verdien av n med 1 kode: oppgave-while-py 14 av 34 Oppgave: while-løkke Skriv Python-koden til følgende pseudokode: Opprette en variabel n og sette den lik 5 Så lenge at n er større enn 0, gjenta: skriv ut verdien av n til konsoll minsk verdien av n med 1

15 av 34 Et enkelt spill vha while Vi skal lage et enkelt gjettespill, der spilleren skal gjette på et tilfeldig tall mellom 1 og 100. Hvis man gjetter for lavt eller høyt, skal spilleren få beskjed om dette. Hvis man gjetter riktig, er spillet ferdig. For å få til et tilfeldig tall brukes: import random # Laster inn random bibliotek random.random() #Tilfeldig flyttall mellom 0 og 1 For å gjøre om flyttall (desimaltall) til heltall brukes int() heltall = int(desimaltall) Alternativ for å få et tilfeldig heltall mellom start og slutt: random.randint(start, slutt) kode: gjettespill.py 16 av 34 Et enkelt spill vha while Vi skal lage et enkelt gjettespill, der spilleren skal gjette på et tilfeldig tall mellom 1 og 100. Hvis man gjetter for lavt eller høyt, skal spilleren få beskjed om dette. Hvis man gjetter riktig, er spillet ferdig. For å få til et tilfeldig tall brukes: import random # Laster inn random bibliotek random.random() #Tilfeldig flyttall mellom 0 og 1 For å gjøre om desimaltall til heltall brukes int() heltall = int(desimaltall) Alternativ for å få et tilfeldig heltall mellom start og slutt: random.randint(start, slutt) Pseudokode 1. Importer biblioteket random 2. Plukk ut et tilfeldig tall 3. Sett gjettevariabelen lik en verdi du vet ikke er riktig slik at man kommer inn i while-løkka 4. Så lenge dette tallet ikke er riktig 1. Les inn en gjettverdi 2. Sjekk om den er rett og skriv om den er for liten eller for stor 5. Skriv melding om at du har funnet svaret

17 av 34 Et enkelt spill vha while Pseudokode 1. Importer biblioteket random 2. Plukk ut et tilfeldig tall 3. Sett gjettevariabelen lik en verdi du vet ikke er riktig slik at man kommer inn i while-løkka 4. Så lenge dette tallet ikke er riktig 1. Les inn en gjettverdi 2. Sjekk om den er rett og skriv om den er for liten eller for stor 5. Skriv melding om at du har funnet svaret 18 av 34 Et enkelt spill vha while while-kriteriet kan utformes på mange måter

19 av 34 Import Python random Python random Python random Python + alle funksjonene i random 20 av 34 for-løkker Kap. 4.3 og 4.4 Brukes for å gjenta en blokk et bestemt antall ganger. for-løkke er designet for å jobbe med en sekvens (liste) av dataelementer Gå igjennom sekvensen (liste), element for element Liste sekvens av dataelementer skilt med komma og omkranset av [ ] Generelt format: for variabel in [verdi1, verdi2,, verdin]: kodelinjer Variabel får verdier fra lista fra første element til siste, element for element for hver runde. Koden som blir utført av for-løkka må ha innrykk

21 av 34 Hva skjer når man kjører ei for-løkke Kode som skriver ut tallene 1 til 5. Variabelen num får verdier fra lista, element for element, for hver runde løkka kjører 22 av 34 for-løkke for variabel som inneholder en liste En for-løkke kan også kjøres på en variabel som inneholder en liste av verdier: navneliste=['ole','per','oline','anna','frida'] for navn in navneliste: print(navn) Skriver ut navnene til skjerm i rekkefølge En for-løkke kan iterere (gå igjennom) ei liste av alle typer verdier (strenger, heltall, flyttall, sannhetsverdier osv). Ei liste defineres ved å bruke [ ] rundt verdier og komma mellom elementene

23 av 34 Bruk av range-funksjonen i for-løkker range er en funksjon som gjør det enklere å skrive tellende for-løkker. range-funksjonen lager et objekt av typen iterable. iterable er et objekt som ligner på en liste og inneholder verdier som en liste kan iterere over. range kan ha tre varianter: range(til) # tilsvarer [0,1,2,til-1] range(fra,til) # tilsvarer [fra, fra+1, fra+ n, til-1] range(fra, til, steg) # tilsvarer [fra, fra+steg, fra+2*steg,,til-1] Det siste elementet i en liste generert av range er alltid en mindre enn verdien som oppgis som stoppverdi les det som opp til og ikke opp til og med 24 av 34 Kodeeksempler på bruk av range og liste Range: Liste: for n in range(5): for n in [0,1,2,3,4]: print(n) print(n) for n in range(1,5): for num in [1,2,3,4]: print(n) print(n) for n in range(1,6,2): for num in [1,3,5]: print(n) print(n) for n in range(10,1,-3): for num in [10, 7, 4]: print(n) print(n)

25 av 34 Oppgave: for-løkke Skriv Python-koden en for-løkke som skriver ut: Alle tallene i 3-gangen sammen med kvadratet (3 2, 6 2 ) Det skal være en tabulator mellom 3 gangen og kvadratet. kode: kvadrat.py 26 av 34 Oppgave: for-løkke Skriv Python-koden en for-løkke som skriver ut: Alle tallene i 3-gangen sammen med kvadratet (3 2, 6 2 ) Det skal være en tabulator mellom 3 gangen og kvadratet. 3 løsningsforslag

27 av 34 Endring av verdier i variabler Kap 4.5 Lang-form Kompaktform Hva gjøres x = x + 4 x += 4 Øker verdien av x med 4 x = x 3 x -= 3 Minsker verdien av x med 3 x = x * 10 x *= 10 Multipliserer verdien av x med 10 x = x / 2 x /= 2 Dividerer verdien av x med 2 x = x % 4 x %= 4 Resten av x delt på 4 Det sparer skriving og øker lesbarheten 28 av 34 Større eksempel Lag et program som tar inn tall fra tastaturet. Programmet skal finne summen og produktet av alle tallene som skrives inn Det skal også finne hvor mange tall som skrives inn, det største tallet og hvilken nr. det er i rekken av innskrevne tall. Analyse - Vi trenger Input-setning for å lese fra tastaturet Variabler for: sum produkt antall største tall Hvilket tall det er i rekken En løkke for å lese inn nye tall og gjøre beregningene. Siden vi ikke vet hvor mange tall som leses inn må det brukes en while-løkke Avsluttende utskrift

29 av 34 Pseudokode Vi trenger Input-setning for å lese fra tastaturet Variabler for: sum produkt antall største tall Hvilket tall det er i rekken En løkke for å lese inn nye tall og gjøre beregningene. Siden vi ikke vet hvor mange tall som leses inn må det brukes en whileløkke Avsluttende utskrift summen settes lik 0 produkt settes lik 1 antall settes lik 0 Hent input fra tastaturet og konverter til tall Største tall settes lik det tallet som ble lest fra tastaturet maks posisjon settes lik 1 Så lenge tall!= 0 Adder tall til summen Multipliser tall til produktet Øk antall med 1 Hvis tall er større enn maks Maks settes lik tall Maks posisjon settes lik antall Les inn nytt tall Hvis antall > 0 Skriv ut resultater 30 av 34 Validering av input vha løkker Kap. 4.6 Ofte ønsker man å sikre seg at riktig verdier på input fra brukeren før programmet går videre. Dette kan man gjøre vha while-løkke: alder = int(input('hvor gammel er du? ')) while (alder<0 or alder>120): print('feil: Alder må være mellom 0 og 120!') alder = int(input('hvor gammel er du? ')) print('takk for den du!!!') kode: alder.py

31 av 34 Nøstede løkker Kap. 4.7 En løkke inne i en annen løkke kalles nøstede løkker. Noen fenomener er av en slik art at man trenger en hierarkisk gjennomkjøring av løkke. Tid er et godt eksempel der man teller først 60 sekunder, før man øker minutt med 1 osv. Utskrift av tid som nøstede løkker: for t in range(24): for m in range(60): for s in range(60): print(t,":",m,":",s) kode: tid.py 32 av 34 Oppgave: nøstede for-løkke Skriv Python-koden til følgende pseudokode: La y løpe igjennom tallene fra 1 til 3 La x løpe igjennom tallene fra 1 til 3 Sett z lik x multiplisert med y Skriv ut verdien av z til konsoll Hva blir skrevet ut til konsoll? kode: oppgave_dobbel_lokke.py

33 av 34 Oppgave: nøstede for-løkke Skriv Python-koden til følgende pseudokode: La y løpe igjennom tallene fra 1 til 3 La x løpe igjennom tallene fra 1 til 3 Sett z lik x multiplisert med y Skriv ut verdien av z til konsoll Hva blir skrevet ut til konsoll? 34 av 34

35 av 34 Oppsummering while-løkke brukes når en betingelse avgjør antall iterasjoner (gjennomganger): while(betingelse): for-løkke brukes når man skal iterere over en liste eller et bestemt antall ganger: for x in [1,2,3,4]: for y in [ test,3.14,true,9]: for z in range(1,5,2): for i in range(1,5): Nøstede løkker er løkker inne i andre løkker: for x in [1,3,5]: for y in range [5,7,12]: