Les og utforsk


Intro

Denne uken skal du utforske bruken av flere grunnleggende Python-funksjoner, inkludert print(), input(), len(), max(), int(), float() og str(). Du vil også få en forståelse for hvordan man bruker variabler og tilordner verdier til dem.

Før du kjører eksemplene, vennligst les gjennom dem og svar på spørsmålene som er inkludert i koden.


Utskrift til terminalen

Vi skal snakke mer on funksjoner litt senere i semesteret, men kort fortalt er en funksjon et selvstendig kodestykke som tar inn verdier, gjør noe og returnerer et resultat. For eksempel, print-funksjonen skriver ut verdiene til terminalen.

# Print-funksjonen kan skrive ut forskellige typer verdier
print("Foo")  # streng/tekst
print(42)     # heltall (int - integer)
print(3.4)   # desimaltall (float - floating point)

# Print-funksjonen kan skrive ut flere ting på én gang
print("Foo", "Bar")

# Bruk end="" for å avslutte med noe annet enn et linjeskift
print("Foo", end="-=-")
print("Bar")
sted = "Vi er i Bergen"
print(sted)

flere = "Aaa\nBbb\nCcc"  # hva betyr \n her?
print(flere)

hei = "Hei alle sammen!"

print(hei * 3)

print("&" * 5)

# Hva er forskjellen her?
print(4 + 7)
print("4 + 7")

print()

x = 12
y = 20
print("x =", x)
print("y =", y)
print("y - x =", y - x)
print()

x = x + 1
y = y + 5
print("x =", x)
print("y =", y)
print("y + x =", y - x)
# Hvorfor er svaret feil her?

Variabler

En variabel er en referanse til en verdi.

# Symbolet '=' betyr her at vi tilordner verdien 5 til variabelen x
x = 5
print(x)     # 5
print(2 * x) # 10
print(x)     # fremdeles 5

Til forskjell fra matematikk, kan en variabel i Python endre verdi.

y = 10.5      # Variabelen y refererer nå til verdien 10.5
print(y)    # 10

y = "Hei"   # Variabelen y refererer nå til verdien "Hei"
y = 11      # Variabelen y refererer nå til verdien 11
y = y + 1   # Variabelen y refererer nå til verdien 12
print(y)    # 12
print(y)    # fremdeles 12

Vi bestemmer selv hva variablene skal hete, så lenge de begynner med en bokstav og ikke inneholder spesielle tegn (bortsett fra _).

antall_studenter = 800
antall_gruppeledere = 41
kurskode = "INF100"
99problemer = True # Krasjer, variabler kan ikke begynne med tall
Tilordning

En variabel tilordnes verdi ved bruk av tilordningsoperasjonen =. Det er også mulig å kombinere tilordningsoperasjonen med operasjonssymboler, slik som f. eks. += og -=.

x = 5
x += 2 # det samme som x = x + 2
print(x) # 7

y = 5
y + 2 # ingen tilordnings-operasjon her
print(y) # fremdeles 5

Tilordningsoperatøren kan kombineres med alle symbol-operasjonene.

x = 42

x += 2       # det samme som  x = x + 2
x -= 3 - 1   # det samme som  x = x - (3 - 1)
x //= 10     # det samme som  x = x // 10
x **= 5 // 2 # det samme som  x = x ** (5 // 2)
x *= 2 + 3   # det samme som  x = x * (2 + 3)
x %= 3       # det samme som  x = x % 3
x /= 3       # det samme som  x = x / 3

De ekstra interesserte kan lese mer om gode python-variabelnavn .

Input fra terminalen

Input-funksjonen gir brukeren muligheten til å skrive inn en streng-verdi ved hjelp av en prompt.

Når du kjører Pythonkode som inneholder input() så stanser kjøringen når den kommer til input(). Der venter den til den har fått input fra brukeren i terminalen. Etter den har fått input fortsetter kjøringen.

 #Når input er en tekst
name = input("Skriv ditt navn: ")
print(f"Hei, {name}!")
# Input kan brukes uten = (assignment). Hva skjer med svaret da?
input("Kan vi gå videre? ")

# Når input er et tall
a = input("Tall A: ")
b = input("Tall B: ")

#Hva tror du outputet blir her?
print("Summen er ", a + b)

a = int(a)
b = int(b)

#og hva tror du outputet blir her?
print("Summen er ", a + b)

Var det riktig? Hvorfor blir de to output-ene ulike?

# Når input er et tall
print("Skriv et tall")
x = input()
half_x = x / 2 # Krasjer!
print("Halvparten av", x, "er", half_x)
# Når input er et tall
print("Skriv et tall:")
user_input = input()
x = int(user_input)   # Eller bruk float(user_input) for desimaltall
half_x = x / 2 # Bedre!
print("Halvparten av", x, "er", half_x)
Strenger

En streng er en verdi som representerer tekst. En streng består av bokstaver, tallsymboler, mellomrom, linjeskift og andre tegn.

print("Strenger skrives mellom hermetegn.")
print('Man kan også bruke apostrof.')
print(Hvis du ikke har hermetegn er det ikke en streng, og det krasjer)
# En streng kan lagres i en variabel.
foo = "bar"
print("foo") # Skriver ut "foo"
print(foo) # Skriver ut "bar"
# En streng kan inneholde linjeskift (\n)
print("Denne strengen\ninneholder to\nlinjeskift")

