Lektion 0 · Cirka 45 min genomgång

Funktioner
och variabler

Från din första utskrift till egna funktioner som tar emot information, bearbetar den och lämnar tillbaka ett resultat.

Vi börjar med en enda instruktion. Varje nytt tecken och begrepp förklaras sedan i den ordning det används.

hej.pyPython
print("Hej, världen!")
ResultatHej, världen!

Före genomgången

Se filmen och förbered en arbetsmapp

Harvards föreläsning är cirka 1 timme och 46 minuter. Se den före lektionen och använd denna sida som svensk repetition och uppslagsverk.

2

Skapa en mapp

Skapa lektion_00 i kursmappen och öppna den i VS Code.

3

Stäng av AI-stöd

Skriv koden själv. Målet är att träna syntax och förstå felmeddelanden.

Arbetsgång i denna kurs

Harvards demonstrationer använder ofta den webbaserade miljön cs50.dev. Här arbetar du lokalt i VS Code med den Pythoninstallation som kommer från Anaconda. Skapa en .py-fil, spara och kör med Run Python File eller i VS Codes terminal.

Dagens karta

Fem byggstenar

Ordningen följer hur information rör sig genom ett litet program.

inputta emotvariabelge värdet ett namnfunktionbearbetareturnlämna tillbakaprintvisa
01

Programmeringens verb

Funktioner gör något

En funktion är återanvändbar kod som utför en bestämd uppgift. Python har inbyggda funktioner, och snart skriver du egna.

Läs ett funktionsanrop

I print("Hej!") är print funktionens namn. Parenteserna gör raden till ett funktionsanrop: en uppmaning till Python att köra funktionen. Text inom citattecken, som "Hej!", kallas en sträng och används för att representera text. Här är strängen ett argument — det konkreta värde som skickas till funktionen.

print(värde)

Tar emot: ett eller flera värden. Gör: omvandlar dem till läsbar text och visar texten i terminalen. Lämnar tillbaka: None; utskriften är en bieffekt.

Funktion
En namngiven instruktion som kan anropas.
Sträng
Text mellan citattecken; förkortas str i Python.
Argument
Ett konkret värde som skickas in vid anropet.
Bieffekt
Något märkbart händer, till exempel att text visas.
Returvärde
Ett värde som funktionen lämnar tillbaka.
hej.pyPython
# print har bieffekten att text visas
print("Hej, världen!")
ResultatHej, världen!
Fel är information

Ett SyntaxError betyder att Python inte kan läsa programmets form. Läs sista raden i felmeddelandet, kontrollera den markerade raden och leta först efter saknade citattecken, parenteser eller kolon.

02

Programmets minne

Input, returvärden och variabler

input(prompt) tar emot en valfri frågetext, visar den, väntar tills användaren trycker Enter och lämnar tillbaka det inskrivna som en sträng. Själva Enter-tecknet följer inte med. En variabel ger returvärdet ett namn som programmet kan använda senare.

Läs tilldelningen från höger

Python kör först input(...). Returvärdet placeras sedan i variabeln namn. Likhetstecknet betyder här tilldela, inte ”är matematiskt lika med”.

namninput(...)

Ett variabelnamn bör beskriva vad värdet betyder: namn är tydligare än x. Använd gemener och understreck, exempelvis fornamn_efternamn.

Vad är en f-sträng?

En f-sträng är en formaterad sträng: skriv f före det första citattecknet. Det som står mellan klammerparenteser, exempelvis {namn}, är ett uttryck — kod som Python räknar ut till ett värde. Om namn innehåller "Ada" blir f"Hej, {namn}!" texten "Hej, Ada!".

namn.pyPython
namn = input("Vad heter du? ")
print(f"Hej, {namn}!")
ResultatVad heter du? Ada
Hej, Ada!
Kommentar

Förklara varför

kommentar.pyPython
# Normalisera namnet innan det visas
namn = namn.strip().title()

En kommentar börjar med #. Kommentera avsikten, inte sådant som redan är uppenbart.

Pseudokod

Planera före syntax

plan.txtPython
# Fråga efter ett namn
# Ta bort extra blanksteg
# Skriv en personlig hälsning

Pseudokod bryter ned problemet i hanterbara steg innan du bestämmer exakt Pythonkod.

03

Datatypen str

Arbeta med text

En datatyp är en kategori som talar om vad ett värde betyder och vilka operationer som är möjliga. Textvärden kallas strängar och har datatypen str.

