Logga in för att kunna spara vad du har gjort.
<< Föregående
Hem
Nästa >>
VARNING! Fönstret är för smalt för att använda pythonlabbet.se fullt ut. Använd en enhet med tangentbord!

while-satsen

I det här avsnittet kommer du att lära dig om

Enkla loopar med while

En annan oerhört viktig del inom programmering är att kunna köra samma kod om och igen. En loop är kod som repeteras tills villkoret för att loopen ska fortsätta inte längre är uppfyllt. I de flesta programmeringsspråk finns den så kallade while-satsen. I Python skriver vi while villkor:, det repeterar en bit kod medans (engelska: while) villkoret är sant.

Exempel

En while-sats används för att skriva ut talen ett till tio.

x = 1
while x <= 10:
    print(x)
    x = x + 1

I exemplet ovan startar x med värdet ett. På rad 2 kommer programmet till while och testar om x <= 10, och det är ju sant. Då tar vi oss ner i kodblocket under while, skriver ut 1 och sedan ges x + 1 till x. Vi adderar helt enkelt ett till x (plussar på x med 1) och x är nu lika med två. Eftersom vi är i en while-loop kommer vi tillbaka till rad 2 och testar om x fortfarande är mindre eller lika med 10. Det stämmer ju (x = 2), så vi kör koden inuti while-satsen igen. Programmet fortsätter på det här viset tills 10 skrivs ut och värdet 11 sparas i x. Då när programmet kommer tillbaka till rad 2 stämmer det inte längre att x <= 10, därmed är vi klara med while-satsen.

Det är förståeligt om du tycker att x = x + 1 ser konstigt ut. Inom matematiken betyder det något helt annat. Därför är det viktigt att här komma ihåg att = betyder tilldelning i Python (och de flesta programmeringsspråk).

Det är väldigt viktigt att du förstår exemplet och texten ovan så läs gärna om det tills du förstår det. Var inte heller rädd för att experimentera med koden. Fundera på: vad händer om vi missar att öka x med ett i varje loop?

Logga in eller skapa konto för att spara dina framsteg och din kod.

Vad gör koden?

Läs koden nedan och försök lista ut vad programmet skriver ut. Kör programmet efter du svarat och se om du fick rätt.

-- Programmets utskrifter --

Fråga: Vad kommer programmet ovan att skriva ut?

2
1
2
1
0
2
0

Logga in eller skapa konto för att spara dina framsteg och din kod.

Ändra i koden

Ändra i while-loopen så att endast udda tal mellan 1 och 10 skrivs ut (talet 1 ska vara med).

-- Programmets utskrifter --

Kom du på vad som händer om vi glömmer öka x med ett för varje loop eller för varje iteration som det också kallas? Då kommer aldrig loopen att avslutas och vi får en oändlig loop. Alla programmerare råkar förr eller senare ut för en oändlig loop, det är en ganska vanlig bugg.

Exempel

En oändlig loop. Om du kör koden nedan kan det till slut krascha din webbläsare. Därför finns stopp-knappen! Den är bra att ha när programmet råkat hamna i en oändlig loop. Kan du ändra koden så att programmet stannar?

x = 0
while x < 5:
    print(x)

Exempel - ett enkelt "spel"

I det här enkla spelet ska du gissa på vad resultatet av en beräkning är. Om du gissar smart kan du ganska snabbt hitta svaret! Påminnelse: operatorn % betyder rest vid division.

x = -1
facit = 124861357 % 107
while x != facit:
    x = int( input('Vad tror du 124861357 % 107 är?') )
    if x < facit:
        print('Du gissade för litet.')
    elif x > facit:
        print('Du gissade för stort.')
print('Du gissade på ' + str(x) + ' och det är rätt!')

Så här fungerar programmet i stora drag: Loopen körs medan gissningen inte är lika med facit. Väl inne i loopen får x värdet av den nya gissningen. Vi testar om x är större än eller mindre än det rätta svaret och skriver ut något lämpligt. När while slutligen ser att x != facit är falskt (vi har ett rätt svar), så avbryts loopen, och vi skriver ut att användaren gissat rätt.

break och continue

För att avbryta en loop under körning används break. För att forsätta med nästa iteration utan att köra mer kod i nuvarande iteration, används continue. Som vi ser i exemplet nedan kan break till exempel användas om man alltid vill köra koden i loopen minst en gång.

Exempel

Koden i while-loopen körs alltid minst en gång. Villkoret för att avbryta while-satsen ligger i slutet istället. Med while True: körs loopen tills den avbryts.

while True:
    svar = input('Vilket år blev Gustav Vasa kung?')
    if svar == '1523':
        break

Exempel

Ett program som skriver ut roten ur (vilket är samma sak som att ta upphöjd till en halv) på input. Om användaren ger ett negativt tal används continue för att inte beräkna roten ur på ett negativt tal. Noll används för att avsluta.

while True:
    tal = float( input('Vad vill du ta roten ur av? (Avsluta med 0)') )
    if tal < 0:
        continue
    elif tal == 0:
        break
    print(tal**0.5)

Exempel - är talet ett primtal?

Nu ska vi göra ett enkelt test av ett heltal för att se om det är ett primtal. Ett primtal är bara delbart med sig själv och ett. Vi testar helt enkelt om det finns något tal som motsäger det. Vi behöver inte testa att dividera tal som är större än roten ur talet. Varför?

Om du provar några stora slumpmässiga tal så får du se att det är ganska svårt att hitta på ett stort primtal.

tal = int( input('Vilket tal vill du testa?') )
x = 2
primtal = True
while x <= tal ** 0.5:
    if tal % x == 0:
        primtal = False
        break
    x = x + 1
    
if primtal:
    print(str(tal) + ' är ett primtal.')
else:
    print(str(tal) + ' är INTE ett primtal.')

Logga in eller skapa konto för att spara dina framsteg och din kod.

Vad gör koden?

Läs koden nedan och försök lista ut vad programmet skriver ut. Kör programmet efter du svarat och se om du fick rätt.

-- Programmets utskrifter --

Fråga: Vad kommer programmet ovan att skriva ut?

64,6
99,6
128,6
64,7
99,7
128,7

Logga in eller skapa konto för att spara dina framsteg och din kod.

Multiplikationstabellen

Ditt program ska ta två heltal, x och n (i den ordningen) som input av användaren. Därefter ska programmet skriva ut de n första talen i multiplikationstabellen för x.

Exempel
Indata:
x = 2
n = 5
Utskrift:
2
4
6
8
10

-- Programmets utskrifter --
Status
Du har inte gjort klart någon uppgift än (0 st).