# En streng kan inneholde hermetegn (")
print("Her \"er\" et hermetegn")
print('Her "er" et hermetegn') # bedre: bruk apostrofer

# En streng kan inneholde bakstrek (\)
print("C:\\mappe\\script.py")
# Strenger slås sammen med pluss (+)
print("foo" + "bar") # foobar

a = "Hei"
b = "der"
print(a + " " + b) # Hei der
# Strenger repeteres flere ganger med gangesymbol (*)
print("*" * 3) # ***

s = "bar"
print(2 * s) # barbar

Det er mulig å kombinere tekst og andre verdier med f-strenger. Legg merke til f før hermetegnet.

# Med en f-streng kan vi inkludere variabler i strengen
number_of_students = 800
course_id = "INF100"
print(f"Vi ønsker {number_of_students} studenter velkommen til {course_id}")

# Uten f'en får vi en logisk feil
print("Vi ønsker {number_of_students} studenter velkommen til {course_id}")
print()

# f-strenger kan også brukes for å lage verdier som lagres som en variabel
message = "Jeg lengter hjem"
log_message = f"Mottatt melding: {message}"
print(log_message) # "Mottatt melding: Jeg lengter hjem"

# f-strenger blir ikke oppdatert i etterkant
message = "Jeg er fornøyd"
print(log_message) # fremdeles "Mottatt melding: Jeg lengter hjem"
Len

Funksjonen len() kan brukes til å beregne hvor mange tegn det er i en tekststreng.

# len() finner lengden til en streng
x = "foo"
print(len(x)) # 3
print(len("foobar")) # 6
print(len("foo bar")) # 7
print(len("foo\nbar")) # 7 (linjeskift \n telles kun som 1)
print(len(" foobar  ")) # 9 (inkluderer mellomrom)
# En streng kan være tom
x = ""
print(len(x)) # 0
print(x) # printer ingenting på denne linjen
print("---")

Vi kan bruke len() til å for eksempel lage understrekk under et navn.

navn = "Ola"

lengde = len(navn)
print("Navnet ditt har", lengde, "bokstaver.")

understrek = "-" * lengde  # hva skjer her?
print()
print(navn)
print(understrek)

print()
print()
print()
Max

Funksjonen max() returnerer den maksimale verdien av de tingene du putter inn. Den kan ta hvor mange argumenter som helst.

print(max(3, 1))
print(max(5, 12, -3))
print(max(4.2, 9, -13.4, 22.52, 14))

a = 5 + 2
b = 13 - 4
print(max(a, b, 4 + 4))
Turtle

turtle er et forhåndsinstallert Python-bibliotek som lar brukere lage bilder og former ved å gi dem et virtuelt skjerm. Pennen som brukere tegner med heter turtle og det gir biblioteket navnet sitt. Biblioteket er nyttig for de som er ny til programmering å lære programmering på en veldig visuell måte. Vi begynner med noe enkelt, men vil bygge videre på dette i løpet av de neste ukene. Kjør koden nedenfor og se hva turtlen gjør (fungerer kun direkte på PCen, ikke her i browseren).

import turtle as t

t.shape("turtle")  # hva skjer hvis vi kommenterer ut denne linjen?

# prøv å endre rekkefølgen på instruksjonene
t.forward(100)
t.left(120)
t.forward(100)
t.left(120)
t.forward(100)

Lek gjerne med koden og prøv å gjøre andre ting med turtlen, for eksempel tegn en annen form, endre bakgrunnsfargen. The Beginner’s Guide to Python Turtle er en god ressurs for å lære mer og eksperimentere.

IKKE lagre filen som turtle.py. Dette vil skape konflikter med importen fra turtle -modulen. Ethvert annet navn vil fungere.

Syntaksfeil, krasj og logiske feil
print("oj!) # Syntaksfeil! (mangler hermetegn etter !)

# Gir output:
#   SyntaxError: EOL while scanning string literal
print(1/0) # Krasj! (å dele på 0 er umulig)

# Gir output:
#   ZeroDivisionError: integer division or modulo by zero
x = 2
y = 3
z = x + y
print(f"{x} + {z} = {y}") # Logisk feil, vi har byttet z og y

# Gir output:
#   2 + 5 = 3

Koden nedenfor inneholder både syntaks- og semantikkfeil som gjør at den ikke kan kjøres. Finn feilen(e) og endre koden slik at den kan kjøres og svarene gir mening. Prøv først å finne feilene uten å prøvekjøre!

a = 7

b = 12

sted = 'Vi er i Bergen'

print(stedt)


flere = 'Aaa\nBbb\nCcc'

print(flere)


print('\n' + 3)


print(4 + )

print('4 + 7')


prin()


x = 12

y = 20

print('x =', x)

print('y =', y)

print('y - x =', z-x)

print()


x = x + 1

y = y + 5

print('x =', x)

print('y =', y)

print('y + x =', y-x)


print('God morgen!)


input('Hva heter du? ')

print('Hyggelig å hilse på deg,',navn)


A = input('Tall A:')

B = input('Tall B:')


print('Summen av A og B er:', a + b)