Uke 3 — bool / if¶
Introduksjon¶
Denne uken skal vi jobbe med booleans og if-statements i Python. Først skal vi også se på f-strings, som gir en enkel måte å lage strenger som bruker verdier i variabler.
Les den første delen av kapittel 2 i Automate the Boring Stuff frem til «while Loop Statements».
Eksempler¶
Eksempel: f-strings¶
Vi bruker f-strings ved å putte et «f» foran strengen vi vil lage. Når vi har «f» foran strengen kan vi putte variabler eller andre uttrykk innen «{}». Så blir verdien konvertert til en streng og puttet inn hvor parentesene er. La oss se på noen eksempler.
Last ned filen her: eksempel_f_strings.py
, og kjør koden.
navn = "Ola"
# Tre ulike måter å bruke verdien i variabelen 'navn' når vi printer.
print("Hei", navn, "!") # Her blir det et mellomrom foran '!'. Hvorfor?
print("Hei " + navn + "!") # Her blir output som den skal.
print(f"Hei {navn}!") # Samme output igjen, men lettere å lese.
print("Hei {navn}!") # Her har vi glemt f foran strengen
# Vi kan også skrive uttrykk i f-strings.
alder = 23
print(f"Hei {navn}! Du fyller 100 år om {100-alder} år.")
# Vi må ikke bare bruke f-strings sammen med print(). En streng med f foran er
# fremdeles en streng. Så vi kan for eksempel lagre den i en variabel.
hilsen = f"Hei {navn}!"
print(hilsen * 3)
Eksempel: Sammenligninger¶
Vi skal demonstrere hvordan du kan sammenligne (<, >, ==, >=, <=
) uttrykk
på ulike måter, og hvordan slike sammenligninger kan brukes i if-setninger.
Her er noen eksempler på sammenligninger av tall og strenger. Strenger sammenlignes i alfabetisk rekkefølge.
Last ned filen her: eksempel_sammenlign.py
, og kjør koden. Du kan prøve å skrive om rad 10 og
11 med f-strings. Prøv å sammenligninge noen andre uttrykk.
tall_1 = 5
tall_2 = 9
print(tall_1 > tall_2)
print(f"{tall_1 > tall_2}") # Du kan gjøre detsamme med f-strings
print("tall_1 > tall_2 =", tall_1 > tall_2)
# Omskrivning med f-strings:
print(f"tall_1 > tall_2 = {tall_1 > tall_2}")
# Prøv selv! Skriv om følgende som f-strings:
print(tall_1 == tall_2)
print(tall_1 <= tall_2)
print(3 <= tall_1 <= 7 < tall_2 < 10)
print("---------------")
# Vi kan sammenligne strenger i alfabetisk rekkefølge.
navn_1 = "Alice"
navn_2 = "Albert"
print(f"navn_1 < navn_2 = {navn_1 < navn_2}")
print(navn_1 == navn_2)
print(navn_1 > navn_2)
# Vi kan lagre boolske verdier i variabler.
matches = navn_1 == "Bob" # Merk forskjellen mellom "=" og "==" her.
print(f"matches = {matches}")
Eksempel: in¶
Vi kan bruke ordet in
til å sjekke om en ting er med i en annen ting.
Resultatet blir en boolsk verdi.
Last ned filen her: eksempel_in.py
, og kjør
koden.
# Vi kan sjekke om bokstaven 'a' finnes i noen ulike ord.
print(f"Bokstaven 'a' er med i ordet 'hei': {'a' in 'hei'}")
print(f"Bokstaven 'a' er med i ordet 'programmering': {'a' in 'programmering'}")
print(f"Bokstaven 'a' er med i ordet 'Anton': {'a' in 'Anton'}")
# Hvorfor blir det 'False' i den siste print-satsen?
Eksempel: Boolske Operatorer¶
Her er noen eksempler på de boolske operatorene and
, or
og not
. Hvis
du er usikker og trenger å oppdatere minnet ditt på boolske uttrykk, leser igjen
seksjonen Boolean Values i kapittel 2 av teksten.
X and Y
har verdienTrue
om bådeX
ogY
har verdienTrue
.X or Y
har verdienTrue
om entenX
ellerY
har verdienTrue
.not X
har verdienTrue
omX
har verdienFalse
.
Last ned filen her: eksempel_boolske.py
.
Skjønner du hva som skjer i de siste 8 linjene? Hva blir test_4
og hva tror
du test_5
blir? Kjør koden. Var det riktig?
print("Boolean operators")
print(True and True)
print(True and False)
print("--------")
print(True or False)
print(True or True)
print("--------")
print(not True)
print(not False)
print("Larger boolean expressions")
test_1 = (5 > 3) and ("a" < "c")
print(f"test_1 = {test_1}")
x = True
test_2 = (not x) and x
print(f"test_2 = {test_2}")
sky_is_green = False
grass_is_green = True
test_3 = ((not sky_is_green) and (not grass_is_green)) == (
not (sky_is_green or grass_is_green)
)
print(f"test_3 = {test_3}")
print("Confuse yourself...")
true = False
false = True
# decide what the output will be before running!
test_4 = true and True
print(test_4)
test_5 = test_4 or false
print(test_5)
Eksempel: If-setninger¶
Her er noen eksempler på if-setninger. Om uttrykket etter if
har verdien
True
kjøres kodeblokkene under.
La oss prøve første med et enkelt eksempel. Last ned filen her:
eksempel_if_bool.py
, og kjør koden. Hva
blir printet?
if True:
print("ABCDEF")
if False:
print("KLMXYZ")
Det kan være litt vanskelig å forstår hva koden gjør. Du kan tegne bildet av
koden for å hjelpe deg selv til å forstå. Se bildet for eksempelet på
kontrollflyten for en enkel if-setning (a < b
eksempelen under og i filen
eksempel_if_numbers.py
):