Metoder hör till ett värde

En metod är en funktion som hör till ett visst värde eller en viss datatyp och anropas efter en punkt. I namn.strip() hör metoden strip till strängen i namn. När anrop kedjas, som i namn.strip().title(), blir returvärdet från den första metoden det värde som nästa metod arbetar med. Strängmetoder ändrar inte originalsträngen utan lämnar tillbaka en ny sträng.

  • strip()Utan argument: tar bort blanktecken i början och slutet. strip(".") kan i stället ta bort angivna tecken från kanterna.
  • title()Utan argument: lämnar ny text där varje ord får inledande stor bokstav. Det är enkel formatering, inte en säker regel för alla personnamn.
  • replace(gammalt, nytt)Tar emot två strängar: ersätter alla förekomster av den första med den andra och lämnar tillbaka den nya texten.
  • lower()Utan argument: lämnar tillbaka en ny sträng med gemener.
  • split(separator)Med eller utan separator: delar texten och lämnar tillbaka en lista med strängar. Se exemplen nedan.
text.pyPython
namn = input("Namn: ")
namn = namn.strip().title()
print(f"Hej, {namn}!")
ResultatHej, Ada Lovelace!
split.pyPython
namndelar = "Ada Lovelace".split()
datumdelar = "2026-08-30".split("-")
print(namndelar)
print(datumdelar)
Resultat['Ada', 'Lovelace']
['2026', '08', '30']

split delar vid en vald gräns

Utan argument delar split() vid blanktecken, exempelvis mellanslag, tabbar och radbrytningar. Flera blanktecken i följd behandlas som en gräns. Skickar du in en separator delas strängen i stället vid just den texten: split(",") delar vid kommatecken och split("-") vid bindestreck.

Returvärdet är en lista: en ordnad samling värden inom hakparenteser. Här består listan av strängar. Listor behandlas mer utförligt senare i kursen.

"Ada Lovelace".split()["Ada", "Lovelace"]"röd,grön,blå".split(",")["röd", "grön", "blå"]
Tänk på antalet delar

I fornamn, efternamn = input(...).split() ska listan packas upp i exakt två variabler. Ett namn med ett eller tre ord ger därför ValueError.

04

int och float

Text måste omvandlas till tal

input lämnar alltid tillbaka str. Funktionen int(värde) försöker skapa ett heltal och float(värde) ett decimaltal. De lämnar det nya talet eller ger ValueError om en sträng inte kan tolkas som det begärda talet.

summa.pyPython
x = int(input("x: "))
y = int(input("y: "))
resultat = x + y
print(f"Summan är {resultat}")
ResultatSumman är 12

Tre grundtyper

str

text, till exempel "12"

int

heltal, till exempel 12

float

decimaltal, till exempel 12.5

"2" + "3" blir "23", medan 2 + 3 blir 5. Värdena ser lika ut för människan men har olika typer. De inre anropen körs först: i int(input(...)) körs därför input före int.

Operator

En operator är ett tecken som anger vilken beräkning Python ska göra. Flera operatorer i samma uttryck följer en bestämd operatorprioritet: exempelvis beräknas ** före *. Parenteser gör önskad ordning tydlig.

+addition
-subtraktion
*multiplikation
/division, ger float
//heltalsdivision
%rest
**potens

Avrunda eller formatera?

round(värde, antal_decimaler) tar emot ett tal och ett valfritt antal decimaler och lämnar tillbaka ett avrundat tal. Exempelvis ger round(3.14159, 2) värdet 3.14. I formatangivelsen {värde:.2f} inleder kolonet instruktionen, .2 betyder två decimaler och det avslutande f betyder visning som decimaltal. Det är alltså inte samma f som står före citattecknet och skapar själva f-strängen. Formateringen ändrar inte det lagrade värdet.

Decimaltecken i kod

Python använder punkt i decimaltal: skriv 3.14, inte 3,14.

pris.pyPython
pris = 125 / 3
print(f"Pris: {pris:.2f} kr")
ResultatPris: 41.67 kr
05

Återanvändbar kod

Definiera egna funktioner

Nyckelordet def inleder en funktionsdefinition. Ett namn i definitionens parenteser är en parameter; det konkreta värdet i ett senare anrop är ett argument. return lämnar resultatet till anroparen.

kvadrat.pyPython
def kvadrat(tal):
    return tal ** 2

