Utforskning 2

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. Du kan prøve å skrive om rad 12 og 13 med f-strings. Prøv å sammenligninge noen andre uttrykk.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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.

# Vi kan sjekke om bokstaven 'a' finnes i noen ulike ord.
if 'a' in 'hei':
    print("Bokstaven 'a' er med i ordet 'hei'.")
    
a_prog = 'a' in 'programmering'
print(f"Bokstaven 'a' er med i ordet 'programmering': {a_prog}")

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, les igjen seksjonen Boolean Values i kapittel 2 av Automate the boring stuff with Python.

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 først prøve med et enkelt eksempel. Hva blir printet?

if True:
    print("ABCDEF")

if False:
    print("KLMXYZ")

Det kan være litt vanskelig å forstå hva koden gjør. Du kan tegne bildet av koden for å hjelpe deg selv til å forstå. Se bildet for eksempelet på kontrollflyten for denne if-setning a < b :

# denne koden gir samme informasjon som bildet nedenfor
if a < b:
  print("Smaller!")

kontroll-flyt som visualiserer programmet over

La oss øve litt mer på dette. Prøve å tegne et bilde av kontrollflyten for koden under:

a = 5
b = 9

#############

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")

Til slutt er det noen if-setninger som ikke er så gode. Hva er galt med dem? Hvordan kan du skrive dem bedre?

# 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. Hvorfor skrives ut ingenting i den siste if-setningen under?

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. Hvorfor skrives ut ingenting i den siste if-setningen nedenfor? 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 if-else-setning a < b i denne koden:

if a < b:
    print("Smaller!")
else:
    print("Bigger!")

Kontrollflyt for if-else i programmet over

Med verdier for a og b:

a = 30
b = 50
if a < b:
    print(f"{a} is smaller than {b}")
else:
    print(f"{a} is not smaller than {b}")

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) # hva skrives ut her?

x = "apple" if (9 < 6) else "banana"
print(x) # hva skrives ut her?
Eksempel: Modulo-operatoren

Vi kan bruke modulo-operatoren % for å vurdere om et tall er oddetall eller partall. Du kan lese mer om % i Python-dokumentasjonen.

Kjør koden. Hva skjer?

a = 37
if a % 2 == 0:
    print(f"{a} is even")
else:
    print(f"{a} is odd")
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:

# denne koden gjør det samme som biledet under:
if a < b:
  print("Smaller!")
elif a > b:
    print("Bigger!")
elif a == b:
    print("Same!")

Kontrollflyt for if-elif-else -programmet over

Kjør koden under. Hvorfor blir det ulike resultater fra ’Flow 4’ med elif og ’Flow 4’ med bare if?

# Prøv å tegne diagram til vert programflyt!
print("Flow 1")
if False:
    print("A")
elif False:
    print("B")
elif False:
    print("C")
elif False:
    print("D")
else:
    print("E")
#######################
print("Flow 2")
if False:
    print("A")
elif False:
    print("B")
elif True:
    print("C")
elif False:
    print("D")
else:
    print("E")
#######################
print("Flow 3")
if True:
    print("A")
elif False:
    print("B")
elif False:
    print("C")
elif False:
    print("D")
else:
    print("E")
#######################
print("Flow 4")
if False:
    print("A")
elif True:
    print("B")
elif False:
    print("C")
elif True:
    print("D")
else:
    print("E")
#######################
print("Flow 4, just using if")
if False:
    print("A")
if True:
    print("B")
if False:
    print("C")
if True:
    print("D")
else:
    print("E")

Her er et annet eksempel av if-elif som er litt morsommere. Tenk deg at du spiller The Witcher og du har nettopp kommet til byen. Du møtt en fyr på puben, og må bestemme deg hva du skal gjør neste:

pub_guy = "angry"

if pub_guy == "happy":
  print("Let's have a pint!")
elif pub_guy == "demon":
  print("Slay him")
else:
  print("Grunt and walk away")

Kan du tegne et diagram for denne programflyten?

Eksempel: Finn feilene

Her er noen eksempler på kode som ikke er riktig. Prøv å finn feilene uten å kjøre koden først. Finn feilen og endre slik 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.')