Last ned filen her: eksempel_if_numbers.py
, og kjør koden. Prøve å tegne et bilde av
kontrollflyten for a > b
i koden.
Til slutt er det noen if-setninger som ikke er så gode. Hva er galt med dem? Hvordan kan du skrive dem bedre?
a = 5
b = 9
#############
# the diagram above shows this control flow visually
if a < b:
print("Smaller!")
print('AAA')
#############
if a > b:
print("Bigger!")
print('BBB')
#############
if a == b:
print("The same!")
print("More than one line can be here:")
print("as")
print("many")
print("as")
print("you")
print("like.")
print('CCC')
#############
if a > 5 and b < 10:
print("A is above 5 and B is less than 10")
#############
print("Done comparing numbers\n\n\n")
print("How not to not write bad if-conditions:")
if (a < b) == True: # Do *not* write comparisons like this!
print('Writing "if (a<b) == True" is doing double work!')
print('"a < b" is already a boolean by itself.')
print('Writing "if True==True:" doesn\'t make it more true')
if not (a >= b) == False: # nooooo! use this instead: if a >= b:
print("An if statement with many negatives is not readable")
# We can save booleans in variables.
a_smaller_than_b = a < b # What value does this variable have?
# We can then use them in if-statements.
if a_smaller_than_b:
print("'a' is smaller than 'b'.")
La oss prøve et annet eksempel. Last ned filen her:
eksempel_if_names.py
, og kjør koden.
Hvorfor printes ingenting i den siste if-setningen?
name = "Fred"
if name == "Fred":
print("Welcome, Fred!")
if "re" in name:
print("Your name has 're' inside!")
name = "Alice"
if name == "Alice":
print("Welcome, Alice!")
if "re" in name:
print("Your name has 're' inside!")
La oss prøve et siste eksempel på if-setninger. Last ned filen her:
eksempel_if_nested.py
, og kjør koden.
Hvorfor printes ingenting i denne if-setningen? Kan du endre koden slik at noe
blir skrevet ut i den?
x = 101.2
y = -56.8
z = 104
if z % 5 == 0:
print("Z is divisible by 5")
if x > 100:
print("Also, x is larger than 100")
if y > 50:
print("Also, y is larger than 50")
print("Still in the Z if-block")
print("Outside again. Try other values for x y z")
Eksempel: If-else-setninger¶
Her er noen eksempler på if-else-setninger. Om uttrykket ved if
ikke
har verdien True
kjøres koden under else
i stedet.
Se bildet for et eksempel på kontrollflyten for en enkel if-else-setning (a <
b
eksempelen i eksempel_if_else.py
):