svar = kvadrat(5)
print(svar)
Resultat25

Definition och anrop

Räckvidd, ofta kallad scope, beskriver var ett namn kan användas. Parametern tal är lokal: den finns bara inne i funktionen medan anropet pågår.

  1. 1
    def inleder definitionen.
  2. 2
    tal är en parameter och ett lokalt namn.
  3. 3
    Indraget visar funktionskroppen: raderna som tillhör funktionen.
  4. 4
    return lämnar tillbaka värdet.
  5. 5
    I kvadrat(5) är 5 argumentet.
Visar

print(värde)

Skapar en utskrift som bieffekt. Om en funktion saknar return lämnar den värdet None, Pythons särskilda markering för ”inget användbart värde”.

Lämnar tillbaka

return värde

Ger anroparen ett värde som kan sparas, räknas vidare med eller skrivas ut.

Ett tydligt huvudprogram

Ett huvudprogram är den övergripande arbetsgång som knyter ihop programmets delar. Namnet main är en vanlig konvention, inte ett särskilt Python-nyckelord. Funktionen körs bara eftersom raden main() anropar den. Python kör filen uppifrån och ned, så anropet placeras efter funktionsdefinitionerna.

Viktig nyans

En hjälpfunktion får stå efter definitionen av main, så länge den hinner definieras innan main() faktiskt anropas.

program.pyPython
def main():
    namn = input("Namn: ")
    print(halsning(namn))

def halsning(namn):
    return f"Välkommen, {namn.strip().title()}!"

main()
ResultatVälkommen, Ada!

Efter genomgången

Öva i stigande svårighetsgrad

Läs alltid specifikationen, skriv pseudokod och testa flera indata. Fullständiga lösningar visas inte här.

01 · Start

Indoor Voice

Träna input, str.lower() och print.

Öppna uppgiften ↗Testa: HELLO, WORLD → hello, world
02 · Start

Playback Speed

Ersätt blanksteg med tre punkter med hjälp av replace.

Öppna uppgiften ↗Testa både en kort och en lång mening.
03 · Funktion

Making Faces

Skriv funktionerna convert och main. Skilj definition från anrop.

Öppna uppgiften ↗Testa text utan ansikte samt båda symbolerna.
04 · Tal

Einstein

Omvandla indata till int och beräkna energi från massa.

Öppna uppgiften ↗** beräknas före *; använd parenteser om ordningen ska synas tydligare.
05 · Syntes

Tip Calculator

Omvandla strängar som börjar med $ respektive slutar med % till float.

Öppna uppgiften ↗Testa: $50.00 och 15% → $7.50.

Arbetsgång för varje uppgift

  1. 1Läs

    Markera exakt indata, utdata och eventuella funktionsnamn.

  2. 2Planera

    Skriv 3–5 rader pseudokod innan du skriver Python.

  3. 3Bygg

    Ta ett litet steg i taget och kör ofta.

  4. 4Testa

    Jämför resultatet tecken för tecken med specifikationen.

  5. 5Förklara

    Beskriv med egna ord vad varje rad bidrar med.

Kontrollera förståelsen

Kan du detta utan AI?

Om någon punkt känns osäker: gå tillbaka till motsvarande avsnitt och skriv ett eget minimalt exempel.

Jag kan förklara och skriva en f-sträng

Jag sätter f före citattecknet och placerar uttryck inom { och }, exempelvis f"Hej, {namn}!".

Jag kan skilja metod, funktion och operator

En metod hör till ett värde och anropas efter en punkt; en funktion anropas med sitt namn; en operator är ett tecken som anger en beräkning.

Jag kan förklara skillnaden mellan parameter och argument

Parametern är namnet i funktionsdefinitionen; argumentet är det konkreta värdet vid anropet.

Jag vet varför input ofta behöver int eller float

input ger alltid text. Omvandlingen gör numeriska beräkningar möjliga.

Jag kan skilja print från return

print visar något; return lämnar tillbaka ett värde.

Jag kan läsa ett enkelt felmeddelande

Börja längst ned, hitta fil och rad, och kontrollera sedan syntax och datatyp.

Jag kan skriva och anropa en egen funktion

Jag använder def, kolon, indrag, ett tydligt namn och vid behov return.

Fördjupning och original

Resurser

Genomgången kombinerar kursens eget material med Harvards aktuella lecture 0. Harvards sidor är på engelska och kan användas för repetition.