Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Et program består av setninger som utføres i sekvens, så uten noen spesielle konstrollstrukturer vil all koden bli utført én og bare én gang. Koden under illustrerer poenget:

Code Block
languagepython
linenumberstrue
print('Hvor gammel er du?')
age = int(input())
print('Neste år blir du ' + str(age + 1) + ' år!')

Eksempel på sekvens:

Først skrives spørsmålet ut, så venter programmet på input (som bør være et tall) fra brukeren og til slutt skrives en ny melding ut.

 

PlantUML Macro
start
:print('Hvor gammel er du?');
:age = int(input());
:print('Neste år blir du ' + str(age + 1) + ' år!');
stop

Illustrasjon av koden med et flytskjema. Kontrollflyten går nedover fra boks til boks.

...

En kommer imidlertid fort bort i situasjoner hvor kode bare skal utføres i bestemte tilfelle, f.eks. vil koden over kræsje hvis input-en ikke er et gyldig tall. Det vil være lurt å bare utføre den siste linja hvis input-en faktisk er et tall:

Code Block
languagepython
linenumberstrue
print('Hvor gammel er du?')
ageString = input()
if (ageString.isdigit()):
    print('Neste år blir du ' + str(int(ageString) + 1) + ' år!')

Her brukes if-nøkkelordet for å angi at print-setningen kun skal utføres hvis betingelsen ageInput.isdigit() er sann.

PlantUML Macro
start
:print('Hvor ...');
:ageString = input();
if (ageString.isdigit()) then (true)
	:print('Neste år ...');
endif
stop

Kontrollflyten har en forgreining, hvor verdien av betingelsen (true eller false) avgjør hvilken grein som tas.

if-en angir en kontrollstruktur som kalles betinget utførelse. Betingelsen kan være hvilket som helst uttrykk som gir en logisk verdi, altså true/sant eller false/usant. Det finnes flere varianter av if-kontrollstrukturen. I eksemplet over skal det gjøres noe bare dersom betingelsen er true/sann. Dersom det skal gjøre noe annet i tilfellet hvor betingelsen er usann, så får en følgende variant:

Code Block
languagepythonlinenumberstrue
print('Hvor gammel er du?')
ageString = input()
if (ageString.isdigit()):
    print('Neste år blir du ' + str(int(ageString) + 1) + ' år!')
else:
    print(ageString + ' er ikke et tall!')

Her brukes if-nøkkelordet for å angi at print-setningen kun skal utføres hvis betingelsen ageInput.isdigit() er sann.

PlantUML Macro
start
:print('Hvor ...');
:ageString = input();
if (ageString.isdigit()) then (true)
	:print('Neste år ...');
else (false)
	:print(ageString + ' er ikke et tall!');
endif
stop

Kontrollflyten har en forgreining, hvor verdien av betingelsen (true eller false) avgjør hvilken grein som tas.

Noen ganger ønsker man å velge mellom flere enn to greiner. Dette kan gjøres ved å ha en ny if inni else-delen. Man tar altså først et valg mellom to greiner og i den ene greina gjør en et nytt valg. Eksemplet under, hvor en karakter (grade) settes basert på en poengsum (score):

Code Block
languagepythonlinenumberstrue
if score >= 85:
    grade = 'A';
else:
    if score >= 75:
        grade = 'B';
    else:
        if score >= 60:
            grade = 'C';
        else:
            if score > 50:
                grade = 'D';
            else:
                if score > 40:
                    grade = 'E';
                else:
                    grade = 'F';
print(grade)
PlantUML Macro
start
if (score >= 85) then (true)
	:grade = "A";
else (false)
	if (score > 75) then (true)
		:grade = "B";
	else (false)
		if (score > 60) then (true)
			:grade = "C";
		else (false)
			if (score > 50) then (true)
				:grade = "D";
			else (false)
				if (score > 40) then (true)
					:grade = "E";
				else (false)
					:grade = "F";
				endif
			endif
		endif
	endif
endif
:print(grade);
stop

...