About

Swaroop C H is 27 years of age. He is currently a Product Leader at Infibeam, one of the largest ecommerce companies in India. He has previously worked at Yahoo!, Adobe and his own startup.

Read more about him

Page
COLLECTION
Collection

Python nb-no:Kontrollflyt

From Notes

Jump to: navigation, search

Contents

[edit] Introduksjon

I programmene vi hittil har sett på har det alltid vært en rekke påstander som Python trofast kjører i samme rekkefølge. Hva hvis du vil forandre hvordan det kjører? For eksempel vil du kanskje at programmet skal ta noen valg og gjøre forskjellige ting i av forskjellige situasjoner, som å skrive 'God morgen' eller 'God kveld' avhengig av hvor mye klokka er?

Som du kan ha gjettet kan vi gjøre dette med kontrollflytpåstander. Det er tre kontrollflytpåstander i Python - if, for og while.

[edit] if-påstanden

if-påstanden brukes for å sjekke en tilstand er sann, og hvis (if) tilstanden er riktig (True) kjører vi en blokk med påstander (kalt if-blokken). Ellers (else) kan vi kjøre en annen blokk (kalt else-blokken). En else-blokk er valgfri.

Eksempel:

#!/usr/bin/python
# Filnavn: if.py
 
tall = 23
gjett = int(input('Skriv inn et tall: '))
 
if gjett == tall:
    print('Gratulerer, du gjettet det') # Ny blokk starter her
    print('(men du vinner ingenting!)') # Ny blokk slutter her
elif gjett < tall:
    print('Nei, det er litt høyere enn det') # Enda en blokk
    # Du kan gjøre hva enn du vil i en blokk...
else:
    print('Nei, det er litt lavere enn det')
    # Du må ha gjett > tall for å komme hit
 
print('Ferdig')
# Denne siste påstanden blir alltid kjørt etter at if-påstanden er ferdigkjørt.

Output:

   $ python if.py
   Skriv inn et heltall: 50
   Nei, det er litt lavere enn det
   Ferdig
   
   $ python if.py
   Skriv inn et heltall: 22
   Nei, det er litt høyere enn det
   Ferdig
   
   $ python if.py
   Skriv inn et heltall: 23
   Gratulerer, du gjettet det
   (men du vinner ingenting!)
   Ferdig

Hvordan det virker:

I dette programmet tar vi et tall brukeren gjetter og sjekker om det er det samme som tallet vi har bestemt på forhånd. Vi starter med å sette variabelen tall til hvilket som helst heltall, for eksempel 23. Så spør vi brukeren om å gjette et tall ved å bruke input()-funksjonen. Funksjoner er bare gjenbrukbare biter med program. Vi skal lese mer om dem i neste kapittel.

Vi gir også en streng til input-funksjonen, som skriver den til skjermen før den mottar input fra brukeren. Med en gang vi skriver noe og trykker enter-tasten kommer input-funksjonen tilbake til programmet med det vi skrev inn i form av en streng. Vi konverterer denne strengen til et heltall ved å bruke int og så lagre den i variabelen gjett. int er faktisk en klasse, men alt du trenger å vite om dem nå er at du kan bruke int til å konvertere en streng til et heltall (så lenge strengen inneholder et gyldig heltall).

Så sammenligner vi gjetningen til brukeren med tallet vi har valgt. Hvis de er like skriver vi en melding om suksess. Legg merke til at vi bruker innrykksnivåer for å fortelle Python hvilke påstander som tilhører hvilken blokk. Dette er grunnen til at innrykk er så viktig. Jeg håper du holder deg til regelen om "konsistent innrykk". Gjør du?

Legg merke til hvordan if-påstanden har et kolon på slutten - vi indikerer for Python at det følger en blokk med påstander

Så sjekker vi om brukerens gjetning er mindre enn tallet, og hvis dette er tilfelle gir vi brukeren beskjed om at han/hun må gjette litt høyere enn det. Det vi har brukt her er en elif-klausul som kombinerer de to beslektede if else-if else-påstandene til en sammensatt if-elif-else-påstand. Dette gjør programmet enklere og reduserer mengden innrykk vi trenger.

elif- og else-påstandene må også ha et kolon på slutten av den logiske linjen fulgt av deres respektive blokker med påstander (med riktig innrykk, såklart).

Du kan ha enda en if-påstand inni if-blokken til en if</tt-påstand og så videre - dette kalles for "nestede" <tt>if-påstander.

Husk at elif- og else-delene er valgfrie. En minimal gyldig if-påstand er:

if True:
    print('Ja, den er True')