Last ned filen her: eksempel_if_else.py
,
og kjør koden.
a = 5
b = 9
if a < b:
print("Smaller!")
else:
print("Bigger!")
print("Done!")
#############
if 30 < 50:
print("30 is smaller than 50")
else:
print("30 is not smaller than 50")
###############
# Here we use the modulo operator '%' to evaluate if a number is odd or even.
# You can read about '%' in Python's documentation:
# https://docs.python.org/3/reference/expressions.html?highlight=modulo#binary-arithmetic-operations
print(f"37 is odd: {37 % 2 == 1}")
print(f"37 is even: {37 % 2 == 0}")
Det finnes en annen måte å bruke if-else: vi kan bruke A if X else B
som et uttrykk.
Uttrykket har verdien A
om X
har verdien
True
, ellers har det verdien B
:
x = "apple" if (5 < 6) else "banana"
print(x)
x = "apple" if (9 < 6) else "banana"
print(x)
Eksempel: If-elif-else-setninger¶
Her er noen eksempler på if-elif-else-setninger. Om uttrykket ved if
ikke
har verdien True
går Python videre til elif
og sjekker om det
uttrykket har verdien True
, og kjører isåfall kodeblokken under.
Forskjellen mellom to if
etter hverandre og if
så elif
er at om
uttrykket ved if
har verdien True
sjekkes ikke det i elif
’en. Om
man har to if
etter hverandre sjekkes alltid begge uttrykkene.
Se bildet for et eksempel på kontrollflyten for en enkel if-elif-else-setning
(den første eksempelen i eksempel_if_elif.py
):

