Centralt innehåll
- Grundläggande kontrollstrukturer, konstruktioner och datatyper.
- Grundläggande programmering i ett textbaserat programspråk.
- Strukturerat arbetssätt för problemlösning och programmering.
- Arbetsmetoder för förebyggande av programmeringsfel, testning, felsökning och rättning av kod.
- Gränssnitt för interaktion mellan program och användare.
Fakta
Loopar fanns redan i tidigare programmeringsspråk, men just termen for
användes för första gången
1958 i programmeringsspråket ALGOL 58.
1. Loopar
Ofta vill man utföra samma sak flera gånger i ett program. Att upprepa kod brukar kallas för att repetera, loopa eller iterera. Genom iterationer kan man utföra samma eller nästan samma kod flera gånger, antingen ett bestämt antal gånger eller så länge som ett villkor är sant.
Satser för upprepning kallas oftast för repetitionssatser eller loopar. Det finns två olika typer av repetitionssatser, while-loopen och for-loopen.
1.1 while-loopen
Om man vill upprepa en eller flera satser är det enkelt att använda en while-loop. while-loopen körs så länge som villkoret som styr loopen är sann. Med en while-loop upprepas alltså ett block med kod så länge det givna villkoret är sant.
# Exempel 1.1.1 - Skriver ut alla positiva heltal från 1 till 5
tal = 1
while tal <= 5:
print(tal)
tal = tal + 1
print('Loopen har avslutats')
ger utskriften
1
2
3
4
5
Loopen har avslutats
While-loopen ser ut som if-satsen, men det står while i stället för if.
while tal <= 5:
De rader som ska utföras så länge som villkoret i while-loopen är sann måste vara indenterade.
print(tal)
tal = tal + 1
Raderna kommer att utföras ett visst antal gånger (ingen eller flera gånger). Villkoret kontrolleras före varje gång raderna ska utföras. Om villkoret är sant utförs raderna en gång till. Om villkoret är falskt utförs inte de indenterade raderna och programmet fortsätter med nästa rad efter while-loopen.
print('Loopen har avslutats')
# Exempel 1.1.2 - Skriver ut alla positiva heltal från 1 till 5 på samma rad
tal = 1
while tal <= 5:
print(tal, end = ' ') # Byter inte rad utan skriver ut ett mellanslag
tal = tal + 1
ger utskriften
1 2 3 4 5
# Exempel 1.1.3 - Skriver ut alla jämna positiva heltal mindre än 10
tal = 2
while tal < 10:
print(tal)
tal += 2 # Förkortad version av tal = tal + 2
print('Loopen har avslutats')
ger utskriften
2
4
6
8
Loopen har avslutats
I den kod som upprepas måste villkoret ändras så att det förr eller senare inte längre är sant, annars får man en oändlig loop, dvs en loop som aldrig slutar att exekvera. Prova att ta bort eller kommentera bort raden tal += 2 så att du får en oändlig loop.
# Exempel 1.1.4 - Oändlig loop
tal = 2
while tal < 10:
print(tal)
# tal += 2
print('Loopen har avslutats')
Kör programmet, loopen fortsätter i all oändlighet, eftersom villkoret alltid är sant. Klicka på knappen "stop" i repl.it för att avsluta körningen.
# Exempel 1.1.5 - Skriver ut alla jämna positiva heltal mindre än 10 på samma rad med mellanslag
tal = 2
while tal < 10:
print(tal, end = ' ')
tal += 2 # Förkortad version av tal = tal + 2
ger utskriften
2 4 6 8
# Exempel 1.1.6 - Skriver ut alla jämna positiva heltal mindre än 10 på samma rad utan mellanslag
tal = 2
while tal < 10:
print(tal, end = '')
tal += 2 # Förkortad version av tal = tal + 2
ger utskriften
2468
Programmet beräknar medelvärdet av ett antal positiva heltal som skrivs in av användaren. Inmatningen avbryts när en nolla skrivs in. När man inte på förhand vet hur många gånger något ska upprepas är while-loopen ett bra alternativ.
# Exempel 1.1.7 - beräknar medelvärdet av ett antal positiva heltal
antal = 0
summa = 0
tal = int(input('Ange ett positivt heltal: '))
while tal != 0:
antal = antal + 1 # Vad händer med antalet?
summa = summa + tal # Vad händer med summan?
tal = int(input('Ange ett positivt heltal: '))
if antal != 0:
medelvärde = summa / antal
print('Medelvärdet är', medelvärde)
else:
print('Du har inte skrivit in några tal')
kan ge utskriften
Ange ett positivt heltal: 3
Ange ett positivt heltal: 7
Ange ett positivt heltal: 4
Ange ett positivt heltal: 8
Ange ett positivt heltal: 0
Medelvärdet är 5.5
Före medelvärdet beräknas upprepas while-satsen tills användaren skriver i en nolla.
Sedan kontrolleras också att användaren skrivit in minst ett tal, dvs att variabeln antal är större än noll, innan medelvärdet beräknas. För om antalet är noll kommer programmet att krascha pga av medelvärdet beräknas genom att summan divideras med antal, vilket betyder division med noll. Men det undviker koden här genom att först kontrollera att variabeln antal är skilt ifrån noll.
Vill man även kontrollera att angivet tal verkligen är ett positivt heltal kan koden ändras lite för att även kontrollera det. Det kontrolleras med en if-sats som ligger i while-loopen. Det går bra att ha de olika satstyperna i varandra, s.k. nästlade satser. Var noga med att indenteringen blir rätt, annars kan hela kodens logik förändras.
# Exempel 8 - beräknar medelvärdet av ett antal positiva heltal, med kontroll att talen är positiva
antal = 0
summa = 0
tal = -1
while tal != 0:
tal = int(input('Ange ett positivt heltal: '))
if tal < 0:
print('Du måste ge ett positivt heltal')
elif tal > 0:
antal = antal + 1 # Vad händer med antalet?
summa = summa + tal # Vad händer med summan?
if antal != 0:
medelvärde = summa / antal
print('Medelvärdet är', medelvärde)
else:
print('Du har inte skrivit in några tal')
Begrepp
Iteration: Repetition, upprepning, loop. Satser som upprepas.
While-loop: Upprepar satser så länge som ett villkor är sant. Villkoret kontrolleras först i varje upprepning.
Oändlig loop: En loop där villkoret aldrig blir falskt, och som upprepas i all oändliget.
Utökad tilldelningsoperator: En förkortad version av en tilldelning och beräkning, t.ex. +=
Länkar
Film
Fördjupning
Övningar
Du kan inte att lära dig att programmera genom att läsa en bok eller titta på videos. Du måste öva på att skriva kod själv och ju mer du övar desto bättre blir du.- Vad blir utskriften?
tal = 1 while tal < 4: print(tal, end = ' ') tal = tal + 1
tal = 1 while tal <= 4: print(tal, end = ' ') tal += 1
tal = 0 while tal < 5: print(tal, end = ' ') tal += 1
tal = 2 while tal <= 5: tal += 1 print(tal, end = ' ')
-
Skriv ett program som med while-loopen skriver ut:
alla tal mellan 0 och 10
alla tal mellan 1 och 12
alla tal mellan 14 och 2
alla tal mellan 1 och 100
alla tal mellan 10 och 100 - Använd while-loopen för att skriva ut alla multipler av 3 som är mindre än 50.
-
* Ett A4-papper är 0,1 mm tjockt. Om man viker pappret dubbelt blir det 0,2 mm tjockt. Antag att det går att vika pappret dubbelt ett obegränsat antal gånger. Använd en loop för att beräkna hur många gånger r pappret måste vikas dubbelt så att tjockleken blir lika med avståndet till månen, som är 384 000 km.
Tips: Använd while-loopen.
Inlämningsuppgift
Uppgift - Fråga
Skriv ett program där användaren får svara på en fråga tills rätt svar anges. Frågan ska alltså upprepas så länge som användaren svarar fel (tips: använd while-loopen).
Frågan och rätt svar ska vara variabler som skrivs överst i koden, t.ex.
question = 'Vad heter Sveriges huvudstad? '
correct_answer = 'Stockholm'
Exempelkörning:
Vad heter Sveriges huvudstad? Oslo
Fel svar
Vad heter Sveriges huvudstad? Copenhagen
Fel svar
Vad heter Sveriges huvudstad? Stockholm
Korrekt svar
Programmet avslutas
Hur hanterar du svar där skillnaden endast är stora/små bokstäver, t.ex. om användaren svarar stockHolm?
OBS! Kontrollera att ditt program fungerar genom att byta fråga och svar genom att endast byta värden för variablerna question och correct_answer och sedan provköra igen.
Kom ihåg! Använd beskrivande variabelnamn och kommentera koden.
Frivillig utmaning
Räkna antal försök som behövs för att svara rätt.
Exempelkörning:
Vad heter Sveriges huvudstad? Oslo
Fel svar
Vad heter Sveriges huvudstad? Stockholm
Korrekt svar
Du svarade korrekt efter 2 försök
Frivillig extra utmaning
Begränsa antalet försök.
question = 'Vad heter Sveriges huvudstad? '
correct_answer = 'Stockholm'
max_tries = 3
Exempelkörning:
Vad heter Sveriges huvudstad? Oslo
Försök 1: Fel svar
Vad heter Sveriges huvudstad? Helsingfors
Försök 2: Fel svar
Vad heter Sveriges huvudstad? Köpenhamn
Försök 3: Fel svar
Frågan avbryts: Du svarade fel trots 3 försök