Etter at Python har blitt ferdig med å kjøre hele if-påstanden sammen med de sammenkoblede elif og else-klausulene går den videre til neste påstand i blokken som inneholder if-påstanden. I dette tilfellet er dette hovedblokken der programmet starter å kjøre, og den neste påstanden er print('Ferdig'). Her er programmet slutt.

Selv om dette er et veldig enkelt program har jeg pekt ut mange ting som du burde merke deg, selv i et så enkelt program. Alle disse tingene er ganske rett på sak (og overraskende enkle for de som har bakgrunn med C/C++) og krever at du forstår dem veldig raskt, men etter det vil du komfortabel med dem og det vil føles 'naturlig' for deg.

Bemerkning til C/C++-programmerere
Det er ingen switch-påstand i Python. Du kan bruke en if..elif..else-påstand for å gjøre det samme (og i noen tilfeller bruke en ordbok for å gjøre det raskt).

[edit] while-påstanden

while-påstanden lar deg kjøre en blokk med påstander så lenge en tilstand er True. En while-påstand er et eksempel på det man kaller en loopende påstand. En while-påstand kan også ha en else-klausul, men dette er valgfritt.

Eksempel:

#!/usr/bin/python
# Filnavn: while.py
 
tall = 23
kjører = True
 
while kjører:
    gjett = int(input('Skriv inn et heltall: '))
 
    if gjett == tall:
        print('Gratulerer, du gjettet det.')
        kjører = False # Dette får while-loopen til å stoppe
    elif gjett < tall:
        print('Nei, det er litt høyere enn det.')
    else:
        print('Nei, det er litt lavere enn det.')
else:
    print('while-loopen er over.')
    # Gjør alt annet du har lyst til her
 
print('Ferdig')

Output:

   $ python while.py
   Skriv inn et heltall: 50
   Nei, det er litt lavere enn det.
   Skriv inn et heltall: 22
   Nei, det er litt høyere enn det.
   Skriv inn et heltall: 23
   Gratulerer, du gjettet det
   while-loopen er over.
   Ferdig

Hvordan det virker:

I dette programmet leker vi fortsatt en gjettelek, men fordelen er at brukeren får fortsette å gjette til han/hun gjetter riktig - det er ikke noe behov for å kjøre programmet gjentatte ganger, som vi gjorde i forrige seksjon. Dette demonstrerer bruk av while-påstanden.

Vi flytter input- og </tt>if</tt>-påstandene til innsiden av while-loopen og setter variabelen kjører til True før while-loopen. Først sjekker vi om variabelen running er True og fortsetter å kjøre den tilsvarende <emphasis>while-blokken</emphasis>. Etter at denne blokken har blitt kjørt ferdig blir tilstanden sjekket igjen, som i dette tilfellet er kjører-variabelen. Hvis den er True, kjører vi while-blokken igjen, hvis ikke fortsetter vi å utføre den valgfrie else-blokken og fortsetter så til neste påstand.

else-blokken blir kjørt når while-looptilstanden blir False - dette kan til og med være den første gangen tilstanden blir sjekket. Hvis det er en else-klausul for en while-loop blir den alltid kjørt, med mindre du har en while-loop som kjører i all evighet uten å bryte!

True og False blir kalt booleanske typer, og du kan anse dem for å være tilsvarende for henholdsvis verdiene 1 og 0.

else-blokken er faktisk overflødig siden siden du kan putte de påstandene i den samme blokken som while-påstanden er i, etter while-påstanden, for å få samme virkning.

Bemerkning til C/C++-programmerere
Husk på at du kan ha en else-klausul for while-loopen.

[edit] for-loopen

for..in-påstanden er enda en loopende påstand som gjentar seg over en sekvens med objekter, det vil si å gå gjennom hver ting i en rekkefølge. Vi skal se mer på sekvenser i senere kapitler. Det du trenger å vite akkurat nå er at en sekvens kun er en sortert samling ting.

Example:

#!/usr/bin/python
# Filnavn: for.py
 
for i in range(1, 5):
    print(i)
else:
    print('Loopen er over')

Output:

   $ python for.py
   1
   2
   3
   4
   Loopen er over

Hvordan det virker:

I dette programmet skriver vi en sekvens med tall. Vi genererer denne sekvensen med tall ved å bruke den innebygde range-funksjonen.

Det vi gjør her er å gi den to tall og range gir tilbake en sekvens med tall som starter med det første tallet og går opp til det andre tallet. For eksempel tar range(1,5) tallene med ett talls mellomrom. Hvis vi gir range et tredje tall, blir det tredje tallet antallet steg mellom tallene. For eksempel gir range(1,5,2) output [1,3]. Husk på at range strekker seg til det andre tallet, det vil ikke si til og med det andre tallet.