Last ned filen her: eksempel_if_elif.py
,
og kjør koden. Hvorfor blir det ulike resultater fra ’chain 4’ med elif og
’chain 4’ med bare if?
a = 9
b = 9
if a < b:
print("Smaller!")
elif a > b:
print("Bigger!")
else:
print("Same!")
print("Done!")
#############
print("Chain 1")
if False:
print("A")
elif False:
print("B")
elif False:
print("C")
elif False:
print("D")
else:
print("E")
print("Chain 2")
if False:
print("A")
elif False:
print("B")
elif True:
print("C")
elif False:
print("D")
else:
print("E")
print("Chain 3")
if True:
print("A")
elif False:
print("B")
elif False:
print("C")
elif False:
print("D")
else:
print("E")
print("Chain 4")
if False:
print("A")
elif True:
print("B")
elif False:
print("C")
elif True:
print("D")
else:
print("E")
print("Chain 4, just using if")
if False:
print("A")
if True:
print("B")
if False:
print("C")
if True:
print("D")
else:
print("E")
print("End of chain examples")
####################
tekst = "oppvaskmaskin"
if "a" in tekst:
print("We have an a")
else:
print("We don't have an a")
if "e" in tekst:
print(f"There is an e in {tekst}")
elif "vk" in tekst:
print("Characters 'vk' are in the text")
elif "v" in tekst and "k" in tekst:
print("Characters 'v' and 'k' are in the text")
elif "opp" in tekst:
print('The text contains "opp"')
else:
print("None of the options matched")
print("==========")
if "opp" in tekst:
print('The text contains "opp"')
Eksempel: Finne feilene¶
Her er noen eksempler på kode som ikke er riktig. Prøv å finne feilene uten å kjøre koden først.
Last ned filen her: errors_1.py
. Finn feilen og
endre så at koden går ann å kjøre.
Hva hvis en som besøker museumet er både en senior og en student? Endre koden slik at denne personen betaler riktig pris (en person som tilhører to kategorier betaler kun den billigste prisen).
number = 42
if number % 7 == 0
print(f"{number} is divisible by 7.")
if number % 5 = 0:
print(f"{number} is divisible by 5.")
name = "Alice"
if name == Alice:
print('Hello, Alice!')
if True:
print('A')
print('B')
print('C')
if 5 < 3:
print('Five is smaller than three')
else:
print('Five is bigger than three')
# This code should tell a visitor entering a museum what
# they must pay, depending on whether the visitor is a
# senior, a student or none of the above. Try some different values.
visitor_is_senior == False
visitor_is_student == False
if visitor_is_senior:
print('Please pay 80 NOK.')
if visitor_is_student:
print('Please pay 90 NOK.')
else:
print('Please pay 100 NOK.')
Oppgaver¶
Oppgave 1¶
Vi skal utøke programmet fra oppgave 5 førrige uken. I filen
uke_03_oppg_1.py
skal du skrive et program som leser inn navn, gateadresse,
postkode og poststed fra brukeren og siden skriver ut den lengste raden i
adressen. Om flere rader har den lengste lengden skal programmet bare skrive
ut den første av de radene som har lengst lengde.
Kjøring av programmet ditt skal se ut slik som følgende eksempelkjøring:
Hva er ditt navn? Ola Olsson
Hva er din adresse? Gateveien 1
Hva er ditt postnummer og poststed? 1234 Stedet
Gateveien 1
Oppgave 2¶
Her skal vi gjøre nesten samme sak igjen, men med en liten forskjell. I filen
uke_03_oppg_2.py
skal du skrive et program som leser inn navn, gateadresse,
postkode og poststed fra brukeren og siden skriver ut den/de lengste radene. Så
denne gang om flere rader har den lengste lengden skal programmet skrive ut
alle disse radene.
Kjøring av programmet ditt skal se ut slik som følgende eksempelkjøring:
Hva er ditt navn? Ola Olsson
Hva er din adresse? Gateveien 1
Hva er ditt postnummer og poststed? 1234 Stedet
Gateveien 1
1234 Stedet
Oppgave 3¶
Våre øyne oppfatter elektromagnetisk stråling med en bølgelengde fra 380 til 740 nanometer, eller med en frekvens fra 405 til 790 terahertz. Men det finnes også elektromagnetisk stråling som vi ikke kan se. Vi deler in elektromagnetisk stråling i følgende spektrum:
Spektrum |
Bølgelengde (nm) |
Frekvens (THz) |
---|---|---|
Radiobølger |
over 10⁹ |
under 3·10⁻⁴ |
Mikrobølger |
10⁶ – 10⁹ |
3·10⁻⁴ – 0.3 |
Infrarød stråling |
740 – 10⁶ |
0.3 – 405 |
Synlig lys |
380 – 740 |
405 – 790 |
Ultrafiolett stråling |
10 – 380 |
790 – 3·10⁴ |
Røntgenstråling |
0.01 – 10 |
3·10⁴ – 3·10⁷ |
Gammastråling |
under 0.01 |
over 3·10⁷ |
I filen uke_03_oppg_3.py
skal du skrive et program som tar som input først
en enhet, enten nanometer ('nm'
) eller terahertz ('THz'
), og siden en
verdi (et tall). Programmet skal siden skrive ut hvilket spektrum som stråling
med den enheten og det verdiet tillhører.
Om du får en verdi som er akkurat på grensen mellom to spektrum så skal du velge
den som er overst av de to i listen. For eksempel: om brukeren skriver 'nm'
og '10'
så skal programmet ditt skrive ut at det er ultrafiolett stråling.
Eller om brukeren skriver 'THz'
og '790'
så skal programmet ditt skrive
ut at det er synlig lys.
Kjøring av programmet ditt skal se ut slik som følgende eksempelkjøringer. Husk
at store eller små tall kan også skrives med e-notasjon: 2.5e-4
betyr 2.5·10⁻⁴.
Angi enhet: nm
Angi verdi: 65000
Dette er infrarød stråling.
Angi enhet: nm
Angi verdi: 6.5e4
Dette er infrarød stråling.
Angi enhet: THz
Angi verdi: 0.015
Dette er mikrobølger.
Angi enhet: THz
Angi verdi: 1.5e-2
Dette er mikrobølger.
Oppgave 4¶
Regelen for å beregne om et år er et skuddår eller ikke er som følger:
Vanligvis er et år som er deleligt med 4 et skuddår (for eksempel 1996 var et skuddår).
Men år som også er delelige med 100 (for eksempel 1900) er ikke skuddår.
Unntatt år som er delelige med 400 (for eksempel 2000). Disse er skuddår.
I filen uke_03_oppg_4.py
, skriv et program som spør brukeren om et årstall
og skriver ut om det er et skuddår eller ikke.
Kjøring av programmet ditt skal se ut slik som følgende eksempelkjøringer:
Angi år: 1996
Dette er et skuddår.
Angi år: 1900
Dette er ikke et skuddår.
Du kan bruke Pythons modulooperator %
til å beregne om et tall er deleligt med
et annet tall. Du kan finne mer informasjon om denne operatorn i
Pythons dokumentasjon.
Oppgave 5¶
Vanligvis sier mann at et menneskeår er ekvivalent med 7 hundeår. Dette tar dokk ikke hensyn til at hunder blir voksne på ca 2 år. Derfor kan det være bedre å regne begge de første 2 menneskeårene som 10.5 hundeår, og etter det regne hvert menneskeår som 4 hundeår.
I filen uke_03_oppg_5.py
skal du skrive et program som spør brukeren om
antall menneskeår og siden skriver ut hvor mange hundeår det tilsvarer.
Kjøring av programmet ditt skal se ut slik som følgende eksempelkjøringer:
Angi menneskeår: 2
Dette tilsvarer 21.0 hundeår.
Angi menneskeår: 11
Dette tilsvarer 57.0 hundeår.