for-loopen går så over denne sekvensen. for i in range(1,5) betyr det samme som for i in [1, 2, 3, 4], som er som å gi hvert tall (eller objekt) i sekvensen til i, en av gangen, og deretter kjøre blokken med påstander for hver verdi for i. I dette tilfellet skriver vi bare verdien i blokken med påstander.

Husk på at else-delen er valgfri. Når den er med blir den alltid kjørt etter at for-loopen er over, med mindre programmet møter på en break-påstand.

Husk på at for..in loopen virker for en hvilken som helst sekvens. Her har vi en liste med tall generert av en innebygd range-funksjon, men generelt kan vi bruke en hvilken som helst sekvens med hva slags objekter som helst! Vi skal utforske denne ideen i detalj i senere kapitler.

Bemerkning til C/C++/Java/C#-programmerere
Pythons for-loop er radikalt forskjellig fra C/C++ sin for-loop. C#-programmerere vil legge merke til at forloopen i Python er lik foreach-loopen i C#. Java programmerer vil legge merke til at at den er lik for (int i :IntArray) i Java 1.5 .
Hvis du vil skrive det som i C/C++ skrives som for (int i = 0; i < 5; i++), skriver du bare for i in range(0,5) i Python. Som du ser er for-loopen enklere, mer uttrykkende og mindre åpen for feil i Python.

[edit] break-påstanden

break-påstanden blir brukt for å bryte (break) ut av en loop, det vil si å stoppe kjøringen av en loopende påstand, selv om tilstanden for loopen ikke har blitt False eller sekvensen med ting ikke har blitt gått over.

En viktig ting å merke seg er at hvis du bryter ut av en for eller while loop vil ikke de samsvarende else-blokkene bli kjørt.

Eksempel:

#!/usr/bin/python
# Filnavn: break.py
 
while True:
    s = input('Skriv inn noe: ')
    if s == 'avslutt':
        break
    print('Lengden på strengen er', len(s))
print('Ferdig')

Output:

   $ python break.py
   Skriv inn noe: Programming is fun
   Lengden på strengen er 18
   Skriv inn noe: When the work is done
   Lengden på strengen er 21
   Skriv inn noe: if you wanna make your work also fun:
   Lengden på strengen er 37
   Skriv inn noe:       use Python!
   Lengden på strengen er 12
   Skriv inn noe: avslutt
   Ferdig

Hvordan det virker:

I dette programmet tar vi brukerens input og skriver lengden på det gjentatte ganger. Vi oppgir en spesialtilstand for å stoppe programmet ved å sjekke om brukerens input er 'avslutt'. Vi stopper programmet ved å bryte ut av loopen og når slutten på programmet.

Lengden på input-strengen finner man ut ved å bruke den innebygde len-funksjonen.

Husk på at break-påstanden også kan brukes med forloopen.

[edit] Swaroop's Poetic Python

Inputen jeg har brukt her er et minidikt jeg har skrevet, kalt Swaroop's Poetic Python:

   Programming is fun
   When the work is done
   if you wanna make your work also fun:
       use Python!

[edit] continue-påstanden

continue-påstanden blir brukt for å fortelle Python at det skal hoppe over resten av påstandene i den aktive blokken og fortsette (continue) til neste del av loopen.

Example:

#!/usr/bin/python
# Filnavn: continue.py
 
while True:
    s = input('Skriv inn noe:  ')
    if s == 'avslutt':
        break
    if len(s) < 3:
        print('For lite')
        continue
    print('Inputen er lang nok')
    # Gjør andre slags prosesseringer her...

Output:

   $ python test.py
   Skriv inn noe: a
   For lite
   Skriv inn noe: 12
   For lite
   Skriv inn noe: abc
   Inputen er lang nok
   Skriv inn noe: avslutt

Hvordan det virker:

I dette programmet tar vi imot input fra brukeren, men vi prosesserer den bare hvis den er minst tre karakterer lang. Så bruker vi den innebygde lenfunksjonen for å få lengden, og hvis lengden er mindre enn tre hopper vi over resten av påstandene i blokken ved å bruke continue-påstanden. Ellers blir resten av påstandene i loopen kjørt og vi kan gjøre hva slags prosessering vi vil gjøre her.

Legg merke til at continue-påstanden også virker med for-loopen.

[edit] Sammendrag

Vi har sett hvordan vi skal bruke de tre kontrollflytpåstandene - if, while og for sammen med de assosierte break- og continue-påstandene. Disse er noen av de mest brukte delene av Python, og derfor er det å kjenne til dem viktig.

Nå skal vi se på hvordan vi lager og bruker funksjoner.



Please add your comments by clicking on the 'Discussion' link in the left sidebar.