{
    "componentChunkName": "component---src-templates-course-content-template-js",
    "path": "/osa-6/1-lasa-filer",
    "result": {"data":{"page":{"htmlAst":{"type":"element","tagName":"div","properties":{},"children":[{"type":"element","tagName":"text-box","properties":{"variant":"learningObjectives","name":"Lärandemål"},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Efter den här delen"}]},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"kan du läsa in en fil med Python"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"vet du vad en textfil och en CSV-fil är"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"kan du behandla innehållet i en CSV-fil i dina program."}]},{"type":"text","value":"\n"}]}]},{"type":"comment","value":"vastaava teksti löytyy osioista 3-1, 5-1 ja 6-1, tsekkaa kaikki jos muokkaat tätä"},{"type":"element","tagName":"text-box","properties":{"variant":"hint","name":"Om uppgifterna i den här kursen"},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Att bli en skicklig programmerare kräver mycket övning. Man måste utveckla en problemlösningsförmåga och ha en förmåga att intuition komma fram till korrekta lösningar. Därför finns det massor av övningar av olika typer i den här kursen. Vissa övningar är enklare och baserar sig mera eller mindre direkt på materialet medan andra uppgifter är svårare och kräver tillämpande av kunskaper som man lärt sig under kursen."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"En del uppgifter kan kännas svåra, men det är inte något att oroa sig över. Ingen av uppgifterna är obligatorisk och du behöver bara 25 % av poängen från varje modul för att klara den här kursen. Du kan läsa mera på kursens bedömningssida."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Uppgifterna är inte i svårighetsordning. Varje del introducerar vanligtvis några nya saker inom programmering och i samband finns relaterade uppgifter – både enklare och svårare. Om du stöter på en uppgift som känns oöverkomlig ska du fortsätta till nästa uppgift. Du kan alltid senare återkomma till tidigare uppgifter."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"En uppgift som känns för svår just nu kommer sannolikt att vara ganska enkel om en månad."}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"När man programmerar kan man ibland behöva hantera data som finns lagrad i filer. Datorprogram kan läsa data från filer och skriva data till filer. Också stora mängder data i filer kan enkelt behandlas automatiskt."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Under den här kursen kommer vi endast att arbeta med textfiler. De här filerna består av rader med text. Till exempel är kodeditorn Visual Studio Code kompatibel med textfiler. Obs! Även om ordbehandlingsprogram som Microsoft Word ofta används med filer som innehåller text, är Word-dokument inte textfiler. Dokumenten innehåller också annan information om till exempel textformat, vilket gör det mer komplicerat att behandla filerna i Python-program."}]},{"type":"element","tagName":"h2","properties":{"id":"att-lasa-data-fran-en-fil","style":"position:relative;"},"children":[{"type":"text","value":"Att läsa data från en fil"},{"type":"element","tagName":"a","properties":{"href":"#att-lasa-data-fran-en-fil","ariaLabel":"att lasa data fran en fil permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Vi börjar arbeta med textfilen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"exempel.txt"}]},{"type":"text","value":" som innehållet följande:"}]},{"type":"element","tagName":"sample-data","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Hej alla!\nVår exempelfil består av tre rader.\nDet här är den sista raden."}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Ett enkelt sätt att använda filer i Python är med "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"with"}]},{"type":"text","value":"-satsen. Den inledande raden öppnar filen följt av blocket där vi kan komma åt filen. Efter blocket stängs filen automatiskt och då kan den inte mera användas i programmet innan man öppnar den igen."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Den här koden öppnar alltså filen, läser dess innehåll och skriver ut det. Därefter stängs filen:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"with"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"open"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"exempel.txt\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"as"}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    innehall "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"read"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"innehall"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Hej alla!\nVår exempelfil består av tre rader.\nDet här är den sista raden."}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Variabeln "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"fil"}]},{"type":"text","value":" är en så kallad file handle (\"filhandtag\"). Via variabeln kan vi komma åt filen så länge den är öppen. Här använde vi metoden "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"read"}]},{"type":"text","value":" som returnerar filens innehåll som en enda sträng. I det här fallet skulle strängen se ut så här:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"text"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-text"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"\"Hej alla!\\nVår exempelfil består av tre rader.\\nDet här är den sista raden.\""}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"\\n"}]},{"type":"text","value":" motsvarar radbrytningarna i texten."}]},{"type":"element","tagName":"h2","properties":{"id":"ga-igenom-innehallet-i-en-fil","style":"position:relative;"},"children":[{"type":"text","value":"Gå igenom innehållet i en fil"},{"type":"element","tagName":"a","properties":{"href":"#ga-igenom-innehallet-i-en-fil","ariaLabel":"ga igenom innehallet i en fil permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Metoden "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"read"}]},{"type":"text","value":" fungerar bra för att skriva ut hela innehållet i en fil, men ofta vill vi gå igenom innehållet rad för rad."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Man kan tänka att en textfil är en lista av strängar, där varje sträng finns på sin egen rad i filen. Vi kan som vanligt gå igenom denna lista med en for-loop."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Följande exempel läser in vår exempelfil med hjälp av en for-loop, tar bort radbrytningarna, räknar antalet rader och skriver ut varje rad tillsammans med sitt radnummer. Programmet håller också koll på radernas längder:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"with"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"open"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"exempel.txt\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"as"}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    raknare "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"0"}]},{"type":"text","value":"\n    totallangd "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"0"}]},{"type":"text","value":"\n\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"for"}]},{"type":"text","value":" rad "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"in"}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n        rad "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" rad"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"replace"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"\\n\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n        raknare "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"+="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"1"}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Rad\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" raknare"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" rad"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n        langd "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"len"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"rad"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n        totallangd "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"+="}]},{"type":"text","value":" langd\n\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Radernas totallängd:\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" totallangd"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Rad 1 Hej alla!\nRad 2 Vår exempelfil består av tre rader.\nRad 3 Det här är den sista raden.\nRadernas totallängd: 63"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Det finns en radbrytning "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"\\n"}]},{"type":"text","value":" i slutet av varje rad i filen, men "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"print"}]},{"type":"text","value":"-funktionen lägger också automatiskt till en rad i slutet av utskriften. Det finns inga extra radbyten i utskriften ovan eftersom radbrytningarna avlägsnats med hjälp av "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"replace"}]},{"type":"text","value":"-metoden. Metoden ersätter alla radbrytningstecken med en tom sträng. I och med detta räknas radernas längder också korrekt."}]},{"type":"element","tagName":"programming-exercise","properties":{"name":"Största siffran","tmcname":"osa06-01_storsta_siffran"},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"I filen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"siffror.txt"}]},{"type":"text","value":" finns siffror listade på olika rader enligt exemplet nedan:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"sh"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-sh"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-sh"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"2"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"45"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"108"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"3"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","parameter","variable"]},"children":[{"type":"text","value":"-10"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"1100"}]},{"type":"text","value":"\no.s.v. "},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":".."}]},{"type":"text","value":"."}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Skapa funktionen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"storst"}]},{"type":"text","value":" som ska läsa filen och returnera den största siffran som hittas."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Observera att filnamnet alltid är "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"siffror.txt"}]},{"type":"text","value":" och att funktionen inte har några parametrar."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Obs! Om Visual Studio Code inte hittar din fil även om namnet är korrekt skrivet ska du följa instruktionerna nedan."}]}]},{"type":"element","tagName":"h2","properties":{"id":"om-visual-studio-code-inte-hittar-min-fil","style":"position:relative;"},"children":[{"type":"text","value":"Om Visual Studio Code inte hittar min fil?"},{"type":"element","tagName":"a","properties":{"href":"#om-visual-studio-code-inte-hittar-min-fil","ariaLabel":"om visual studio code inte hittar min fil permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"När du kör din kod är det möjligt att Visual Studio Code meddelar att filen inte finns – även efter att du kollat att filen finns och att namnet är korrekt skrivet. Att ändra på följande inställning kan lösa problemet:"}]},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"öppna inställningarna från menyraden: File -> Preferences -> Settings"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"sök efter den inställning som ska ändras med sökordet \"executeinfile\""}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"välj fliken Workspace"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"bocka i valet under Python -> Terminal -> Execute in file dir."}]},{"type":"text","value":"\n"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Inställningsfönstret borde se ut ungefär så här:"}]},{"type":"element","tagName":"span","properties":{"className":["gatsby-resp-image-wrapper"],"style":"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 920px; margin-bottom: 1rem;"},"children":[{"type":"text","value":"\n      "},{"type":"element","tagName":"a","properties":{"className":["gatsby-resp-image-link"],"href":"/static/6e5d89f76dfd47af6f9ea67b097452e8/e405b/6_1_1.png","style":"display: block","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["gatsby-resp-image-background-image"],"style":"padding-bottom: 16.521739130434785%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAIAAAAcOLh5AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAZElEQVQI11XOQQqAMAwEwP5DknRNkNIilaInvXn3/8+RKIoOOe4uCQAQHYDWWq01/xS/UnLO07rP+9HbEEU8DQT+SCmZmZqlB77GRdvGUCa687+yiDAzVH3i8hb9MyZQJ0xv/gSEjBk5LU20dgAAAABJRU5ErkJggg=='); background-size: cover; display: block;"},"children":[]},{"type":"text","value":"\n  "},{"type":"element","tagName":"picture","properties":{},"children":[{"type":"text","value":"\n          "},{"type":"element","tagName":"source","properties":{"srcSet":["/static/6e5d89f76dfd47af6f9ea67b097452e8/a0b58/6_1_1.webp 230w","/static/6e5d89f76dfd47af6f9ea67b097452e8/bc10c/6_1_1.webp 460w","/static/6e5d89f76dfd47af6f9ea67b097452e8/966d8/6_1_1.webp 920w","/static/6e5d89f76dfd47af6f9ea67b097452e8/445df/6_1_1.webp 1380w","/static/6e5d89f76dfd47af6f9ea67b097452e8/9b2c8/6_1_1.webp 1566w"],"sizes":"(max-width: 920px) 100vw, 920px","type":"image/webp"},"children":[]},{"type":"text","value":"\n          "},{"type":"element","tagName":"source","properties":{"srcSet":["/static/6e5d89f76dfd47af6f9ea67b097452e8/81c8e/6_1_1.png 230w","/static/6e5d89f76dfd47af6f9ea67b097452e8/08a84/6_1_1.png 460w","/static/6e5d89f76dfd47af6f9ea67b097452e8/c0255/6_1_1.png 920w","/static/6e5d89f76dfd47af6f9ea67b097452e8/b1001/6_1_1.png 1380w","/static/6e5d89f76dfd47af6f9ea67b097452e8/e405b/6_1_1.png 1566w"],"sizes":"(max-width: 920px) 100vw, 920px","type":"image/png"},"children":[]},{"type":"text","value":"\n          "},{"type":"element","tagName":"img","properties":{"className":["gatsby-resp-image-image"],"src":"/static/6e5d89f76dfd47af6f9ea67b097452e8/c0255/6_1_1.png","alt":"6 1 1","title":"6 1 1","loading":"lazy","decoding":"async","style":"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;"},"children":[]},{"type":"text","value":"\n        "}]},{"type":"text","value":"\n  "}]},{"type":"text","value":"\n    "}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Om det här inte fungerar kan du kopiera filen i src-mappen…"}]},{"type":"element","tagName":"span","properties":{"className":["gatsby-resp-image-wrapper"],"style":"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 920px; margin-bottom: 1rem;"},"children":[{"type":"text","value":"\n      "},{"type":"element","tagName":"a","properties":{"className":["gatsby-resp-image-link"],"href":"/static/a57483e6084d39a596ee24c41a42de70/6297e/6_1_2.png","style":"display: block","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["gatsby-resp-image-background-image"],"style":"padding-bottom: 22.17391304347826%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAIAAAABPYjBAAAACXBIWXMAABYlAAAWJQFJUiTwAAAApklEQVQI123N0QqCQBAFUH/CUVlnt3JnVtcSyx1XikKCHur/PyhQih463KcLl5s87rcQRcLoa98037TO1czsFtba6p/kFESm8+U6HyTuT4FcY11Dtd9WVH4gol7keQ4Aa4OIySBjfxwkyKuLc90P5ImYiHeWtdmYRVmWSqmiKLIsAwCllDFGa50EiW3Xj3F6tjKQr5YlE28tozbrISKmaQoAiPg7fgOYxyLFEKvBSAAAAABJRU5ErkJggg=='); background-size: cover; display: block;"},"children":[]},{"type":"text","value":"\n  "},{"type":"element","tagName":"picture","properties":{},"children":[{"type":"text","value":"\n          "},{"type":"element","tagName":"source","properties":{"srcSet":["/static/a57483e6084d39a596ee24c41a42de70/a0b58/6_1_2.webp 230w","/static/a57483e6084d39a596ee24c41a42de70/bc10c/6_1_2.webp 460w","/static/a57483e6084d39a596ee24c41a42de70/966d8/6_1_2.webp 920w","/static/a57483e6084d39a596ee24c41a42de70/445df/6_1_2.webp 1380w","/static/a57483e6084d39a596ee24c41a42de70/78de1/6_1_2.webp 1840w","/static/a57483e6084d39a596ee24c41a42de70/4b7c9/6_1_2.webp 2044w"],"sizes":"(max-width: 920px) 100vw, 920px","type":"image/webp"},"children":[]},{"type":"text","value":"\n          "},{"type":"element","tagName":"source","properties":{"srcSet":["/static/a57483e6084d39a596ee24c41a42de70/81c8e/6_1_2.png 230w","/static/a57483e6084d39a596ee24c41a42de70/08a84/6_1_2.png 460w","/static/a57483e6084d39a596ee24c41a42de70/c0255/6_1_2.png 920w","/static/a57483e6084d39a596ee24c41a42de70/b1001/6_1_2.png 1380w","/static/a57483e6084d39a596ee24c41a42de70/161ec/6_1_2.png 1840w","/static/a57483e6084d39a596ee24c41a42de70/6297e/6_1_2.png 2044w"],"sizes":"(max-width: 920px) 100vw, 920px","type":"image/png"},"children":[]},{"type":"text","value":"\n          "},{"type":"element","tagName":"img","properties":{"className":["gatsby-resp-image-image"],"src":"/static/a57483e6084d39a596ee24c41a42de70/c0255/6_1_2.png","alt":"6 1 2","title":"6 1 2","loading":"lazy","decoding":"async","style":"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;"},"children":[]},{"type":"text","value":"\n        "}]},{"type":"text","value":"\n  "}]},{"type":"text","value":"\n    "}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"…direkt till roten av uppgiftsmappen:"}]},{"type":"element","tagName":"span","properties":{"className":["gatsby-resp-image-wrapper"],"style":"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 920px; margin-bottom: 1rem;"},"children":[{"type":"text","value":"\n      "},{"type":"element","tagName":"a","properties":{"className":["gatsby-resp-image-link"],"href":"/static/bc83b27162a67ce98f825821dc304a7e/6297e/6_1_3.png","style":"display: block","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["gatsby-resp-image-background-image"],"style":"padding-bottom: 26.956521739130434%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAIAAADKYVtkAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAt0lEQVQY023P3Q6CMAwFYN6DjqjtNta1MxlDdILGxBvf/4UMGO/4cm5Pf5pa79N0m+eHSBJJMSqzMKv3vaqklPq+995ba51zdkNkPR2COzallJzL8/lalketc86FWWJUIsfMqtq2bdd1sDF/AOaE2AzDUIYyjmPOWUQRiWidjYgxRlU1xnQ7DBGtmyWdy2ViZqL1ul8QSSQyMwDsVI1BxOZ6md65fsYlyTms3/6iznnd7JYBIITwBcyRLmVWTxqEAAAAAElFTkSuQmCC'); background-size: cover; display: block;"},"children":[]},{"type":"text","value":"\n  "},{"type":"element","tagName":"picture","properties":{},"children":[{"type":"text","value":"\n          "},{"type":"element","tagName":"source","properties":{"srcSet":["/static/bc83b27162a67ce98f825821dc304a7e/a0b58/6_1_3.webp 230w","/static/bc83b27162a67ce98f825821dc304a7e/bc10c/6_1_3.webp 460w","/static/bc83b27162a67ce98f825821dc304a7e/966d8/6_1_3.webp 920w","/static/bc83b27162a67ce98f825821dc304a7e/445df/6_1_3.webp 1380w","/static/bc83b27162a67ce98f825821dc304a7e/78de1/6_1_3.webp 1840w","/static/bc83b27162a67ce98f825821dc304a7e/4b7c9/6_1_3.webp 2044w"],"sizes":"(max-width: 920px) 100vw, 920px","type":"image/webp"},"children":[]},{"type":"text","value":"\n          "},{"type":"element","tagName":"source","properties":{"srcSet":["/static/bc83b27162a67ce98f825821dc304a7e/81c8e/6_1_3.png 230w","/static/bc83b27162a67ce98f825821dc304a7e/08a84/6_1_3.png 460w","/static/bc83b27162a67ce98f825821dc304a7e/c0255/6_1_3.png 920w","/static/bc83b27162a67ce98f825821dc304a7e/b1001/6_1_3.png 1380w","/static/bc83b27162a67ce98f825821dc304a7e/161ec/6_1_3.png 1840w","/static/bc83b27162a67ce98f825821dc304a7e/6297e/6_1_3.png 2044w"],"sizes":"(max-width: 920px) 100vw, 920px","type":"image/png"},"children":[]},{"type":"text","value":"\n          "},{"type":"element","tagName":"img","properties":{"className":["gatsby-resp-image-image"],"src":"/static/bc83b27162a67ce98f825821dc304a7e/c0255/6_1_3.png","alt":"6 1 3","title":"6 1 3","loading":"lazy","decoding":"async","style":"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;"},"children":[]},{"type":"text","value":"\n        "}]},{"type":"text","value":"\n  "}]},{"type":"text","value":"\n    "}]},{"type":"element","tagName":"h2","properties":{"id":"att-debugga-kod-som-behandlar-filer","style":"position:relative;"},"children":[{"type":"text","value":"Att debugga kod som behandlar filer"},{"type":"element","tagName":"a","properties":{"href":"#att-debugga-kod-som-behandlar-filer","ariaLabel":"att debugga kod som behandlar filer permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"När man använder Visual Studio Codes debuggare med program som behandlar filer, kan man stöta på följande felmeddelande:"}]},{"type":"element","tagName":"span","properties":{"className":["gatsby-resp-image-wrapper"],"style":"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 920px; margin-bottom: 1rem;"},"children":[{"type":"text","value":"\n      "},{"type":"element","tagName":"a","properties":{"className":["gatsby-resp-image-link"],"href":"/static/b0c7745f7a4cc9c485a52d483e0aa290/eff3b/6_1_4.png","style":"display: block","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["gatsby-resp-image-background-image"],"style":"padding-bottom: 31.304347826086953%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAIAAABM9SnKAAAACXBIWXMAABYlAAAWJQFJUiTwAAABMklEQVQY003PyU7CQACA4d7EBWQpLdDS6XSWzkw702VIIBESgyaYWBZRE60QUIzv/wguB0PyX7/Db2itx5PJcDiKYym4ICFXaSKkZFKGMhUyESKmlAEY+BD5EAGIMA5iThhjRpZlOhsooTjlmFAKgaBgPMSjHOS8kwtHx55itgqt4xIllEqNPM85F4xxSmhAyAziDabbiG8F28voBcGnvrNot+ZmY2E252azMBtFvSZ7XQADQ19dI4QJoX+Y3vXhgcbvcbYL5Z6pHYlKQEpAS0DWrd6yZi3r1uK0Hpm26wND6xxj8o9nrv8Zxl/p4CCSQ5R8cFV6aAPwm4eeLWfd7Dy2OqvzRtS2XQB+n4/x1IOvNHrw8dIBSwcUtlPYzsqF9+3e7dnltFKdVqo3JxfC7v7gb6ThPL16POKXAAAAAElFTkSuQmCC'); background-size: cover; display: block;"},"children":[]},{"type":"text","value":"\n  "},{"type":"element","tagName":"picture","properties":{},"children":[{"type":"text","value":"\n          "},{"type":"element","tagName":"source","properties":{"srcSet":["/static/b0c7745f7a4cc9c485a52d483e0aa290/a0b58/6_1_4.webp 230w","/static/b0c7745f7a4cc9c485a52d483e0aa290/bc10c/6_1_4.webp 460w","/static/b0c7745f7a4cc9c485a52d483e0aa290/966d8/6_1_4.webp 920w","/static/b0c7745f7a4cc9c485a52d483e0aa290/445df/6_1_4.webp 1380w","/static/b0c7745f7a4cc9c485a52d483e0aa290/78de1/6_1_4.webp 1840w","/static/b0c7745f7a4cc9c485a52d483e0aa290/5340a/6_1_4.webp 2072w"],"sizes":"(max-width: 920px) 100vw, 920px","type":"image/webp"},"children":[]},{"type":"text","value":"\n          "},{"type":"element","tagName":"source","properties":{"srcSet":["/static/b0c7745f7a4cc9c485a52d483e0aa290/81c8e/6_1_4.png 230w","/static/b0c7745f7a4cc9c485a52d483e0aa290/08a84/6_1_4.png 460w","/static/b0c7745f7a4cc9c485a52d483e0aa290/c0255/6_1_4.png 920w","/static/b0c7745f7a4cc9c485a52d483e0aa290/b1001/6_1_4.png 1380w","/static/b0c7745f7a4cc9c485a52d483e0aa290/161ec/6_1_4.png 1840w","/static/b0c7745f7a4cc9c485a52d483e0aa290/eff3b/6_1_4.png 2072w"],"sizes":"(max-width: 920px) 100vw, 920px","type":"image/png"},"children":[]},{"type":"text","value":"\n          "},{"type":"element","tagName":"img","properties":{"className":["gatsby-resp-image-image"],"src":"/static/b0c7745f7a4cc9c485a52d483e0aa290/c0255/6_1_4.png","alt":"6 1 4","title":"6 1 4","loading":"lazy","decoding":"async","style":"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;"},"children":[]},{"type":"text","value":"\n        "}]},{"type":"text","value":"\n  "}]},{"type":"text","value":"\n    "}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Orsaken är att debuggaren alltid söker efter filer i roten av uppgiftsmappen. Inställningen Execute in file dir som nämndes ovan har ingen påverkan här. Den enklaste lösningen är att kopiera filen till rotmappen."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Du kan också behöva starta om Visual Studio Code efter att du har kopierat alla filer som behövs."}]},{"type":"element","tagName":"h2","properties":{"id":"lasa-csv-filer","style":"position:relative;"},"children":[{"type":"text","value":"Läsa CSV-filer"},{"type":"element","tagName":"a","properties":{"href":"#lasa-csv-filer","ariaLabel":"lasa csv filer permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"En CSV-fil (kommaseparerade värden) är en textfil som innehåller data som separerats med ett visst tecken. Det här tecknet är vanligtvis komma ("},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":","}]},{"type":"text","value":") eller semikolon ("},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":";"}]},{"type":"text","value":"), men vilket som helst tecken är i princip möjligt."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"CSV-filer är ett vanligt sätt att lagra olika typer av data. Flera databaser och kalkylprogram – exempelvis Excel – kan importera och exportera data i CSV-format. Det här möjliggör enkel dataöverföring mellan olika system."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Vi har redan bekantat oss med hur man kan gå igenom rader i en fil med en for-loop, men hur kan vi separera fält på en och samma rad? I Python kan vi använda strängmetoden "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"split"}]},{"type":"text","value":" för detta. Metoden tar separatortecknet eller -tecknen som ett strängargument och returnerar innehållet i den ursprungliga strängen som en lista av strängar – separerade vid separatortecknen."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Följande exempel visar hur det fungerar:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"text","value":"text "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"apa,banan,cembalo\""}]},{"type":"text","value":"\nordlista "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" text"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"split"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\",\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"for"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"ord"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"in"}]},{"type":"text","value":" ordlista"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"ord"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"apa\nbanan\ncembalo"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Låt oss säga att vi har filen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"vitsord.csv"}]},{"type":"text","value":", som innehåller namn på elever samt vitsord de fått i olika kurser. Varje rad har data som tillhör en studerande och olika data separeras med semikolon."}]},{"type":"element","tagName":"sample-data","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Peter;5;4;5;3;4;5;5;4;2;4\nPauline;3;4;2;4;4;2;3;1;3;3\nPia;4;5;5;4;5;5;4;5;4;4"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Följande program går igenom filen rad för rad, delar upp raderna i delar och skriver ut elevernas namn och vitsord:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"with"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"open"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"vitsord.csv\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"as"}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"for"}]},{"type":"text","value":" rad "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"in"}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n        rad "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" rad"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"replace"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"\\n\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n        delar "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" rad"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"split"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\";\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n        namn "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" delar"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"0"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"text","value":"\n        vitsord "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" delar"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"1"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Namn:\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" namn"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Vitsord:\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" vitsord"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Namn: Peter\nVitsord: ['5', '4', '5', '3', '4', '5', '5', '4', '2', '4']\nNamn: Pauline\nVitsord: ['3', '4', '2', '4', '4', '2', '3', '1', '3', '3']\nNamn: Pia\nVitsord: ['4', '5', '5', '4', '5', '5', '4', '5', '4', '4']"}]}]},{"type":"element","tagName":"programming-exercise","properties":{"name":"Fruktaffär","tmcname":"osa06-02_fruktaffar"},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"I filen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"frukter.csv"}]},{"type":"text","value":" finns frukter med deras pris enligt exemplet nedan:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"sh"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-sh"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-sh"]},"children":[{"type":"text","value":"banan"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":";"}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"6.50"}]},{"type":"text","value":"\näpple"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":";"}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"4.95"}]},{"type":"text","value":"\napelsin"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":";"}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"8.0"}]},{"type":"text","value":"\no.s.v. "},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":".."}]},{"type":"text","value":"."}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Skapa funktionen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"las_frukter"}]},{"type":"text","value":" som ska läsa filen och skapa ett lexikon där nyckeln är fruktens namn och värdet fruktens pris. Priset ska vara av typen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"float"}]},{"type":"text","value":"."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Observera att filnamnet alltid är "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"frukter.csv"}]},{"type":"text","value":" och att funktionen inga har några parametrar."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Funktionen ska till slut returnera lexikonet."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Obs! Om Visual Studio Code inte hittar filen även om namnet är korrekt skrivet, följ instruktionerna ovan."}]}]},{"type":"element","tagName":"programming-exercise","properties":{"name":"Matris","tmcname":"osa06-03_matris"},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"I filen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"matris.txt"}]},{"type":"text","value":" finns en matris enligt exemplet nedan:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"sh"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-sh"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-sh"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"1,0"}]},{"type":"text","value":",2,8,2,1,3,2,5,2,2,2\n"},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"9,2"}]},{"type":"text","value":",4,5,2,4,2,4,1,10,4,2\no.s.v. "},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":".."}]},{"type":"text","value":"."}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Skapa funktionerna "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"summa"}]},{"type":"text","value":" och "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"maximum"}]},{"type":"text","value":" som returnerar summan av elementen i matrisen respektive det största elementet."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Skapa också funktionen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"radsummor"}]},{"type":"text","value":" som returnerar summorna av matrisens rader i form av en lista . Till exempel ska funktionen för matrisen..."}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"sh"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-sh"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-sh"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"1,2"}]},{"type":"text","value":",3\n"},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"2,3"}]},{"type":"text","value":",4"}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"...returnera "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"[6, 9]"}]},{"type":"text","value":"."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Tips: Du kan också implementera andra funktioner i programmet. Fundera vilka gemensamma funktioner de ovan nämnda funktionerna kan behöva."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Observera att filen alltid heter "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"matris.txt"}]},{"type":"text","value":" och att funktionerna inte ska ha några parametrar. Ytterligare funktioner du eventuellt skapar kan ha parametrar."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Obs! Om Visual Studio Code inte hittar filen även om namnet är korrekt skrivet, ska du följa instruktionerna ovan."}]}]},{"type":"element","tagName":"h2","properties":{"id":"lasa-samma-fil-flera-ganger","style":"position:relative;"},"children":[{"type":"text","value":"Läsa samma fil flera gånger"},{"type":"element","tagName":"a","properties":{"href":"#lasa-samma-fil-flera-ganger","ariaLabel":"lasa samma fil flera ganger permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Ibland kan man behöva läsa innehållet i en fil flera gånger i samma program. Vi tittar på ett program som behandlar data om några personer i en CSV-fil:"}]},{"type":"element","tagName":"sample-data","properties":{},"children":[{"type":"text","value":"\nPeter;40;Helsingfors\nEmilia;34;Esbo\nErik;42;Åbo\nAntonia;100;Helsingfors\nLisa;58;Suonenjoki\n"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"with"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"open"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"personer.csv\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"as"}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","comment"]},"children":[{"type":"text","value":"# skriver ut namn"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"for"}]},{"type":"text","value":" rad "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"in"}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n        delar "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" rad"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"split"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\";\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Namn:\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" delar"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"0"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n\n    "},{"type":"element","tagName":"span","properties":{"className":["token","comment"]},"children":[{"type":"text","value":"# söker efter den äldsta personen"}]},{"type":"text","value":"\n    hogsta_aldern "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"-"}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"1"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"for"}]},{"type":"text","value":" rad "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"in"}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n        delar "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" rad"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"split"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\";\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n        namn "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" delar"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"0"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"text","value":"\n        alder "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"int"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"delar"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"1"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"if"}]},{"type":"text","value":" alder "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":">"}]},{"type":"text","value":" hogsta_aldern"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n            hogsta_aldern "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" alder\n            aldst "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" namn\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Den äldsta är\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" aldst"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"När vi kör programmet får vi det här felmeddelandet:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"text","value":"Traceback "},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"most recent call last"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Den äldsta är\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":";"}]},{"type":"text","value":" aldst"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\nUnboundLocalError"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":" local variable "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"'aldst'"}]},{"type":"text","value":" referenced before assignment"}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Orsaken till felet är att den andra for-loopen aldrig körs, eftersom filen endast kan behandlas en gång. När den sista raden har lästs stannar file handlen i slutet av filen, filen stängs och vi kan inte längre komma åt filens innehåll."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Om vi vill komma åt innehållet även i den andra for-loopen, måste vi öppna filen på nytt:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"with"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"open"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"personer.csv\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"as"}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","comment"]},"children":[{"type":"text","value":"# skriver ut namn"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"for"}]},{"type":"text","value":" rad "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"in"}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n        delar "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" rad"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"split"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\";\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Namn:\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" delar"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"0"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"with"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"open"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"personer.csv\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"as"}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","comment"]},"children":[{"type":"text","value":"# söker efter den äldsta personen"}]},{"type":"text","value":"\n    hogsta_aldern "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"-"}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"1"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"for"}]},{"type":"text","value":" rad "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"in"}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n        delar "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" rad"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"split"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\";\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n        namn "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" delar"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"0"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"text","value":"\n        alder "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"int"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"delar"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"1"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"if"}]},{"type":"text","value":" alder "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":">"}]},{"type":"text","value":" hogsta_aldern"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n            hogsta_aldern "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" alder\n            aldst "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" namn\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Den äldsta är\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" aldst"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Även om den ovanstående koden fungerar, innehåller den onödig upprepning. Det lönar sig vanligtvis att läsa filen bara en gång, och spara dess innehåll i ett lämpligt format för fortsatt behandling:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"text","value":"personer "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","comment"]},"children":[{"type":"text","value":"# vi läser in personerna till listan"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"with"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"open"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"personer.csv\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"as"}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"for"}]},{"type":"text","value":" rad "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"in"}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n        delar "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" rad"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"split"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\";\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n        personer"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"append"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"delar"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"0"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"int"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"delar"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"1"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" delar"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"2"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n\n"},{"type":"element","tagName":"span","properties":{"className":["token","comment"]},"children":[{"type":"text","value":"# skriver ut namn"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"for"}]},{"type":"text","value":" person "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"in"}]},{"type":"text","value":" personer"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Namn:\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" person"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"0"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n\n"},{"type":"element","tagName":"span","properties":{"className":["token","comment"]},"children":[{"type":"text","value":"# söker efter den äldsta personen"}]},{"type":"text","value":"\nhogsta_aldern "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"-"}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"1"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"for"}]},{"type":"text","value":" person "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"in"}]},{"type":"text","value":" personer"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    namn "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" person"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"0"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"text","value":"\n    alder "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" person"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"1"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"if"}]},{"type":"text","value":" alder "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":">"}]},{"type":"text","value":" hogsta_aldern"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n        hogsta_aldern "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" alder\n        aldst "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" namn\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Den äldsta är\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" aldst"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"h2","properties":{"id":"mera-om-att-behandla-csv-filer","style":"position:relative;"},"children":[{"type":"text","value":"Mera om att behandla CSV-filer"},{"type":"element","tagName":"a","properties":{"href":"#mera-om-att-behandla-csv-filer","ariaLabel":"mera om att behandla csv filer permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Vi fortsätter behandla filen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"vitsord.csv"}]},{"type":"text","value":", som innehåller följande data:"}]},{"type":"element","tagName":"sample-data","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Peter;5;4;5;3;4;5;5;4;2;4\nPauline;3;4;2;4;4;2;3;1;3;3\nPia;4;5;5;4;5;5;4;5;4;4"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Följande program skapar lexikonet "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"vitsord"}]},{"type":"text","value":" baserat på innehållet i filen. Nycklarna är elevernas namn och värdena innehåller elevernas respektive vitsord. Programmet konverterar vitsorden till heltal så att de kan hanteras enklare."}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"text","value":"vitsord "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"{"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"}"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"with"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"open"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"vitsord.csv\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"as"}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"for"}]},{"type":"text","value":" rad "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"in"}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n        rad "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" rad"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"replace"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"\\n\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n        delar "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" rad"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"split"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\";\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n        namn "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" delar"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"0"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"text","value":"\n        vitsord"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"text","value":"namn"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"for"}]},{"type":"text","value":" givet_vitsord "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"in"}]},{"type":"text","value":" delar"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"1"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n            vitsord"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"text","value":"namn"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"append"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"int"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"givet_vitsord"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"vitsord"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"{'Peter': [5, 4, 5, 3, 4, 5, 5, 4, 2, 4], 'Pauline': [3, 4, 2, 4, 4, 2, 3, 1, 3, 3], 'Pia': [4, 5, 5, 4, 5, 5, 4, 5, 4, 4]}"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Nu kan vi skriva ut statistik om varje studerande, baserat på värdena i lexikonet:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"for"}]},{"type":"text","value":" namn"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" lista "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"in"}]},{"type":"text","value":" vitsord"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"items"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    basta "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"max"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"lista"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n    medeltal "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"sum"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"lista"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"/"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"len"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"lista"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string-interpolation"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"f\""}]},{"type":"element","tagName":"span","properties":{"className":["token","interpolation"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"{"}]},{"type":"text","value":"namn"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":": bästa vitsordet "}]},{"type":"element","tagName":"span","properties":{"className":["token","interpolation"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"{"}]},{"type":"text","value":"basta"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":", medeltal "}]},{"type":"element","tagName":"span","properties":{"className":["token","interpolation"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"{"}]},{"type":"text","value":"medeltal"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"element","tagName":"span","properties":{"className":["token","format-spec"]},"children":[{"type":"text","value":".2f"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\""}]}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Peter: bästa vitsordet 5, medeltal 4.10\nPauline: bästa vitsordet 4, medeltal 2.90\nPia: bästa vitsordet 5, medeltal 4.50"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Ta en titt på programmet i exemplet ovan. Det kan kanske verka aningen komplicerat vid den första anblicken, men tekniken kan användas med flera olika typer av data."}]},{"type":"element","tagName":"h2","properties":{"id":"ta-bort-overflodiga-rader-mellanslag-och-radbrytningar","style":"position:relative;"},"children":[{"type":"text","value":"Ta bort överflödiga rader, mellanslag och radbrytningar"},{"type":"element","tagName":"a","properties":{"href":"#ta-bort-overflodiga-rader-mellanslag-och-radbrytningar","ariaLabel":"ta bort overflodiga rader mellanslag och radbrytningar permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Låt oss säga att vi har en CSV-fil med namn, exporterar från Excel:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"sh"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-sh"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-sh"]},"children":[{"type":"text","value":"förnamn"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":";"}]},{"type":"text","value":" efternamn\nPeter"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":";"}]},{"type":"text","value":" Python\nJaana"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":";"}]},{"type":"text","value":" Java\nHeikki"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":";"}]},{"type":"text","value":" Haskell"}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Excel är ökänt för att lägga till extra mellanrum lite här och där. Här har vi ett extra mellanrum mellan elementen, efter varje semikolon."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Vi skulle vilja skriva ut efternamnet på varje person som finns i listan. Den första raden i filen innehåller information om den data som följer och kan skippas:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"text","value":"efternamn "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"with"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"open"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"personer.csv\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"as"}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"for"}]},{"type":"text","value":" rad "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"in"}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n        delar "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" rad"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"split"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\";\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"span","properties":{"className":["token","comment"]},"children":[{"type":"text","value":"# skippar raden med rubriker"}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"if"}]},{"type":"text","value":" delar"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"0"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"=="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"förnamn\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n            "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"continue"}]},{"type":"text","value":"\n        efternamn"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"append"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"delar"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"1"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"efternamn"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"När koden körs får vi den här utskriften:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"[' Python\\n', ' Java\\n', ' Haskell']"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"De två första elementen har ett radbrytningstecken i slutet och alla tre element har ett mellanslag i början. Vi har redan använt "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"replace"}]},{"type":"text","value":"-metoden för att ta bort onödigt mellanrum, men ett bättre sätt är "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"strip"}]},{"type":"text","value":"-metoden hos strängar. Den här metoden tar bort tomrum från början och slutet av en sträng. Till tomrum räknas blanktecken, radbrytningar, samt tabb- och andra tecken som normalt inte skulle skrivas ut."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Vi kan testa metoden i Python-terminalen:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":">>"}]},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":">"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\" prov \""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"strip"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"'prov'"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":">>"}]},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":">"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"\\n\\ntest\\n\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"strip"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"'test'"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":">>"}]},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":">"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Att ta bort de onödiga tecknen kräver bara en liten ändring i programmet:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"text","value":"efternamn "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"with"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"open"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"personer.csv\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"as"}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"for"}]},{"type":"text","value":" rad "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"in"}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n        delar "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" rad"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"split"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"';'"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"if"}]},{"type":"text","value":" delar"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"0"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"=="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"förnamn\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n            "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"continue"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","comment"]},"children":[{"type":"text","value":"# skippar raden med rubriker"}]},{"type":"text","value":"\n        efternamn"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"append"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"delar"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"1"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"strip"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"efternamn"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Nu får vi den önskade utskriften:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"['Python', 'Java', 'Haskell']"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Strängmetoderna "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"lstrip"}]},{"type":"text","value":" och "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"rstrip"}]},{"type":"text","value":" fungerar på motsvarande sätt som "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"strip"}]},{"type":"text","value":", men gör det då bara för antingen vänstra (l) eller högra (r) sidan av strängen:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":">>"}]},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":">"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\" teststräng  \""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"rstrip"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"' teststräng'"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":">>"}]},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":">"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\" teststräng  \""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"lstrip"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"'teststräng  '"}]}]}]}]},{"type":"element","tagName":"h2","properties":{"id":"kombinera-data-fran-olika-filer","style":"position:relative;"},"children":[{"type":"text","value":"Kombinera data från olika filer"},{"type":"element","tagName":"a","properties":{"href":"#kombinera-data-fran-olika-filer","ariaLabel":"kombinera data fran olika filer permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Det är mycket vanligt att data som behöver hanteras av ett program finns lagrade i flera filer. Vi tar en titt på ett exempel där personalens information i ett företag finns i filen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"personal.csv"}]},{"type":"text","value":":"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"csv"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-csv"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-csv"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"personnr;namn;adress;adressort"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"080488-123X;Peter Mikkola;Filpusvägen 7;00700 HELSINGFORS"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"290274-044S;Lisa Marttinen;Mannerheimvägen 100 A 10;00100 HELSINGFORS"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"010479-007Z;Arto Vihavainen;Tiilitehtaankatu 10;04260 KERAVA"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"010499-345K;Leevi Hellas;Tapiolavägen 9;02100 ESBO"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Löneuppgifterna finns i en separat fil, "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"lon.csv"}]},{"type":"text","value":":"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"csv"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-csv"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-csv"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"personnr;lön;bonus"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"080488-123X;3300;0"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"290274-044S;4150;200"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"010479-007Z;1300;1200"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Alla rader i båda filerna innehåller en personlig id-kod (pic) som identifierar vems data vi arbetar med. När vi använder det här id:t som gemensam faktor, är det lätt att koppla en arbetstagares namn till hens lön. Vi kan då till exempel skriva ut en lista över de månatliga inkomsterna:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"pre","properties":{},"children":[{"type":"text","value":"inkomster:\nPeter Mikkola    3300 euro\nLisa Marttinen   4350 euro\nArto Vihavainen  2500 euro\n"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Programmet använder två lexikon som hjälpdatastrukturer: "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"namn"}]},{"type":"text","value":" och "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"loner"}]},{"type":"text","value":". Båda använder personnr som nyckel:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"text","value":"namn "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"{"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"}"}]},{"type":"text","value":"\n\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"with"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"open"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"personal.csv\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"as"}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"for"}]},{"type":"text","value":" rad "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"in"}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n        delar "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" rad"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"split"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"';'"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"if"}]},{"type":"text","value":" delar"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"0"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"=="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"personnr\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n            "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"continue"}]},{"type":"text","value":"\n        namn"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"text","value":"delar"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"0"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" delar"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"1"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"text","value":"\n\nloner "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"{"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"}"}]},{"type":"text","value":"\n\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"with"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"open"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"lon.csv\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"as"}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"for"}]},{"type":"text","value":" rad "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"in"}]},{"type":"text","value":" fil"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n        delar "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" rad"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"split"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"';'"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"if"}]},{"type":"text","value":" delar"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"0"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"=="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"personnr\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n            "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"continue"}]},{"type":"text","value":"\n        loner"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"text","value":"delar"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"0"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"int"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"delar"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"1"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"+"}]},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"int"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"delar"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"2"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"inkomster:\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"for"}]},{"type":"text","value":" personnr"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" person "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"in"}]},{"type":"text","value":" namn"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"items"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"if"}]},{"type":"text","value":" personnr "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"in"}]},{"type":"text","value":" loner"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n        lon "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" loner"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"text","value":"personnr"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string-interpolation"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"f\""}]},{"type":"element","tagName":"span","properties":{"className":["token","interpolation"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"{"}]},{"type":"text","value":"person"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"element","tagName":"span","properties":{"className":["token","format-spec"]},"children":[{"type":"text","value":"16"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":" "}]},{"type":"element","tagName":"span","properties":{"className":["token","interpolation"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"{"}]},{"type":"text","value":"lon"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":" euro\""}]}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"else"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string-interpolation"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"f\""}]},{"type":"element","tagName":"span","properties":{"className":["token","interpolation"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"{"}]},{"type":"text","value":"person"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"element","tagName":"span","properties":{"className":["token","format-spec"]},"children":[{"type":"text","value":"16"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":" 0 euro\""}]}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Först skapar programmet lexikonen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"namn"}]},{"type":"text","value":" och "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"loner"}]},{"type":"text","value":". De har dessa innehåll:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"sh"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-sh"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-sh"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"{"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"'080488-123X'"}]},{"type":"element","tagName":"span","properties":{"className":["token","builtin","class-name"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"'Peter Mikkola'"}]},{"type":"text","value":",\n    "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"'290274-044S'"}]},{"type":"element","tagName":"span","properties":{"className":["token","builtin","class-name"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"'Lisa Marttinen'"}]},{"type":"text","value":",\n    "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"'010479-007Z'"}]},{"type":"element","tagName":"span","properties":{"className":["token","builtin","class-name"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"'Arto Vihavainen'"}]},{"type":"text","value":",\n    "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"'010499-345K'"}]},{"type":"element","tagName":"span","properties":{"className":["token","builtin","class-name"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"'Leevi Hellas'"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"}"}]},{"type":"text","value":"\n\n"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"{"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"'080488-123X'"}]},{"type":"element","tagName":"span","properties":{"className":["token","builtin","class-name"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"3300"}]},{"type":"text","value":",\n    "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"'290274-044S'"}]},{"type":"element","tagName":"span","properties":{"className":["token","builtin","class-name"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"4350"}]},{"type":"text","value":",\n    "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"'010479-007Z'"}]},{"type":"element","tagName":"span","properties":{"className":["token","builtin","class-name"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"2500"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"}"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"´for´-loopen i slutet av programmet kombinerar arbetstagarnas namn med deras respektive löner."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Programmet kan också beakta situationer där personnumret saknas för en arbetstagare."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Kom ihåg att elementens ordning i lexikonet inte spelar någon roll, eftersom nycklarna behandlas med hjälp av hashvärden."}]},{"type":"element","tagName":"programming-exercise","properties":{"name":"Kursresultat, del 1","tmcname":"osa06-04_resultat_1"},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Programmet hanterar två CSV-filer. I den ena finns information om studerande:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"csv"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-csv"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-csv"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"studerandenr;förnamn;efternamn"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"12345678;pekka;peloton"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"12345687;jaana;javanainen"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"12345699;liisa;virtanen"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Och i den andra antalet gjorda uppgifter på veckobasis:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"csv"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-csv"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-csv"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"studerandenr;v1;v2;v3;v4;v5;v6;v7"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"12345678;4;1;1;4;5;2;4"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"12345687;3;5;3;1;5;4;6"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"12345699;10;2;2;7;10;2;2"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"I de båda CSV-filerna innehåller den första raden rubriker."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Skapa ett program som frågar efter filnamnen och därefter skriver ut antalet gjorda uppgifter för varje studerande. Exempel:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Studerande (CSV): "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"studerande1.csv"}]},{"type":"text","value":"\nUppgifter (CSV): "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"uppgifter1.csv"}]},{"type":"text","value":"\npekka peloton 21\njaana javanainen 27\nliisa virtanen 35"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Tips: Hårdkoda värdena medan du testar programmet, så behöver du inte hela tiden mata in dem på nytt:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"if"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","boolean"]},"children":[{"type":"text","value":"False"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","comment"]},"children":[{"type":"text","value":"# hit kommer vi aldrig"}]},{"type":"text","value":"\n    studerande "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"input"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Studerande (CSV): \""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n    uppgifter "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"input"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Uppgifter (CSV): \""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"else"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","comment"]},"children":[{"type":"text","value":"# de hårdkodade värdena"}]},{"type":"text","value":"\n    studerande "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"studerande1.csv\""}]},{"type":"text","value":"\n    uppgifter "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"uppgifter1.csv\""}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Den egentliga funktionaliteten är nu \"gömd\" bakom en "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"False"}]},{"type":"text","value":"-förgrening som aldrig körs."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Om vi vill testa inmatning av information (på \"normalt\" sätt), kan vi ändra "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"False"}]},{"type":"text","value":" till "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"True"}]},{"type":"text","value":":"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"if"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","boolean"]},"children":[{"type":"text","value":"True"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    studerande "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"input"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Studerande (CSV): \""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n    uppgifter "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"input"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Uppgifter (CSV): \""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"else"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","comment"]},"children":[{"type":"text","value":"# hit kommer vi aldrig!"}]},{"type":"text","value":"\n    studerande "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"studerande1.csv\""}]},{"type":"text","value":"\n    uppgifter "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"uppgifter1.csv\""}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"När koden är i skick kan if-satsen tas bort."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Obs! I dessa uppgifter ska kod inte placeras i "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"if __name__ == \"__main__\""}]},{"type":"text","value":" -blocket, om du inte ombeds göra det."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Obs! Om Visual Studio Code inte hittar filen även om namnet är korrekt skrivet, ska du följa instruktionerna ovan."}]}]},{"type":"element","tagName":"programming-exercise","properties":{"name":"Kursresultat, del 2","tmcname":"osa06-05_resultat_2"},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Vi utvidgar nu föregående uppgift så att de studerandes provpoäng också läses in från en CSV-fil. Filens struktur är följande:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"csv"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-csv"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-csv"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"studerandenr;u1;u2;u3"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"12345678;4;1;4"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"12345687;3;5;3"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"12345699;10;2;2"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Till exempel har studerande "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"12345678"}]},{"type":"text","value":" fått 4 + 1 + 4, alltså nio poäng."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Programmet ska be användaren mata in filnamnen och sedan skriva ut vitsordet för varje studerande:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Studerande (CSV): "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"studerande1.csv"}]},{"type":"text","value":"\nUppgifter (CSV): "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"uppgifter1.csv"}]},{"type":"text","value":"\nProvpoäng (CSV): "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"provpoang1.csv"}]},{"type":"text","value":"\npekka peloton 0\njaana javanainen 1\nliisa virtanen 3"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Av gjorda uppgifter får man poäng så att 10 % gjorda uppgifter ger ett poäng, ända upp till 100 % (40 uppgifter) som ger tio poäng. Poängen hanteras som heltal."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Vitsordet för kursen fås på basis av prov- och uppgiftspoängsumman:"}]},{"type":"text","value":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"},{"type":"element","tagName":"table","properties":{},"children":[{"type":"element","tagName":"thead","properties":{},"children":[{"type":"element","tagName":"tr","properties":{},"children":[{"type":"element","tagName":"th","properties":{"align":"center"},"children":[{"type":"text","value":"prov- och uppgiftspoäng tillsammans"}]},{"type":"element","tagName":"th","properties":{"align":"center"},"children":[{"type":"text","value":"vitsord"}]}]}]},{"type":"element","tagName":"tbody","properties":{},"children":[{"type":"element","tagName":"tr","properties":{},"children":[{"type":"element","tagName":"td","properties":{"align":"center"},"children":[{"type":"text","value":"0-14"}]},{"type":"element","tagName":"td","properties":{"align":"center"},"children":[{"type":"text","value":"0 (underkänt)"}]}]},{"type":"element","tagName":"tr","properties":{},"children":[{"type":"element","tagName":"td","properties":{"align":"center"},"children":[{"type":"text","value":"15-17"}]},{"type":"element","tagName":"td","properties":{"align":"center"},"children":[{"type":"text","value":"1"}]}]},{"type":"element","tagName":"tr","properties":{},"children":[{"type":"element","tagName":"td","properties":{"align":"center"},"children":[{"type":"text","value":"18-20"}]},{"type":"element","tagName":"td","properties":{"align":"center"},"children":[{"type":"text","value":"2"}]}]},{"type":"element","tagName":"tr","properties":{},"children":[{"type":"element","tagName":"td","properties":{"align":"center"},"children":[{"type":"text","value":"21-23"}]},{"type":"element","tagName":"td","properties":{"align":"center"},"children":[{"type":"text","value":"3"}]}]},{"type":"element","tagName":"tr","properties":{},"children":[{"type":"element","tagName":"td","properties":{"align":"center"},"children":[{"type":"text","value":"24-27"}]},{"type":"element","tagName":"td","properties":{"align":"center"},"children":[{"type":"text","value":"4"}]}]},{"type":"element","tagName":"tr","properties":{},"children":[{"type":"element","tagName":"td","properties":{"align":"center"},"children":[{"type":"text","value":"28-"}]},{"type":"element","tagName":"td","properties":{"align":"center"},"children":[{"type":"text","value":"5"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Obs! I dessa uppgifter ska kod inte placeras i "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"if __name__ == \"__main__\""}]},{"type":"text","value":" -blocket, om du inte ombeds göra det."}]}]},{"type":"element","tagName":"programming-exercise","properties":{"name":"Kursresultat, del 3","tmcname":"osa06-06_resultat_3"},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"I den här uppgiften formaterar vi utskriften från den föregående uppgiften:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Studerande (CSV): "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"studerande1.csv"}]},{"type":"text","value":"\nUppgifter (CSV): "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"uppgifter1.csv"}]},{"type":"text","value":"\nProvpoäng (CSV): "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"provpoang1.csv"}]}]},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"text","value":"namn                          uppg_ant  uppg_p    prov_p    tot_p     vitsord\npekka peloton                 21        5         9         14        0\njaana javanainen              27        6         11        17        1\nliisa virtanen                35        8         14        22        3\n"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"På varje rad ska alltså en studerandes namn, antal gjorda uppgifter, uppgiftspoäng, provpoäng, totalpoäng samt vitsord skrivas ut. Det här görs \"prydligt\" så att namnkolumnen är 30 tecken bred och de övriga kolumnernas bredd är 10."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Det lönar sig att utnyttja f-strängar (modul fyra)."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Lägg märke till att utskriften av strängar och tal fungerar med lite olik logik i f-strängar:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"ord"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"python\""}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string-interpolation"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"f\""}]},{"type":"element","tagName":"span","properties":{"className":["token","interpolation"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"{"}]},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"ord"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"element","tagName":"span","properties":{"className":["token","format-spec"]},"children":[{"type":"text","value":"10"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"fortsätter\""}]}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string-interpolation"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"f\""}]},{"type":"element","tagName":"span","properties":{"className":["token","interpolation"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"{"}]},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"ord"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"element","tagName":"span","properties":{"className":["token","format-spec"]},"children":[{"type":"text","value":">10"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"fortsätter\""}]}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"pre","properties":{},"children":[{"type":"text","value":"python    fortsätter\n    pythonfortsätter\n"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"I vanliga fall är strängar vänsterjusterade, men med tecknet "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":">"}]},{"type":"text","value":" kan man justera strängen till höger."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"När tal skrivs ut är logiken den motsatta:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"text","value":"tal "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"42"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string-interpolation"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"f\""}]},{"type":"element","tagName":"span","properties":{"className":["token","interpolation"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"{"}]},{"type":"text","value":"tal"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"element","tagName":"span","properties":{"className":["token","format-spec"]},"children":[{"type":"text","value":"10"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"fortsätter\""}]}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string-interpolation"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"f\""}]},{"type":"element","tagName":"span","properties":{"className":["token","interpolation"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"{"}]},{"type":"text","value":"tal"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"element","tagName":"span","properties":{"className":["token","format-spec"]},"children":[{"type":"text","value":"<10"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"fortsätter\""}]}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"pre","properties":{},"children":[{"type":"text","value":"        42fortsätter\n42        fortsätter\n"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Tal är alltså normalt högerjusterade men med tecknet "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"<"}]},{"type":"text","value":" kan vi justera talet till vänster."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Obs! I dessa uppgifter ska kod inte placeras i "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"if __name__ == \"__main__\""}]},{"type":"text","value":" -blocket, om du inte ombeds göra det."}]}]},{"type":"element","tagName":"programming-exercise","properties":{"name":"Spell checker","tmcname":"osa06-07_spellcheck"},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Skapa ett program som ber användaren mata in text på engelska. Programmet ska utföra en språkkontroll och skriva ut texten så att felstavade ord är markerade med asterisker. Exempel:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Write text: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"We use ptython to make a spell checker"}]}]},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"text","value":"We use *ptython* to make a spell checker\n"}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Write text: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"This is acually a good and usefull program"}]}]},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"text","value":"This is *acually* good and *usefull* program\n"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Bokstavsstorleken ska inte påverka programmets funktionalitet."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Programmet använder sig av filen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"wordlist.txt"}]},{"type":"text","value":" för att känna igen om orden är korrekt skrivna."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Obs! I dessa uppgifter ska kod inte placeras i "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"if __name__ == \"__main__\""}]},{"type":"text","value":" -blocket, om du inte ombeds göra det."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Obs! Om Visual Studio Code inte hittar filen även om namnet är korrekt skrivet, ska du följa instruktionerna ovan."}]}]},{"type":"element","tagName":"programming-exercise","properties":{"name":"Receptsök","tmcname":"osa06-08_receptsok"},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"I den här uppgiften skapar vi ett program som låter användaren söka efter ett recept på basis av dess namn, tillagningstid eller ingrediens. Programmet har tillgång till en samling recept som finns lagrade i en fil."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Varje recept består av tre eller fler rader i receptfilen. Den första raden innehåller receptets namn, den andra tillagningstiden (heltal) och tredje raden framåt ingredienser. Ingredienslistan avslutas med en tom rad (exkl. det sista receptet). Filen kan innehålla flera recept. Se exemplet nedan:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"sh"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-sh"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-sh"]},"children":[{"type":"text","value":"Plättdeg\n"},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"15"}]},{"type":"text","value":"\nmjölk\nägg\nmjöl\nsocker\nsalt\nsmör\n\nKöttbullar\n"},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"45"}]},{"type":"text","value":"\nmalet kött\nägg\nskorpmjöl\n\nTofurullar\n"},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"30"}]},{"type":"text","value":"\ntofu\nris\nvatten\nmorot\ngurka\navocado\nwasabi\n\nBulldeg\n"},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"60"}]},{"type":"text","value":"\nmjölk\njäst\nägg\nsalt\nsocker\nkardemumma\nsmör"}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Tips: I den här uppgiften kan det löna sig att läsa in filens rader i en lista och sedan hantera listan enligt den här uppgiftens specifikationer."}]},{"type":"element","tagName":"h4","properties":{"id":"sokning-med-receptnamn","style":"position:relative;"},"children":[{"type":"text","value":"Sökning med receptnamn"},{"type":"element","tagName":"a","properties":{"href":"#sokning-med-receptnamn","ariaLabel":"sokning med receptnamn permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Skapa funktionen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"namnsok(fil: str, ord: str)"}]},{"type":"text","value":" som söker efter recept vars namn innehåller den sträng som ges som andra argument. Funktionen ska returnera en lista med namnen på de matchande recepten."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Exempel:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"text","value":"hittade "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" namnsok"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"recept1.txt\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"bull\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"for"}]},{"type":"text","value":" recept "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"in"}]},{"type":"text","value":" hittade"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"recept"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Köttbullar\nBulldeg"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Märk att bokstavsstorleken inte har någon skillnad. Med ordet "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"bull"}]},{"type":"text","value":" hittar vi också "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"Bulldeg"}]},{"type":"text","value":"."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Obs! Om Visual Studio Code inte hittar filen även om namnet är korrekt skrivet, ska du följa instruktionerna ovan."}]},{"type":"element","tagName":"h4","properties":{"id":"sokning-med-tillagningstid","style":"position:relative;"},"children":[{"type":"text","value":"Sökning med tillagningstid"},{"type":"element","tagName":"a","properties":{"href":"#sokning-med-tillagningstid","ariaLabel":"sokning med tillagningstid permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Skapa funktionen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"tidssok(fil: str, tid: int)"}]},{"type":"text","value":" som söker efter de recept vars tillagningstid är högst det som angetts som argument."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Matchande recept returneras som en lista och nu ska också tillagningstiden inkluderas. Exempel:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"text","value":"hittade "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" tidssok"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"recept1.txt\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"20"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"for"}]},{"type":"text","value":" recept "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"in"}]},{"type":"text","value":" hittade"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"recept"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Plättdeg, tillagningstid 15 min"}]}]},{"type":"element","tagName":"h4","properties":{"id":"sokning-med-ingrediens","style":"position:relative;"},"children":[{"type":"text","value":"Sökning med ingrediens"},{"type":"element","tagName":"a","properties":{"href":"#sokning-med-ingrediens","ariaLabel":"sokning med ingrediens permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Varning!! Den här delen är mycket svårare än de tidigare delarna. Om du har svårigheter, lönar det sig att göra de övriga delarna först och sedan återkomma hit. Märk att du också kan skicka enskilda delar till servern."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Skapa funktionen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"ingredienssok(fil: str, ingrediens: str)"}]},{"type":"text","value":" som ska hitta recepten med den givna ingrediensen."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Matchande recept ska returneras som en lista. Exempel:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"text","value":"hittade "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" ingredienssok"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"recept1.txt\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"mjölk\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"for"}]},{"type":"text","value":" recept "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"in"}]},{"type":"text","value":" hittade"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"recept"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Plättdeg, tillagningstid 15 min\nBulldeg, tillagningstid 60 min"}]}]}]},{"type":"element","tagName":"programming-exercise","properties":{"name":"Stadscyklar","tmcname":"osa06-09_stadscyklar"},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"I den här uppgiften skapar vi några funktioner, med vilka vi kan inspektera en fil med information om "},{"type":"element","tagName":"a","properties":{"href":"https://www.hsl.fi/sv/stadscyklar","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"stadscyklars"}]},{"type":"text","value":" parkeringsstationer."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Så här ser filerna ut:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"csv"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-csv"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-csv"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"Longitude;Latitude;FID;name;total_slot;operative;id"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"24.950292890004903;60.155444793742276;1;Kaivopuisto;30;Yes;001"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"24.956347471358754;60.160959093887129;2;Laivasillankatu;12;Yes;002"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","value"]},"children":[{"type":"text","value":"24.944927399779715;60.158189199971673;3;Kapteeninpuistikko;16;Yes;003"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"För varje parkeringsstation finns det en skild rad i filen: här specificeras koordinater, namnet på stationen m.m."}]},{"type":"element","tagName":"h4","properties":{"id":"avstand-mellan-stationer","style":"position:relative;"},"children":[{"type":"text","value":"Avstånd mellan stationer"},{"type":"element","tagName":"a","properties":{"href":"#avstand-mellan-stationer","ariaLabel":"avstand mellan stationer permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Skapa funktionen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"stationsinfo(fil: str)"}]},{"type":"text","value":" som läser in stationsinfon och returnerar den som ett lexikon:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"pre","properties":{},"children":[{"type":"text","value":"{\n  \"Kaivopuisto: (24.950292890004903, 60.155444793742276),\n  \"Laivasillankatu: (24.956347471358754, 60.160959093887129),\n  \"Kapteeninpuistikko: (24.944927399779715, 60.158189199971673)\n}\n"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Som nyckel används alltså stationens namn, medan longituden (1) och latituden (2) lagras som värden i form av en tupel."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Skapa nu funktionen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"avstand(stationer: dict, station1: str, station2: str)"}]},{"type":"text","value":" som returnerar avståndet mellan de två givna stationerna."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Följande formel används för att beräkna avståndet:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","comment"]},"children":[{"type":"text","value":"# det här behövs för att funktionen sqrt ska fungera"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"import"}]},{"type":"text","value":" math\n\nx_km "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"longitude1 "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"-"}]},{"type":"text","value":" longitude2"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"*"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"55.26"}]},{"type":"text","value":"\ny_km "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"latitude1 "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"-"}]},{"type":"text","value":" latitude2"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"*"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"111.2"}]},{"type":"text","value":"\navstand "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" math"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"sqrt"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"x_km"},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"**"}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"2"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"+"}]},{"type":"text","value":" y_km"},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"**"}]},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"2"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Exempel:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"text","value":"stationer "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" stationsinfo"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"'stations1.csv'"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\ne "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" avstand"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"stationer"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Designmuseo\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Hietalahdentori\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"e"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\ne "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" avstand"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"stationer"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Viiskulma\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Kaivopuisto\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"e"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"0.9032737292463177\n0.7753594392019532"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Obs! Om Visual Studio Code inte hittar filen även om namnet är korrekt skrivet, ska du följa instruktionerna ovan."}]},{"type":"element","tagName":"h4","properties":{"id":"langsta-avstand","style":"position:relative;"},"children":[{"type":"text","value":"Längsta avstånd"},{"type":"element","tagName":"a","properties":{"href":"#langsta-avstand","ariaLabel":"langsta avstand permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Skapa funktionen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"langsta_avstand(stationer: dict)"}]},{"type":"text","value":" som ska ta reda på vilka stationer som är längst ifrån varandra. Funktionen ska returnera en tupel vars två första värden innehåller stationernas namn och det tredje värdet det aktuella avståndet."}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"text","value":"stationer "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" stationsinfo"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"'stations1.csv'"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\nstation1"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" station2"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" suurin "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" langsta_avstand"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"stationer"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"station1"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" station2"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" suurin"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Laivasillankatu Hietalahdentori 1.478708873076181"}]}]}]},{"type":"element","tagName":"div","properties":{},"children":[{"type":"element","tagName":"quiz","properties":{"id":"ba06e74d-f74c-5964-a88d-a0dafcee3a04"},"children":[]}]}]},"html":"<div><text-box variant='learningObjectives' name='Lärandemål'><p>Efter den här delen</p><ul>\n<li>kan du läsa in en fil med Python</li>\n<li>vet du vad en textfil och en CSV-fil är</li>\n<li>kan du behandla innehållet i en CSV-fil i dina program.</li>\n</ul></text-box><!--vastaava teksti löytyy osioista 3-1, 5-1 ja 6-1, tsekkaa kaikki jos muokkaat tätä--><text-box variant='hint' name='Om uppgifterna i den här kursen'><p>Att bli en skicklig programmerare kräver mycket övning. Man måste utveckla en problemlösningsförmåga och ha en förmåga att intuition komma fram till korrekta lösningar. Därför finns det massor av övningar av olika typer i den här kursen. Vissa övningar är enklare och baserar sig mera eller mindre direkt på materialet medan andra uppgifter är svårare och kräver tillämpande av kunskaper som man lärt sig under kursen.</p><p>En del uppgifter kan kännas svåra, men det är inte något att oroa sig över. Ingen av uppgifterna är obligatorisk och du behöver bara 25 % av poängen från varje modul för att klara den här kursen. Du kan läsa mera på kursens bedömningssida.</p><p>Uppgifterna är inte i svårighetsordning. Varje del introducerar vanligtvis några nya saker inom programmering och i samband finns relaterade uppgifter – både enklare och svårare. Om du stöter på en uppgift som känns oöverkomlig ska du fortsätta till nästa uppgift. Du kan alltid senare återkomma till tidigare uppgifter.</p><p>En uppgift som känns för svår just nu kommer sannolikt att vara ganska enkel om en månad.</p></text-box><p>När man programmerar kan man ibland behöva hantera data som finns lagrad i filer. Datorprogram kan läsa data från filer och skriva data till filer. Också stora mängder data i filer kan enkelt behandlas automatiskt.</p><p>Under den här kursen kommer vi endast att arbeta med textfiler. De här filerna består av rader med text. Till exempel är kodeditorn Visual Studio Code kompatibel med textfiler. Obs! Även om ordbehandlingsprogram som Microsoft Word ofta används med filer som innehåller text, är Word-dokument inte textfiler. Dokumenten innehåller också annan information om till exempel textformat, vilket gör det mer komplicerat att behandla filerna i Python-program.</p><h2 id=\"att-lasa-data-fran-en-fil\" style=\"position:relative;\">Att läsa data från en fil<a href=\"#att-lasa-data-fran-en-fil\" aria-label=\"att lasa data fran en fil permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2><p>Vi börjar arbeta med textfilen <code class=\"language-text\">exempel.txt</code> som innehållet följande:</p><sample-data><p>Hej alla!\nVår exempelfil består av tre rader.\nDet här är den sista raden.</p></sample-data><p>Ett enkelt sätt att använda filer i Python är med <code class=\"language-text\">with</code>-satsen. Den inledande raden öppnar filen följt av blocket där vi kan komma åt filen. Efter blocket stängs filen automatiskt och då kan den inte mera användas i programmet innan man öppnar den igen.</p><p>Den här koden öppnar alltså filen, läser dess innehåll och skriver ut det. Därefter stängs filen:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"exempel.txt\"</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> fil<span class=\"token punctuation\">:</span>\n    innehall <span class=\"token operator\">=</span> fil<span class=\"token punctuation\">.</span>read<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>innehall<span class=\"token punctuation\">)</span></code></pre></div><sample-output><p>Hej alla!\nVår exempelfil består av tre rader.\nDet här är den sista raden.</p></sample-output><p>Variabeln <code class=\"language-text\">fil</code> är en så kallad file handle (\"filhandtag\"). Via variabeln kan vi komma åt filen så länge den är öppen. Här använde vi metoden <code class=\"language-text\">read</code> som returnerar filens innehåll som en enda sträng. I det här fallet skulle strängen se ut så här:</p><div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">\"Hej alla!\\nVår exempelfil består av tre rader.\\nDet här är den sista raden.\"</code></pre></div><p><code class=\"language-text\">\\n</code> motsvarar radbrytningarna i texten.</p><h2 id=\"ga-igenom-innehallet-i-en-fil\" style=\"position:relative;\">Gå igenom innehållet i en fil<a href=\"#ga-igenom-innehallet-i-en-fil\" aria-label=\"ga igenom innehallet i en fil permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2><p>Metoden <code class=\"language-text\">read</code> fungerar bra för att skriva ut hela innehållet i en fil, men ofta vill vi gå igenom innehållet rad för rad.</p><p>Man kan tänka att en textfil är en lista av strängar, där varje sträng finns på sin egen rad i filen. Vi kan som vanligt gå igenom denna lista med en for-loop.</p><p>Följande exempel läser in vår exempelfil med hjälp av en for-loop, tar bort radbrytningarna, räknar antalet rader och skriver ut varje rad tillsammans med sitt radnummer. Programmet håller också koll på radernas längder:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"exempel.txt\"</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> fil<span class=\"token punctuation\">:</span>\n    raknare <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n    totallangd <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n\n    <span class=\"token keyword\">for</span> rad <span class=\"token keyword\">in</span> fil<span class=\"token punctuation\">:</span>\n        rad <span class=\"token operator\">=</span> rad<span class=\"token punctuation\">.</span>replace<span class=\"token punctuation\">(</span><span class=\"token string\">\"\\n\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span>\n        raknare <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Rad\"</span><span class=\"token punctuation\">,</span> raknare<span class=\"token punctuation\">,</span> rad<span class=\"token punctuation\">)</span>\n        langd <span class=\"token operator\">=</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>rad<span class=\"token punctuation\">)</span>\n        totallangd <span class=\"token operator\">+=</span> langd\n\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Radernas totallängd:\"</span><span class=\"token punctuation\">,</span> totallangd<span class=\"token punctuation\">)</span></code></pre></div><sample-output><p>Rad 1 Hej alla!\nRad 2 Vår exempelfil består av tre rader.\nRad 3 Det här är den sista raden.\nRadernas totallängd: 63</p></sample-output><p>Det finns en radbrytning <code class=\"language-text\">\\n</code> i slutet av varje rad i filen, men <code class=\"language-text\">print</code>-funktionen lägger också automatiskt till en rad i slutet av utskriften. Det finns inga extra radbyten i utskriften ovan eftersom radbrytningarna avlägsnats med hjälp av <code class=\"language-text\">replace</code>-metoden. Metoden ersätter alla radbrytningstecken med en tom sträng. I och med detta räknas radernas längder också korrekt.</p><programming-exercise name='Största siffran' tmcname='osa06-01_storsta_siffran'><p>I filen <code class=\"language-text\">siffror.txt</code> finns siffror listade på olika rader enligt exemplet nedan:</p><div class=\"gatsby-highlight\" data-language=\"sh\"><pre class=\"language-sh\"><code class=\"language-sh\"><span class=\"token number\">2</span>\n<span class=\"token number\">45</span>\n<span class=\"token number\">108</span>\n<span class=\"token number\">3</span>\n<span class=\"token parameter variable\">-10</span>\n<span class=\"token number\">1100</span>\no.s.v. <span class=\"token punctuation\">..</span>.</code></pre></div><p>Skapa funktionen <code class=\"language-text\">storst</code> som ska läsa filen och returnera den största siffran som hittas.</p><p>Observera att filnamnet alltid är <code class=\"language-text\">siffror.txt</code> och att funktionen inte har några parametrar.</p><p>Obs! Om Visual Studio Code inte hittar din fil även om namnet är korrekt skrivet ska du följa instruktionerna nedan.</p></programming-exercise><h2 id=\"om-visual-studio-code-inte-hittar-min-fil\" style=\"position:relative;\">Om Visual Studio Code inte hittar min fil?<a href=\"#om-visual-studio-code-inte-hittar-min-fil\" aria-label=\"om visual studio code inte hittar min fil permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2><p>När du kör din kod är det möjligt att Visual Studio Code meddelar att filen inte finns – även efter att du kollat att filen finns och att namnet är korrekt skrivet. Att ändra på följande inställning kan lösa problemet:</p><ul>\n<li>öppna inställningarna från menyraden: File -> Preferences -> Settings</li>\n<li>sök efter den inställning som ska ändras med sökordet \"executeinfile\"</li>\n<li>välj fliken Workspace</li>\n<li>bocka i valet under Python -> Terminal -> Execute in file dir.</li>\n</ul><p>Inställningsfönstret borde se ut ungefär så här:</p><span class=\"gatsby-resp-image-wrapper\" style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 920px; margin-bottom: 1rem;\">\n      <a class=\"gatsby-resp-image-link\" href=\"/static/6e5d89f76dfd47af6f9ea67b097452e8/e405b/6_1_1.png\" style=\"display: block\" target=\"_blank\" rel=\"noopener\">\n    <span class=\"gatsby-resp-image-background-image\" style=\"padding-bottom: 16.521739130434785%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAIAAAAcOLh5AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAZElEQVQI11XOQQqAMAwEwP5DknRNkNIilaInvXn3/8+RKIoOOe4uCQAQHYDWWq01/xS/UnLO07rP+9HbEEU8DQT+SCmZmZqlB77GRdvGUCa687+yiDAzVH3i8hb9MyZQJ0xv/gSEjBk5LU20dgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"></span>\n  <picture>\n          <source srcset=\"/static/6e5d89f76dfd47af6f9ea67b097452e8/a0b58/6_1_1.webp 230w,\n/static/6e5d89f76dfd47af6f9ea67b097452e8/bc10c/6_1_1.webp 460w,\n/static/6e5d89f76dfd47af6f9ea67b097452e8/966d8/6_1_1.webp 920w,\n/static/6e5d89f76dfd47af6f9ea67b097452e8/445df/6_1_1.webp 1380w,\n/static/6e5d89f76dfd47af6f9ea67b097452e8/9b2c8/6_1_1.webp 1566w\" sizes=\"(max-width: 920px) 100vw, 920px\" type=\"image/webp\">\n          <source srcset=\"/static/6e5d89f76dfd47af6f9ea67b097452e8/81c8e/6_1_1.png 230w,\n/static/6e5d89f76dfd47af6f9ea67b097452e8/08a84/6_1_1.png 460w,\n/static/6e5d89f76dfd47af6f9ea67b097452e8/c0255/6_1_1.png 920w,\n/static/6e5d89f76dfd47af6f9ea67b097452e8/b1001/6_1_1.png 1380w,\n/static/6e5d89f76dfd47af6f9ea67b097452e8/e405b/6_1_1.png 1566w\" sizes=\"(max-width: 920px) 100vw, 920px\" type=\"image/png\">\n          <img class=\"gatsby-resp-image-image\" src=\"/static/6e5d89f76dfd47af6f9ea67b097452e8/c0255/6_1_1.png\" alt=\"6 1 1\" title=\"6 1 1\" loading=\"lazy\" decoding=\"async\" style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\">\n        </picture>\n  </a>\n    </span><p>Om det här inte fungerar kan du kopiera filen i src-mappen…</p><span class=\"gatsby-resp-image-wrapper\" style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 920px; margin-bottom: 1rem;\">\n      <a class=\"gatsby-resp-image-link\" href=\"/static/a57483e6084d39a596ee24c41a42de70/6297e/6_1_2.png\" style=\"display: block\" target=\"_blank\" rel=\"noopener\">\n    <span class=\"gatsby-resp-image-background-image\" style=\"padding-bottom: 22.17391304347826%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAIAAAABPYjBAAAACXBIWXMAABYlAAAWJQFJUiTwAAAApklEQVQI123N0QqCQBAFUH/CUVlnt3JnVtcSyx1XikKCHur/PyhQih463KcLl5s87rcQRcLoa98037TO1czsFtba6p/kFESm8+U6HyTuT4FcY11Dtd9WVH4gol7keQ4Aa4OIySBjfxwkyKuLc90P5ImYiHeWtdmYRVmWSqmiKLIsAwCllDFGa50EiW3Xj3F6tjKQr5YlE28tozbrISKmaQoAiPg7fgOYxyLFEKvBSAAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"></span>\n  <picture>\n          <source srcset=\"/static/a57483e6084d39a596ee24c41a42de70/a0b58/6_1_2.webp 230w,\n/static/a57483e6084d39a596ee24c41a42de70/bc10c/6_1_2.webp 460w,\n/static/a57483e6084d39a596ee24c41a42de70/966d8/6_1_2.webp 920w,\n/static/a57483e6084d39a596ee24c41a42de70/445df/6_1_2.webp 1380w,\n/static/a57483e6084d39a596ee24c41a42de70/78de1/6_1_2.webp 1840w,\n/static/a57483e6084d39a596ee24c41a42de70/4b7c9/6_1_2.webp 2044w\" sizes=\"(max-width: 920px) 100vw, 920px\" type=\"image/webp\">\n          <source srcset=\"/static/a57483e6084d39a596ee24c41a42de70/81c8e/6_1_2.png 230w,\n/static/a57483e6084d39a596ee24c41a42de70/08a84/6_1_2.png 460w,\n/static/a57483e6084d39a596ee24c41a42de70/c0255/6_1_2.png 920w,\n/static/a57483e6084d39a596ee24c41a42de70/b1001/6_1_2.png 1380w,\n/static/a57483e6084d39a596ee24c41a42de70/161ec/6_1_2.png 1840w,\n/static/a57483e6084d39a596ee24c41a42de70/6297e/6_1_2.png 2044w\" sizes=\"(max-width: 920px) 100vw, 920px\" type=\"image/png\">\n          <img class=\"gatsby-resp-image-image\" src=\"/static/a57483e6084d39a596ee24c41a42de70/c0255/6_1_2.png\" alt=\"6 1 2\" title=\"6 1 2\" loading=\"lazy\" decoding=\"async\" style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\">\n        </picture>\n  </a>\n    </span><p>…direkt till roten av uppgiftsmappen:</p><span class=\"gatsby-resp-image-wrapper\" style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 920px; margin-bottom: 1rem;\">\n      <a class=\"gatsby-resp-image-link\" href=\"/static/bc83b27162a67ce98f825821dc304a7e/6297e/6_1_3.png\" style=\"display: block\" target=\"_blank\" rel=\"noopener\">\n    <span class=\"gatsby-resp-image-background-image\" style=\"padding-bottom: 26.956521739130434%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAIAAADKYVtkAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAt0lEQVQY023P3Q6CMAwFYN6DjqjtNta1MxlDdILGxBvf/4UMGO/4cm5Pf5pa79N0m+eHSBJJMSqzMKv3vaqklPq+995ba51zdkNkPR2COzallJzL8/lalketc86FWWJUIsfMqtq2bdd1sDF/AOaE2AzDUIYyjmPOWUQRiWidjYgxRlU1xnQ7DBGtmyWdy2ViZqL1ul8QSSQyMwDsVI1BxOZ6md65fsYlyTms3/6iznnd7JYBIITwBcyRLmVWTxqEAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"></span>\n  <picture>\n          <source srcset=\"/static/bc83b27162a67ce98f825821dc304a7e/a0b58/6_1_3.webp 230w,\n/static/bc83b27162a67ce98f825821dc304a7e/bc10c/6_1_3.webp 460w,\n/static/bc83b27162a67ce98f825821dc304a7e/966d8/6_1_3.webp 920w,\n/static/bc83b27162a67ce98f825821dc304a7e/445df/6_1_3.webp 1380w,\n/static/bc83b27162a67ce98f825821dc304a7e/78de1/6_1_3.webp 1840w,\n/static/bc83b27162a67ce98f825821dc304a7e/4b7c9/6_1_3.webp 2044w\" sizes=\"(max-width: 920px) 100vw, 920px\" type=\"image/webp\">\n          <source srcset=\"/static/bc83b27162a67ce98f825821dc304a7e/81c8e/6_1_3.png 230w,\n/static/bc83b27162a67ce98f825821dc304a7e/08a84/6_1_3.png 460w,\n/static/bc83b27162a67ce98f825821dc304a7e/c0255/6_1_3.png 920w,\n/static/bc83b27162a67ce98f825821dc304a7e/b1001/6_1_3.png 1380w,\n/static/bc83b27162a67ce98f825821dc304a7e/161ec/6_1_3.png 1840w,\n/static/bc83b27162a67ce98f825821dc304a7e/6297e/6_1_3.png 2044w\" sizes=\"(max-width: 920px) 100vw, 920px\" type=\"image/png\">\n          <img class=\"gatsby-resp-image-image\" src=\"/static/bc83b27162a67ce98f825821dc304a7e/c0255/6_1_3.png\" alt=\"6 1 3\" title=\"6 1 3\" loading=\"lazy\" decoding=\"async\" style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\">\n        </picture>\n  </a>\n    </span><h2 id=\"att-debugga-kod-som-behandlar-filer\" style=\"position:relative;\">Att debugga kod som behandlar filer<a href=\"#att-debugga-kod-som-behandlar-filer\" aria-label=\"att debugga kod som behandlar filer permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2><p>När man använder Visual Studio Codes debuggare med program som behandlar filer, kan man stöta på följande felmeddelande:</p><span class=\"gatsby-resp-image-wrapper\" style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 920px; margin-bottom: 1rem;\">\n      <a class=\"gatsby-resp-image-link\" href=\"/static/b0c7745f7a4cc9c485a52d483e0aa290/eff3b/6_1_4.png\" style=\"display: block\" target=\"_blank\" rel=\"noopener\">\n    <span class=\"gatsby-resp-image-background-image\" style=\"padding-bottom: 31.304347826086953%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAIAAABM9SnKAAAACXBIWXMAABYlAAAWJQFJUiTwAAABMklEQVQY003PyU7CQACA4d7EBWQpLdDS6XSWzkw702VIIBESgyaYWBZRE60QUIzv/wguB0PyX7/Db2itx5PJcDiKYym4ICFXaSKkZFKGMhUyESKmlAEY+BD5EAGIMA5iThhjRpZlOhsooTjlmFAKgaBgPMSjHOS8kwtHx55itgqt4xIllEqNPM85F4xxSmhAyAziDabbiG8F28voBcGnvrNot+ZmY2E252azMBtFvSZ7XQADQ19dI4QJoX+Y3vXhgcbvcbYL5Z6pHYlKQEpAS0DWrd6yZi3r1uK0Hpm26wND6xxj8o9nrv8Zxl/p4CCSQ5R8cFV6aAPwm4eeLWfd7Dy2OqvzRtS2XQB+n4/x1IOvNHrw8dIBSwcUtlPYzsqF9+3e7dnltFKdVqo3JxfC7v7gb6ThPL16POKXAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"></span>\n  <picture>\n          <source srcset=\"/static/b0c7745f7a4cc9c485a52d483e0aa290/a0b58/6_1_4.webp 230w,\n/static/b0c7745f7a4cc9c485a52d483e0aa290/bc10c/6_1_4.webp 460w,\n/static/b0c7745f7a4cc9c485a52d483e0aa290/966d8/6_1_4.webp 920w,\n/static/b0c7745f7a4cc9c485a52d483e0aa290/445df/6_1_4.webp 1380w,\n/static/b0c7745f7a4cc9c485a52d483e0aa290/78de1/6_1_4.webp 1840w,\n/static/b0c7745f7a4cc9c485a52d483e0aa290/5340a/6_1_4.webp 2072w\" sizes=\"(max-width: 920px) 100vw, 920px\" type=\"image/webp\">\n          <source srcset=\"/static/b0c7745f7a4cc9c485a52d483e0aa290/81c8e/6_1_4.png 230w,\n/static/b0c7745f7a4cc9c485a52d483e0aa290/08a84/6_1_4.png 460w,\n/static/b0c7745f7a4cc9c485a52d483e0aa290/c0255/6_1_4.png 920w,\n/static/b0c7745f7a4cc9c485a52d483e0aa290/b1001/6_1_4.png 1380w,\n/static/b0c7745f7a4cc9c485a52d483e0aa290/161ec/6_1_4.png 1840w,\n/static/b0c7745f7a4cc9c485a52d483e0aa290/eff3b/6_1_4.png 2072w\" sizes=\"(max-width: 920px) 100vw, 920px\" type=\"image/png\">\n          <img class=\"gatsby-resp-image-image\" src=\"/static/b0c7745f7a4cc9c485a52d483e0aa290/c0255/6_1_4.png\" alt=\"6 1 4\" title=\"6 1 4\" loading=\"lazy\" decoding=\"async\" style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\">\n        </picture>\n  </a>\n    </span><p>Orsaken är att debuggaren alltid söker efter filer i roten av uppgiftsmappen. Inställningen Execute in file dir som nämndes ovan har ingen påverkan här. Den enklaste lösningen är att kopiera filen till rotmappen.</p><p>Du kan också behöva starta om Visual Studio Code efter att du har kopierat alla filer som behövs.</p><h2 id=\"lasa-csv-filer\" style=\"position:relative;\">Läsa CSV-filer<a href=\"#lasa-csv-filer\" aria-label=\"lasa csv filer permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2><p>En CSV-fil (kommaseparerade värden) är en textfil som innehåller data som separerats med ett visst tecken. Det här tecknet är vanligtvis komma (<code class=\"language-text\">,</code>) eller semikolon (<code class=\"language-text\">;</code>), men vilket som helst tecken är i princip möjligt.</p><p>CSV-filer är ett vanligt sätt att lagra olika typer av data. Flera databaser och kalkylprogram – exempelvis Excel – kan importera och exportera data i CSV-format. Det här möjliggör enkel dataöverföring mellan olika system.</p><p>Vi har redan bekantat oss med hur man kan gå igenom rader i en fil med en for-loop, men hur kan vi separera fält på en och samma rad? I Python kan vi använda strängmetoden <code class=\"language-text\">split</code> för detta. Metoden tar separatortecknet eller -tecknen som ett strängargument och returnerar innehållet i den ursprungliga strängen som en lista av strängar – separerade vid separatortecknen.</p><p>Följande exempel visar hur det fungerar:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">text <span class=\"token operator\">=</span> <span class=\"token string\">\"apa,banan,cembalo\"</span>\nordlista <span class=\"token operator\">=</span> text<span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token string\">\",\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">for</span> <span class=\"token builtin\">ord</span> <span class=\"token keyword\">in</span> ordlista<span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">ord</span><span class=\"token punctuation\">)</span></code></pre></div><sample-output><p>apa\nbanan\ncembalo</p></sample-output><p>Låt oss säga att vi har filen <code class=\"language-text\">vitsord.csv</code>, som innehåller namn på elever samt vitsord de fått i olika kurser. Varje rad har data som tillhör en studerande och olika data separeras med semikolon.</p><sample-data><p>Peter;5;4;5;3;4;5;5;4;2;4\nPauline;3;4;2;4;4;2;3;1;3;3\nPia;4;5;5;4;5;5;4;5;4;4</p></sample-data><p>Följande program går igenom filen rad för rad, delar upp raderna i delar och skriver ut elevernas namn och vitsord:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"vitsord.csv\"</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> fil<span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">for</span> rad <span class=\"token keyword\">in</span> fil<span class=\"token punctuation\">:</span>\n        rad <span class=\"token operator\">=</span> rad<span class=\"token punctuation\">.</span>replace<span class=\"token punctuation\">(</span><span class=\"token string\">\"\\n\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span>\n        delar <span class=\"token operator\">=</span> rad<span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token string\">\";\"</span><span class=\"token punctuation\">)</span>\n        namn <span class=\"token operator\">=</span> delar<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\n        vitsord <span class=\"token operator\">=</span> delar<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">]</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Namn:\"</span><span class=\"token punctuation\">,</span> namn<span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Vitsord:\"</span><span class=\"token punctuation\">,</span> vitsord<span class=\"token punctuation\">)</span></code></pre></div><sample-output><p>Namn: Peter\nVitsord: ['5', '4', '5', '3', '4', '5', '5', '4', '2', '4']\nNamn: Pauline\nVitsord: ['3', '4', '2', '4', '4', '2', '3', '1', '3', '3']\nNamn: Pia\nVitsord: ['4', '5', '5', '4', '5', '5', '4', '5', '4', '4']</p></sample-output><programming-exercise name='Fruktaffär' tmcname='osa06-02_fruktaffar'><p>I filen <code class=\"language-text\">frukter.csv</code> finns frukter med deras pris enligt exemplet nedan:</p><div class=\"gatsby-highlight\" data-language=\"sh\"><pre class=\"language-sh\"><code class=\"language-sh\">banan<span class=\"token punctuation\">;</span><span class=\"token number\">6.50</span>\näpple<span class=\"token punctuation\">;</span><span class=\"token number\">4.95</span>\napelsin<span class=\"token punctuation\">;</span><span class=\"token number\">8.0</span>\no.s.v. <span class=\"token punctuation\">..</span>.</code></pre></div><p>Skapa funktionen <code class=\"language-text\">las_frukter</code> som ska läsa filen och skapa ett lexikon där nyckeln är fruktens namn och värdet fruktens pris. Priset ska vara av typen <code class=\"language-text\">float</code>.</p><p>Observera att filnamnet alltid är <code class=\"language-text\">frukter.csv</code> och att funktionen inga har några parametrar.</p><p>Funktionen ska till slut returnera lexikonet.</p><p>Obs! Om Visual Studio Code inte hittar filen även om namnet är korrekt skrivet, följ instruktionerna ovan.</p></programming-exercise><programming-exercise name='Matris' tmcname='osa06-03_matris'><p>I filen <code class=\"language-text\">matris.txt</code> finns en matris enligt exemplet nedan:</p><div class=\"gatsby-highlight\" data-language=\"sh\"><pre class=\"language-sh\"><code class=\"language-sh\"><span class=\"token number\">1,0</span>,2,8,2,1,3,2,5,2,2,2\n<span class=\"token number\">9,2</span>,4,5,2,4,2,4,1,10,4,2\no.s.v. <span class=\"token punctuation\">..</span>.</code></pre></div><p>Skapa funktionerna <code class=\"language-text\">summa</code> och <code class=\"language-text\">maximum</code> som returnerar summan av elementen i matrisen respektive det största elementet.</p><p>Skapa också funktionen <code class=\"language-text\">radsummor</code> som returnerar summorna av matrisens rader i form av en lista . Till exempel ska funktionen för matrisen...</p><div class=\"gatsby-highlight\" data-language=\"sh\"><pre class=\"language-sh\"><code class=\"language-sh\"><span class=\"token number\">1,2</span>,3\n<span class=\"token number\">2,3</span>,4</code></pre></div><p>...returnera <code class=\"language-text\">[6, 9]</code>.</p><p>Tips: Du kan också implementera andra funktioner i programmet. Fundera vilka gemensamma funktioner de ovan nämnda funktionerna kan behöva.</p><p>Observera att filen alltid heter <code class=\"language-text\">matris.txt</code> och att funktionerna inte ska ha några parametrar. Ytterligare funktioner du eventuellt skapar kan ha parametrar.</p><p>Obs! Om Visual Studio Code inte hittar filen även om namnet är korrekt skrivet, ska du följa instruktionerna ovan.</p></programming-exercise><h2 id=\"lasa-samma-fil-flera-ganger\" style=\"position:relative;\">Läsa samma fil flera gånger<a href=\"#lasa-samma-fil-flera-ganger\" aria-label=\"lasa samma fil flera ganger permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2><p>Ibland kan man behöva läsa innehållet i en fil flera gånger i samma program. Vi tittar på ett program som behandlar data om några personer i en CSV-fil:</p><sample-data>\nPeter;40;Helsingfors\nEmilia;34;Esbo\nErik;42;Åbo\nAntonia;100;Helsingfors\nLisa;58;Suonenjoki\n</sample-data><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"personer.csv\"</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> fil<span class=\"token punctuation\">:</span>\n    <span class=\"token comment\"># skriver ut namn</span>\n    <span class=\"token keyword\">for</span> rad <span class=\"token keyword\">in</span> fil<span class=\"token punctuation\">:</span>\n        delar <span class=\"token operator\">=</span> rad<span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token string\">\";\"</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Namn:\"</span><span class=\"token punctuation\">,</span> delar<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n\n    <span class=\"token comment\"># söker efter den äldsta personen</span>\n    hogsta_aldern <span class=\"token operator\">=</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span>\n    <span class=\"token keyword\">for</span> rad <span class=\"token keyword\">in</span> fil<span class=\"token punctuation\">:</span>\n        delar <span class=\"token operator\">=</span> rad<span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token string\">\";\"</span><span class=\"token punctuation\">)</span>\n        namn <span class=\"token operator\">=</span> delar<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\n        alder <span class=\"token operator\">=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>delar<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">if</span> alder <span class=\"token operator\">></span> hogsta_aldern<span class=\"token punctuation\">:</span>\n            hogsta_aldern <span class=\"token operator\">=</span> alder\n            aldst <span class=\"token operator\">=</span> namn\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Den äldsta är\"</span><span class=\"token punctuation\">,</span> aldst<span class=\"token punctuation\">)</span></code></pre></div><p>När vi kör programmet får vi det här felmeddelandet:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">Traceback <span class=\"token punctuation\">(</span>most recent call last<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Den äldsta är\"</span><span class=\"token punctuation\">;</span> aldst<span class=\"token punctuation\">)</span>\nUnboundLocalError<span class=\"token punctuation\">:</span> local variable <span class=\"token string\">'aldst'</span> referenced before assignment</code></pre></div><p>Orsaken till felet är att den andra for-loopen aldrig körs, eftersom filen endast kan behandlas en gång. När den sista raden har lästs stannar file handlen i slutet av filen, filen stängs och vi kan inte längre komma åt filens innehåll.</p><p>Om vi vill komma åt innehållet även i den andra for-loopen, måste vi öppna filen på nytt:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"personer.csv\"</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> fil<span class=\"token punctuation\">:</span>\n    <span class=\"token comment\"># skriver ut namn</span>\n    <span class=\"token keyword\">for</span> rad <span class=\"token keyword\">in</span> fil<span class=\"token punctuation\">:</span>\n        delar <span class=\"token operator\">=</span> rad<span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token string\">\";\"</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Namn:\"</span><span class=\"token punctuation\">,</span> delar<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"personer.csv\"</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> fil<span class=\"token punctuation\">:</span>\n    <span class=\"token comment\"># söker efter den äldsta personen</span>\n    hogsta_aldern <span class=\"token operator\">=</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span>\n    <span class=\"token keyword\">for</span> rad <span class=\"token keyword\">in</span> fil<span class=\"token punctuation\">:</span>\n        delar <span class=\"token operator\">=</span> rad<span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token string\">\";\"</span><span class=\"token punctuation\">)</span>\n        namn <span class=\"token operator\">=</span> delar<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\n        alder <span class=\"token operator\">=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>delar<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">if</span> alder <span class=\"token operator\">></span> hogsta_aldern<span class=\"token punctuation\">:</span>\n            hogsta_aldern <span class=\"token operator\">=</span> alder\n            aldst <span class=\"token operator\">=</span> namn\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Den äldsta är\"</span><span class=\"token punctuation\">,</span> aldst<span class=\"token punctuation\">)</span></code></pre></div><p>Även om den ovanstående koden fungerar, innehåller den onödig upprepning. Det lönar sig vanligtvis att läsa filen bara en gång, och spara dess innehåll i ett lämpligt format för fortsatt behandling:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">personer <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n<span class=\"token comment\"># vi läser in personerna till listan</span>\n<span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"personer.csv\"</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> fil<span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">for</span> rad <span class=\"token keyword\">in</span> fil<span class=\"token punctuation\">:</span>\n        delar <span class=\"token operator\">=</span> rad<span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token string\">\";\"</span><span class=\"token punctuation\">)</span>\n        personer<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>delar<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>delar<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> delar<span class=\"token punctuation\">[</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># skriver ut namn</span>\n<span class=\"token keyword\">for</span> person <span class=\"token keyword\">in</span> personer<span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Namn:\"</span><span class=\"token punctuation\">,</span> person<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># söker efter den äldsta personen</span>\nhogsta_aldern <span class=\"token operator\">=</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span>\n<span class=\"token keyword\">for</span> person <span class=\"token keyword\">in</span> personer<span class=\"token punctuation\">:</span>\n    namn <span class=\"token operator\">=</span> person<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\n    alder <span class=\"token operator\">=</span> person<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n    <span class=\"token keyword\">if</span> alder <span class=\"token operator\">></span> hogsta_aldern<span class=\"token punctuation\">:</span>\n        hogsta_aldern <span class=\"token operator\">=</span> alder\n        aldst <span class=\"token operator\">=</span> namn\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Den äldsta är\"</span><span class=\"token punctuation\">,</span> aldst<span class=\"token punctuation\">)</span></code></pre></div><h2 id=\"mera-om-att-behandla-csv-filer\" style=\"position:relative;\">Mera om att behandla CSV-filer<a href=\"#mera-om-att-behandla-csv-filer\" aria-label=\"mera om att behandla csv filer permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2><p>Vi fortsätter behandla filen <code class=\"language-text\">vitsord.csv</code>, som innehåller följande data:</p><sample-data><p>Peter;5;4;5;3;4;5;5;4;2;4\nPauline;3;4;2;4;4;2;3;1;3;3\nPia;4;5;5;4;5;5;4;5;4;4</p></sample-data><p>Följande program skapar lexikonet <code class=\"language-text\">vitsord</code> baserat på innehållet i filen. Nycklarna är elevernas namn och värdena innehåller elevernas respektive vitsord. Programmet konverterar vitsorden till heltal så att de kan hanteras enklare.</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">vitsord <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"vitsord.csv\"</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> fil<span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">for</span> rad <span class=\"token keyword\">in</span> fil<span class=\"token punctuation\">:</span>\n        rad <span class=\"token operator\">=</span> rad<span class=\"token punctuation\">.</span>replace<span class=\"token punctuation\">(</span><span class=\"token string\">\"\\n\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span>\n        delar <span class=\"token operator\">=</span> rad<span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token string\">\";\"</span><span class=\"token punctuation\">)</span>\n        namn <span class=\"token operator\">=</span> delar<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\n        vitsord<span class=\"token punctuation\">[</span>namn<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n        <span class=\"token keyword\">for</span> givet_vitsord <span class=\"token keyword\">in</span> delar<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n            vitsord<span class=\"token punctuation\">[</span>namn<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>givet_vitsord<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>vitsord<span class=\"token punctuation\">)</span></code></pre></div><sample-output><p>{'Peter': [5, 4, 5, 3, 4, 5, 5, 4, 2, 4], 'Pauline': [3, 4, 2, 4, 4, 2, 3, 1, 3, 3], 'Pia': [4, 5, 5, 4, 5, 5, 4, 5, 4, 4]}</p></sample-output><p>Nu kan vi skriva ut statistik om varje studerande, baserat på värdena i lexikonet:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">for</span> namn<span class=\"token punctuation\">,</span> lista <span class=\"token keyword\">in</span> vitsord<span class=\"token punctuation\">.</span>items<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    basta <span class=\"token operator\">=</span> <span class=\"token builtin\">max</span><span class=\"token punctuation\">(</span>lista<span class=\"token punctuation\">)</span>\n    medeltal <span class=\"token operator\">=</span> <span class=\"token builtin\">sum</span><span class=\"token punctuation\">(</span>lista<span class=\"token punctuation\">)</span> <span class=\"token operator\">/</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>lista<span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string-interpolation\"><span class=\"token string\">f\"</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>namn<span class=\"token punctuation\">}</span></span><span class=\"token string\">: bästa vitsordet </span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>basta<span class=\"token punctuation\">}</span></span><span class=\"token string\">, medeltal </span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>medeltal<span class=\"token punctuation\">:</span><span class=\"token format-spec\">.2f</span><span class=\"token punctuation\">}</span></span><span class=\"token string\">\"</span></span><span class=\"token punctuation\">)</span></code></pre></div><sample-output><p>Peter: bästa vitsordet 5, medeltal 4.10\nPauline: bästa vitsordet 4, medeltal 2.90\nPia: bästa vitsordet 5, medeltal 4.50</p></sample-output><p>Ta en titt på programmet i exemplet ovan. Det kan kanske verka aningen komplicerat vid den första anblicken, men tekniken kan användas med flera olika typer av data.</p><h2 id=\"ta-bort-overflodiga-rader-mellanslag-och-radbrytningar\" style=\"position:relative;\">Ta bort överflödiga rader, mellanslag och radbrytningar<a href=\"#ta-bort-overflodiga-rader-mellanslag-och-radbrytningar\" aria-label=\"ta bort overflodiga rader mellanslag och radbrytningar permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2><p>Låt oss säga att vi har en CSV-fil med namn, exporterar från Excel:</p><div class=\"gatsby-highlight\" data-language=\"sh\"><pre class=\"language-sh\"><code class=\"language-sh\">förnamn<span class=\"token punctuation\">;</span> efternamn\nPeter<span class=\"token punctuation\">;</span> Python\nJaana<span class=\"token punctuation\">;</span> Java\nHeikki<span class=\"token punctuation\">;</span> Haskell</code></pre></div><p>Excel är ökänt för att lägga till extra mellanrum lite här och där. Här har vi ett extra mellanrum mellan elementen, efter varje semikolon.</p><p>Vi skulle vilja skriva ut efternamnet på varje person som finns i listan. Den första raden i filen innehåller information om den data som följer och kan skippas:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">efternamn <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n<span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"personer.csv\"</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> fil<span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">for</span> rad <span class=\"token keyword\">in</span> fil<span class=\"token punctuation\">:</span>\n        delar <span class=\"token operator\">=</span> rad<span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token string\">\";\"</span><span class=\"token punctuation\">)</span>\n        <span class=\"token comment\"># skippar raden med rubriker</span>\n        <span class=\"token keyword\">if</span> delar<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"förnamn\"</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">continue</span>\n        efternamn<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>delar<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>efternamn<span class=\"token punctuation\">)</span></code></pre></div><p>När koden körs får vi den här utskriften:</p><sample-output><p>[' Python\\n', ' Java\\n', ' Haskell']</p></sample-output><p>De två första elementen har ett radbrytningstecken i slutet och alla tre element har ett mellanslag i början. Vi har redan använt <code class=\"language-text\">replace</code>-metoden för att ta bort onödigt mellanrum, men ett bättre sätt är <code class=\"language-text\">strip</code>-metoden hos strängar. Den här metoden tar bort tomrum från början och slutet av en sträng. Till tomrum räknas blanktecken, radbrytningar, samt tabb- och andra tecken som normalt inte skulle skrivas ut.</p><p>Vi kan testa metoden i Python-terminalen:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token operator\">>></span><span class=\"token operator\">></span> <span class=\"token string\">\" prov \"</span><span class=\"token punctuation\">.</span>strip<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token string\">'prov'</span>\n<span class=\"token operator\">>></span><span class=\"token operator\">></span> <span class=\"token string\">\"\\n\\ntest\\n\"</span><span class=\"token punctuation\">.</span>strip<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token string\">'test'</span>\n<span class=\"token operator\">>></span><span class=\"token operator\">></span></code></pre></div><p>Att ta bort de onödiga tecknen kräver bara en liten ändring i programmet:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">efternamn <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n<span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"personer.csv\"</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> fil<span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">for</span> rad <span class=\"token keyword\">in</span> fil<span class=\"token punctuation\">:</span>\n        delar <span class=\"token operator\">=</span> rad<span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token string\">';'</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">if</span> delar<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"förnamn\"</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">continue</span> <span class=\"token comment\"># skippar raden med rubriker</span>\n        efternamn<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>delar<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>strip<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>efternamn<span class=\"token punctuation\">)</span></code></pre></div><p>Nu får vi den önskade utskriften:</p><sample-output><p>['Python', 'Java', 'Haskell']</p></sample-output><p>Strängmetoderna <code class=\"language-text\">lstrip</code> och <code class=\"language-text\">rstrip</code> fungerar på motsvarande sätt som <code class=\"language-text\">strip</code>, men gör det då bara för antingen vänstra (l) eller högra (r) sidan av strängen:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token operator\">>></span><span class=\"token operator\">></span> <span class=\"token string\">\" teststräng  \"</span><span class=\"token punctuation\">.</span>rstrip<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token string\">' teststräng'</span>\n<span class=\"token operator\">>></span><span class=\"token operator\">></span> <span class=\"token string\">\" teststräng  \"</span><span class=\"token punctuation\">.</span>lstrip<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token string\">'teststräng  '</span></code></pre></div><h2 id=\"kombinera-data-fran-olika-filer\" style=\"position:relative;\">Kombinera data från olika filer<a href=\"#kombinera-data-fran-olika-filer\" aria-label=\"kombinera data fran olika filer permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2><p>Det är mycket vanligt att data som behöver hanteras av ett program finns lagrade i flera filer. Vi tar en titt på ett exempel där personalens information i ett företag finns i filen <code class=\"language-text\">personal.csv</code>:</p><div class=\"gatsby-highlight\" data-language=\"csv\"><pre class=\"language-csv\"><code class=\"language-csv\"><span class=\"token value\">personnr;namn;adress;adressort</span>\n<span class=\"token value\">080488-123X;Peter Mikkola;Filpusvägen 7;00700 HELSINGFORS</span>\n<span class=\"token value\">290274-044S;Lisa Marttinen;Mannerheimvägen 100 A 10;00100 HELSINGFORS</span>\n<span class=\"token value\">010479-007Z;Arto Vihavainen;Tiilitehtaankatu 10;04260 KERAVA</span>\n<span class=\"token value\">010499-345K;Leevi Hellas;Tapiolavägen 9;02100 ESBO</span></code></pre></div><p>Löneuppgifterna finns i en separat fil, <code class=\"language-text\">lon.csv</code>:</p><div class=\"gatsby-highlight\" data-language=\"csv\"><pre class=\"language-csv\"><code class=\"language-csv\"><span class=\"token value\">personnr;lön;bonus</span>\n<span class=\"token value\">080488-123X;3300;0</span>\n<span class=\"token value\">290274-044S;4150;200</span>\n<span class=\"token value\">010479-007Z;1300;1200</span></code></pre></div><p>Alla rader i båda filerna innehåller en personlig id-kod (pic) som identifierar vems data vi arbetar med. När vi använder det här id:t som gemensam faktor, är det lätt att koppla en arbetstagares namn till hens lön. Vi kan då till exempel skriva ut en lista över de månatliga inkomsterna:</p><sample-output><pre>\ninkomster:\nPeter Mikkola    3300 euro\nLisa Marttinen   4350 euro\nArto Vihavainen  2500 euro\n</pre></sample-output><p>Programmet använder två lexikon som hjälpdatastrukturer: <code class=\"language-text\">namn</code> och <code class=\"language-text\">loner</code>. Båda använder personnr som nyckel:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">namn <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"personal.csv\"</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> fil<span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">for</span> rad <span class=\"token keyword\">in</span> fil<span class=\"token punctuation\">:</span>\n        delar <span class=\"token operator\">=</span> rad<span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token string\">';'</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">if</span> delar<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"personnr\"</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">continue</span>\n        namn<span class=\"token punctuation\">[</span>delar<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> delar<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n\nloner <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"lon.csv\"</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> fil<span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">for</span> rad <span class=\"token keyword\">in</span> fil<span class=\"token punctuation\">:</span>\n        delar <span class=\"token operator\">=</span> rad<span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token string\">';'</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">if</span> delar<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"personnr\"</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">continue</span>\n        loner<span class=\"token punctuation\">[</span>delar<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>delar<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>delar<span class=\"token punctuation\">[</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"inkomster:\"</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">for</span> personnr<span class=\"token punctuation\">,</span> person <span class=\"token keyword\">in</span> namn<span class=\"token punctuation\">.</span>items<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">if</span> personnr <span class=\"token keyword\">in</span> loner<span class=\"token punctuation\">:</span>\n        lon <span class=\"token operator\">=</span> loner<span class=\"token punctuation\">[</span>personnr<span class=\"token punctuation\">]</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string-interpolation\"><span class=\"token string\">f\"</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>person<span class=\"token punctuation\">:</span><span class=\"token format-spec\">16</span><span class=\"token punctuation\">}</span></span><span class=\"token string\"> </span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>lon<span class=\"token punctuation\">}</span></span><span class=\"token string\"> euro\"</span></span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string-interpolation\"><span class=\"token string\">f\"</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>person<span class=\"token punctuation\">:</span><span class=\"token format-spec\">16</span><span class=\"token punctuation\">}</span></span><span class=\"token string\"> 0 euro\"</span></span><span class=\"token punctuation\">)</span></code></pre></div><p>Först skapar programmet lexikonen <code class=\"language-text\">namn</code> och <code class=\"language-text\">loner</code>. De har dessa innehåll:</p><div class=\"gatsby-highlight\" data-language=\"sh\"><pre class=\"language-sh\"><code class=\"language-sh\"><span class=\"token punctuation\">{</span>\n    <span class=\"token string\">'080488-123X'</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">'Peter Mikkola'</span>,\n    <span class=\"token string\">'290274-044S'</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">'Lisa Marttinen'</span>,\n    <span class=\"token string\">'010479-007Z'</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">'Arto Vihavainen'</span>,\n    <span class=\"token string\">'010499-345K'</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">'Leevi Hellas'</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">{</span>\n    <span class=\"token string\">'080488-123X'</span><span class=\"token builtin class-name\">:</span> <span class=\"token number\">3300</span>,\n    <span class=\"token string\">'290274-044S'</span><span class=\"token builtin class-name\">:</span> <span class=\"token number\">4350</span>,\n    <span class=\"token string\">'010479-007Z'</span><span class=\"token builtin class-name\">:</span> <span class=\"token number\">2500</span>\n<span class=\"token punctuation\">}</span></code></pre></div><p>´for´-loopen i slutet av programmet kombinerar arbetstagarnas namn med deras respektive löner.</p><p>Programmet kan också beakta situationer där personnumret saknas för en arbetstagare.</p><p>Kom ihåg att elementens ordning i lexikonet inte spelar någon roll, eftersom nycklarna behandlas med hjälp av hashvärden.</p><programming-exercise name='Kursresultat, del 1' tmcname='osa06-04_resultat_1'><p>Programmet hanterar två CSV-filer. I den ena finns information om studerande:</p><div class=\"gatsby-highlight\" data-language=\"csv\"><pre class=\"language-csv\"><code class=\"language-csv\"><span class=\"token value\">studerandenr;förnamn;efternamn</span>\n<span class=\"token value\">12345678;pekka;peloton</span>\n<span class=\"token value\">12345687;jaana;javanainen</span>\n<span class=\"token value\">12345699;liisa;virtanen</span></code></pre></div><p>Och i den andra antalet gjorda uppgifter på veckobasis:</p><div class=\"gatsby-highlight\" data-language=\"csv\"><pre class=\"language-csv\"><code class=\"language-csv\"><span class=\"token value\">studerandenr;v1;v2;v3;v4;v5;v6;v7</span>\n<span class=\"token value\">12345678;4;1;1;4;5;2;4</span>\n<span class=\"token value\">12345687;3;5;3;1;5;4;6</span>\n<span class=\"token value\">12345699;10;2;2;7;10;2;2</span></code></pre></div><p>I de båda CSV-filerna innehåller den första raden rubriker.</p><p>Skapa ett program som frågar efter filnamnen och därefter skriver ut antalet gjorda uppgifter för varje studerande. Exempel:</p><sample-output><p>Studerande (CSV): <strong>studerande1.csv</strong>\nUppgifter (CSV): <strong>uppgifter1.csv</strong>\npekka peloton 21\njaana javanainen 27\nliisa virtanen 35</p></sample-output><p>Tips: Hårdkoda värdena medan du testar programmet, så behöver du inte hela tiden mata in dem på nytt:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">if</span> <span class=\"token boolean\">False</span><span class=\"token punctuation\">:</span>\n    <span class=\"token comment\"># hit kommer vi aldrig</span>\n    studerande <span class=\"token operator\">=</span> <span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Studerande (CSV): \"</span><span class=\"token punctuation\">)</span>\n    uppgifter <span class=\"token operator\">=</span> <span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Uppgifter (CSV): \"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n    <span class=\"token comment\"># de hårdkodade värdena</span>\n    studerande <span class=\"token operator\">=</span> <span class=\"token string\">\"studerande1.csv\"</span>\n    uppgifter <span class=\"token operator\">=</span> <span class=\"token string\">\"uppgifter1.csv\"</span></code></pre></div><p>Den egentliga funktionaliteten är nu \"gömd\" bakom en <code class=\"language-text\">False</code>-förgrening som aldrig körs.</p><p>Om vi vill testa inmatning av information (på \"normalt\" sätt), kan vi ändra <code class=\"language-text\">False</code> till <code class=\"language-text\">True</code>:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">if</span> <span class=\"token boolean\">True</span><span class=\"token punctuation\">:</span>\n    studerande <span class=\"token operator\">=</span> <span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Studerande (CSV): \"</span><span class=\"token punctuation\">)</span>\n    uppgifter <span class=\"token operator\">=</span> <span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Uppgifter (CSV): \"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n    <span class=\"token comment\"># hit kommer vi aldrig!</span>\n    studerande <span class=\"token operator\">=</span> <span class=\"token string\">\"studerande1.csv\"</span>\n    uppgifter <span class=\"token operator\">=</span> <span class=\"token string\">\"uppgifter1.csv\"</span></code></pre></div><p>När koden är i skick kan if-satsen tas bort.</p><p>Obs! I dessa uppgifter ska kod inte placeras i <code class=\"language-text\">if __name__ == \"__main__\"</code> -blocket, om du inte ombeds göra det.</p><p>Obs! Om Visual Studio Code inte hittar filen även om namnet är korrekt skrivet, ska du följa instruktionerna ovan.</p></programming-exercise><programming-exercise name='Kursresultat, del 2' tmcname='osa06-05_resultat_2'><p>Vi utvidgar nu föregående uppgift så att de studerandes provpoäng också läses in från en CSV-fil. Filens struktur är följande:</p><div class=\"gatsby-highlight\" data-language=\"csv\"><pre class=\"language-csv\"><code class=\"language-csv\"><span class=\"token value\">studerandenr;u1;u2;u3</span>\n<span class=\"token value\">12345678;4;1;4</span>\n<span class=\"token value\">12345687;3;5;3</span>\n<span class=\"token value\">12345699;10;2;2</span></code></pre></div><p>Till exempel har studerande <code class=\"language-text\">12345678</code> fått 4 + 1 + 4, alltså nio poäng.</p><p>Programmet ska be användaren mata in filnamnen och sedan skriva ut vitsordet för varje studerande:</p><sample-output><p>Studerande (CSV): <strong>studerande1.csv</strong>\nUppgifter (CSV): <strong>uppgifter1.csv</strong>\nProvpoäng (CSV): <strong>provpoang1.csv</strong>\npekka peloton 0\njaana javanainen 1\nliisa virtanen 3</p></sample-output><p>Av gjorda uppgifter får man poäng så att 10 % gjorda uppgifter ger ett poäng, ända upp till 100 % (40 uppgifter) som ger tio poäng. Poängen hanteras som heltal.</p><p>Vitsordet för kursen fås på basis av prov- och uppgiftspoängsumman:</p><table>\n<thead>\n<tr>\n<th align=\"center\">prov- och uppgiftspoäng tillsammans</th>\n<th align=\"center\">vitsord</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td align=\"center\">0-14</td>\n<td align=\"center\">0 (underkänt)</td>\n</tr>\n<tr>\n<td align=\"center\">15-17</td>\n<td align=\"center\">1</td>\n</tr>\n<tr>\n<td align=\"center\">18-20</td>\n<td align=\"center\">2</td>\n</tr>\n<tr>\n<td align=\"center\">21-23</td>\n<td align=\"center\">3</td>\n</tr>\n<tr>\n<td align=\"center\">24-27</td>\n<td align=\"center\">4</td>\n</tr>\n<tr>\n<td align=\"center\">28-</td>\n<td align=\"center\">5</td>\n</tr>\n</tbody>\n</table><p>Obs! I dessa uppgifter ska kod inte placeras i <code class=\"language-text\">if __name__ == \"__main__\"</code> -blocket, om du inte ombeds göra det.</p></programming-exercise><programming-exercise name='Kursresultat, del 3' tmcname='osa06-06_resultat_3'><p>I den här uppgiften formaterar vi utskriften från den föregående uppgiften:</p><sample-output><p>Studerande (CSV): <strong>studerande1.csv</strong>\nUppgifter (CSV): <strong>uppgifter1.csv</strong>\nProvpoäng (CSV): <strong>provpoang1.csv</strong></p><pre>\nnamn                          uppg_ant  uppg_p    prov_p    tot_p     vitsord\npekka peloton                 21        5         9         14        0\njaana javanainen              27        6         11        17        1\nliisa virtanen                35        8         14        22        3\n</pre></sample-output><p>På varje rad ska alltså en studerandes namn, antal gjorda uppgifter, uppgiftspoäng, provpoäng, totalpoäng samt vitsord skrivas ut. Det här görs \"prydligt\" så att namnkolumnen är 30 tecken bred och de övriga kolumnernas bredd är 10.</p><p>Det lönar sig att utnyttja f-strängar (modul fyra).</p><p>Lägg märke till att utskriften av strängar och tal fungerar med lite olik logik i f-strängar:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token builtin\">ord</span> <span class=\"token operator\">=</span> <span class=\"token string\">\"python\"</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string-interpolation\"><span class=\"token string\">f\"</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span><span class=\"token builtin\">ord</span><span class=\"token punctuation\">:</span><span class=\"token format-spec\">10</span><span class=\"token punctuation\">}</span></span><span class=\"token string\">fortsätter\"</span></span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string-interpolation\"><span class=\"token string\">f\"</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span><span class=\"token builtin\">ord</span><span class=\"token punctuation\">:</span><span class=\"token format-spec\">>10</span><span class=\"token punctuation\">}</span></span><span class=\"token string\">fortsätter\"</span></span><span class=\"token punctuation\">)</span></code></pre></div><sample-output><pre>\npython    fortsätter\n    pythonfortsätter\n</pre></sample-output><p>I vanliga fall är strängar vänsterjusterade, men med tecknet <code class=\"language-text\">></code> kan man justera strängen till höger.</p><p>När tal skrivs ut är logiken den motsatta:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">tal <span class=\"token operator\">=</span> <span class=\"token number\">42</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string-interpolation\"><span class=\"token string\">f\"</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>tal<span class=\"token punctuation\">:</span><span class=\"token format-spec\">10</span><span class=\"token punctuation\">}</span></span><span class=\"token string\">fortsätter\"</span></span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string-interpolation\"><span class=\"token string\">f\"</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>tal<span class=\"token punctuation\">:</span><span class=\"token format-spec\">&lt;10</span><span class=\"token punctuation\">}</span></span><span class=\"token string\">fortsätter\"</span></span><span class=\"token punctuation\">)</span></code></pre></div><sample-output><pre>\n        42fortsätter\n42        fortsätter\n</pre></sample-output><p>Tal är alltså normalt högerjusterade men med tecknet <code class=\"language-text\">&lt;</code> kan vi justera talet till vänster.</p><p>Obs! I dessa uppgifter ska kod inte placeras i <code class=\"language-text\">if __name__ == \"__main__\"</code> -blocket, om du inte ombeds göra det.</p></programming-exercise><programming-exercise name='Spell checker' tmcname='osa06-07_spellcheck'><p>Skapa ett program som ber användaren mata in text på engelska. Programmet ska utföra en språkkontroll och skriva ut texten så att felstavade ord är markerade med asterisker. Exempel:</p><sample-output><p>Write text: <strong>We use ptython to make a spell checker</strong></p><pre>\nWe use *ptython* to make a spell checker\n</pre></sample-output><sample-output><p>Write text: <strong>This is acually a good and usefull program</strong></p><pre>\nThis is *acually* good and *usefull* program\n</pre></sample-output><p>Bokstavsstorleken ska inte påverka programmets funktionalitet.</p><p>Programmet använder sig av filen <code class=\"language-text\">wordlist.txt</code> för att känna igen om orden är korrekt skrivna.</p><p>Obs! I dessa uppgifter ska kod inte placeras i <code class=\"language-text\">if __name__ == \"__main__\"</code> -blocket, om du inte ombeds göra det.</p><p>Obs! Om Visual Studio Code inte hittar filen även om namnet är korrekt skrivet, ska du följa instruktionerna ovan.</p></programming-exercise><programming-exercise name='Receptsök' tmcname='osa06-08_receptsok'><p>I den här uppgiften skapar vi ett program som låter användaren söka efter ett recept på basis av dess namn, tillagningstid eller ingrediens. Programmet har tillgång till en samling recept som finns lagrade i en fil.</p><p>Varje recept består av tre eller fler rader i receptfilen. Den första raden innehåller receptets namn, den andra tillagningstiden (heltal) och tredje raden framåt ingredienser. Ingredienslistan avslutas med en tom rad (exkl. det sista receptet). Filen kan innehålla flera recept. Se exemplet nedan:</p><div class=\"gatsby-highlight\" data-language=\"sh\"><pre class=\"language-sh\"><code class=\"language-sh\">Plättdeg\n<span class=\"token number\">15</span>\nmjölk\nägg\nmjöl\nsocker\nsalt\nsmör\n\nKöttbullar\n<span class=\"token number\">45</span>\nmalet kött\nägg\nskorpmjöl\n\nTofurullar\n<span class=\"token number\">30</span>\ntofu\nris\nvatten\nmorot\ngurka\navocado\nwasabi\n\nBulldeg\n<span class=\"token number\">60</span>\nmjölk\njäst\nägg\nsalt\nsocker\nkardemumma\nsmör</code></pre></div><p>Tips: I den här uppgiften kan det löna sig att läsa in filens rader i en lista och sedan hantera listan enligt den här uppgiftens specifikationer.</p><h4 id=\"sokning-med-receptnamn\" style=\"position:relative;\">Sökning med receptnamn<a href=\"#sokning-med-receptnamn\" aria-label=\"sokning med receptnamn permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h4><p>Skapa funktionen <code class=\"language-text\">namnsok(fil: str, ord: str)</code> som söker efter recept vars namn innehåller den sträng som ges som andra argument. Funktionen ska returnera en lista med namnen på de matchande recepten.</p><p>Exempel:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">hittade <span class=\"token operator\">=</span> namnsok<span class=\"token punctuation\">(</span><span class=\"token string\">\"recept1.txt\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"bull\"</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">for</span> recept <span class=\"token keyword\">in</span> hittade<span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>recept<span class=\"token punctuation\">)</span></code></pre></div><sample-output><p>Köttbullar\nBulldeg</p></sample-output><p>Märk att bokstavsstorleken inte har någon skillnad. Med ordet <code class=\"language-text\">bull</code> hittar vi också <code class=\"language-text\">Bulldeg</code>.</p><p>Obs! Om Visual Studio Code inte hittar filen även om namnet är korrekt skrivet, ska du följa instruktionerna ovan.</p><h4 id=\"sokning-med-tillagningstid\" style=\"position:relative;\">Sökning med tillagningstid<a href=\"#sokning-med-tillagningstid\" aria-label=\"sokning med tillagningstid permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h4><p>Skapa funktionen <code class=\"language-text\">tidssok(fil: str, tid: int)</code> som söker efter de recept vars tillagningstid är högst det som angetts som argument.</p><p>Matchande recept returneras som en lista och nu ska också tillagningstiden inkluderas. Exempel:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">hittade <span class=\"token operator\">=</span> tidssok<span class=\"token punctuation\">(</span><span class=\"token string\">\"recept1.txt\"</span><span class=\"token punctuation\">,</span> <span class=\"token number\">20</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">for</span> recept <span class=\"token keyword\">in</span> hittade<span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>recept<span class=\"token punctuation\">)</span></code></pre></div><sample-output><p>Plättdeg, tillagningstid 15 min</p></sample-output><h4 id=\"sokning-med-ingrediens\" style=\"position:relative;\">Sökning med ingrediens<a href=\"#sokning-med-ingrediens\" aria-label=\"sokning med ingrediens permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h4><p>Varning!! Den här delen är mycket svårare än de tidigare delarna. Om du har svårigheter, lönar det sig att göra de övriga delarna först och sedan återkomma hit. Märk att du också kan skicka enskilda delar till servern.</p><p>Skapa funktionen <code class=\"language-text\">ingredienssok(fil: str, ingrediens: str)</code> som ska hitta recepten med den givna ingrediensen.</p><p>Matchande recept ska returneras som en lista. Exempel:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">hittade <span class=\"token operator\">=</span> ingredienssok<span class=\"token punctuation\">(</span><span class=\"token string\">\"recept1.txt\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"mjölk\"</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">for</span> recept <span class=\"token keyword\">in</span> hittade<span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>recept<span class=\"token punctuation\">)</span></code></pre></div><sample-output><p>Plättdeg, tillagningstid 15 min\nBulldeg, tillagningstid 60 min</p></sample-output></programming-exercise><programming-exercise name='Stadscyklar' tmcname='osa06-09_stadscyklar'><p>I den här uppgiften skapar vi några funktioner, med vilka vi kan inspektera en fil med information om <a href=\"https://www.hsl.fi/sv/stadscyklar\" target=\"_blank\" rel=\"noopener noreferrer\">stadscyklars</a> parkeringsstationer.</p><p>Så här ser filerna ut:</p><div class=\"gatsby-highlight\" data-language=\"csv\"><pre class=\"language-csv\"><code class=\"language-csv\"><span class=\"token value\">Longitude;Latitude;FID;name;total_slot;operative;id</span>\n<span class=\"token value\">24.950292890004903;60.155444793742276;1;Kaivopuisto;30;Yes;001</span>\n<span class=\"token value\">24.956347471358754;60.160959093887129;2;Laivasillankatu;12;Yes;002</span>\n<span class=\"token value\">24.944927399779715;60.158189199971673;3;Kapteeninpuistikko;16;Yes;003</span></code></pre></div><p>För varje parkeringsstation finns det en skild rad i filen: här specificeras koordinater, namnet på stationen m.m.</p><h4 id=\"avstand-mellan-stationer\" style=\"position:relative;\">Avstånd mellan stationer<a href=\"#avstand-mellan-stationer\" aria-label=\"avstand mellan stationer permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h4><p>Skapa funktionen <code class=\"language-text\">stationsinfo(fil: str)</code> som läser in stationsinfon och returnerar den som ett lexikon:</p><sample-output><pre>\n{\n  \"Kaivopuisto: (24.950292890004903, 60.155444793742276),\n  \"Laivasillankatu: (24.956347471358754, 60.160959093887129),\n  \"Kapteeninpuistikko: (24.944927399779715, 60.158189199971673)\n}\n</pre></sample-output><p>Som nyckel används alltså stationens namn, medan longituden (1) och latituden (2) lagras som värden i form av en tupel.</p><p>Skapa nu funktionen <code class=\"language-text\">avstand(stationer: dict, station1: str, station2: str)</code> som returnerar avståndet mellan de två givna stationerna.</p><p>Följande formel används för att beräkna avståndet:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># det här behövs för att funktionen sqrt ska fungera</span>\n<span class=\"token keyword\">import</span> math\n\nx_km <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>longitude1 <span class=\"token operator\">-</span> longitude2<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">55.26</span>\ny_km <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>latitude1 <span class=\"token operator\">-</span> latitude2<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">111.2</span>\navstand <span class=\"token operator\">=</span> math<span class=\"token punctuation\">.</span>sqrt<span class=\"token punctuation\">(</span>x_km<span class=\"token operator\">**</span><span class=\"token number\">2</span> <span class=\"token operator\">+</span> y_km<span class=\"token operator\">**</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span></code></pre></div><p>Exempel:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">stationer <span class=\"token operator\">=</span> stationsinfo<span class=\"token punctuation\">(</span><span class=\"token string\">'stations1.csv'</span><span class=\"token punctuation\">)</span>\ne <span class=\"token operator\">=</span> avstand<span class=\"token punctuation\">(</span>stationer<span class=\"token punctuation\">,</span> <span class=\"token string\">\"Designmuseo\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Hietalahdentori\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span>\ne <span class=\"token operator\">=</span> avstand<span class=\"token punctuation\">(</span>stationer<span class=\"token punctuation\">,</span> <span class=\"token string\">\"Viiskulma\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Kaivopuisto\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span></code></pre></div><sample-output><p>0.9032737292463177\n0.7753594392019532</p></sample-output><p>Obs! Om Visual Studio Code inte hittar filen även om namnet är korrekt skrivet, ska du följa instruktionerna ovan.</p><h4 id=\"langsta-avstand\" style=\"position:relative;\">Längsta avstånd<a href=\"#langsta-avstand\" aria-label=\"langsta avstand permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h4><p>Skapa funktionen <code class=\"language-text\">langsta_avstand(stationer: dict)</code> som ska ta reda på vilka stationer som är längst ifrån varandra. Funktionen ska returnera en tupel vars två första värden innehåller stationernas namn och det tredje värdet det aktuella avståndet.</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">stationer <span class=\"token operator\">=</span> stationsinfo<span class=\"token punctuation\">(</span><span class=\"token string\">'stations1.csv'</span><span class=\"token punctuation\">)</span>\nstation1<span class=\"token punctuation\">,</span> station2<span class=\"token punctuation\">,</span> suurin <span class=\"token operator\">=</span> langsta_avstand<span class=\"token punctuation\">(</span>stationer<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>station1<span class=\"token punctuation\">,</span> station2<span class=\"token punctuation\">,</span> suurin<span class=\"token punctuation\">)</span></code></pre></div><sample-output><p>Laivasillankatu Hietalahdentori 1.478708873076181</p></sample-output></programming-exercise><div><quiz id=\"ba06e74d-f74c-5964-a88d-a0dafcee3a04\"></quiz></div></div>","frontmatter":{"path":"/osa-6/1-lasa-filer","title":"Läsa filer"},"fileAbsolutePath":"/home/runner/work/ohjelmointi-26-sv/ohjelmointi-26-sv/data/osa-6/1-lasa-filer.md"},"allPages":{"edges":[{"node":{"id":"3823106d-d5b4-54fc-ab67-c9717c628c00","frontmatter":{"path":"/","title":"Info om kursen"}}},{"node":{"id":"dd7e5652-0011-5cc2-8a7c-c07fca8a56ba","frontmatter":{"path":"/bedomningar-och-prov","title":"Bedömning och prov"}}},{"node":{"id":"7ee945da-eb70-5822-b337-58f9871c566a","frontmatter":{"path":"/alla-uppgifter","title":"Alla uppgifter"}}},{"node":{"id":"6e80e276-0b56-526e-93d9-5ab8823c6611","frontmatter":{"path":"/frontmatter-guide","title":"Frontmatter-guide"}}},{"node":{"id":"7dadae75-1bf2-549f-bb24-5e00c8421489","frontmatter":{"path":"/stod","title":"Handledning och stöd"}}},{"node":{"id":"b1f9be34-f77d-51c9-83c2-d2d3b1f88e7c","frontmatter":{"path":"/onlinetent","title":"Nättentamen 4.6."}}},{"node":{"id":"4e153253-62e1-5e29-b920-4512181e99a0","frontmatter":{"path":"/onlinetent-ohja","title":"ProgFK onlinetent 28.2.2026"}}},{"node":{"id":"5ba54609-9e23-5f8a-bbb1-3501116bd674","frontmatter":{"path":"/onlinetent-ohpe","title":"ProgGK onlinetent 17.1.2026"}}},{"node":{"id":"15a016f4-0a3d-5ec9-8236-533e57968b89","frontmatter":{"path":"/felanmalningar","title":"Vanliga felmeddelanden"}}},{"node":{"id":"416d07bf-b149-5ede-9d73-ea96ebbe00a2","frontmatter":{"path":"/sanasto","title":"Sanasto"}}},{"node":{"id":"70c6dbee-fa15-5924-a037-5b093295a075","frontmatter":{"path":"/osa-1/1-introduktion","title":"Introduktion"}}},{"node":{"id":"677341cb-d819-5a66-a348-fe483d9d22dd","frontmatter":{"path":"/ofta-stallda-fragar","title":"Ofta ställda frågor"}}},{"node":{"id":"10acce17-6b8d-5a7a-96ef-df73c32033da","frontmatter":{"path":"/osa-1/5-villkorssatser","title":"If-satser"}}},{"node":{"id":"adf0c95e-e532-52ac-acb7-41ecca35f001","frontmatter":{"path":"/osa-1","title":"Modul 1"}}},{"node":{"id":"337cbcae-fea0-535f-a4b7-07d0558220d7","frontmatter":{"path":"/osa-1/4-rakneoperationer","title":"Räkneoperationer"}}},{"node":{"id":"94008673-2d10-5ad1-af95-83b5478b3113","frontmatter":{"path":"/osa-10/1-klasshierarkier","title":"Klasshierarkier"}}},{"node":{"id":"3d48575e-5585-5b61-81ed-fe7585ea7593","frontmatter":{"path":"/osa-10/2-atkamstmodifierare","title":"Åtkomstmodifierare"}}},{"node":{"id":"fd6c2729-204f-5955-84d7-1ee8ed9b243b","frontmatter":{"path":"/osa-10/3-objektorienterade-programmeringstekniker","title":"Objektorienterade programmeringstekniker"}}},{"node":{"id":"648ed3ec-8a44-533a-9b88-7ef8fb7a1314","frontmatter":{"path":"/osa-10/4-storre-applikation","title":"Att utveckla en större applikation"}}},{"node":{"id":"abc32f5b-5700-5a16-b351-3bb0fd9e9b3f","frontmatter":{"path":"/osa-10","title":"Modul 10"}}},{"node":{"id":"b6612d3d-6ef9-5537-b0cf-62a01d4de20e","frontmatter":{"path":"/osa-1/3-mer-om-variabler","title":"Mer om variabler"}}},{"node":{"id":"b4146f07-9889-567c-bb26-315ca8375738","frontmatter":{"path":"/osa-11/1-list-comprehension","title":"Listbyggare"}}},{"node":{"id":"959073ca-1000-5d61-98e3-6a7151d95d71","frontmatter":{"path":"/osa-1/2-info-fran-anvandaren","title":"Information från användaren"}}},{"node":{"id":"a8daa43b-12ea-5482-9768-648407360e5d","frontmatter":{"path":"/osa-11/3-rekursion","title":"Rekursion"}}},{"node":{"id":"4dfa0d82-937f-597e-a323-1ffa57da8548","frontmatter":{"path":"/osa-11/2-mer-om-comprehensions","title":"Mer om listbyggare"}}},{"node":{"id":"848a81c4-fc8c-55cf-99ad-333703ef6d09","frontmatter":{"path":"/osa-11/4-lisaa-esimerkkeja","title":"Fler exempel på rekursion"}}},{"node":{"id":"bd0cfdba-8571-59be-bcfc-b681838806c6","frontmatter":{"path":"/osa-11","title":"Modul 11"}}},{"node":{"id":"d2e288a6-dc52-5b69-b9c9-7c967e3ecd14","frontmatter":{"path":"/osa-12/3-funktionell-programmering","title":"Funktionell programmering"}}},{"node":{"id":"e4a0179a-cac6-5b2f-b1d0-e0db6f5b4339","frontmatter":{"path":"/osa-12/4-reguljara-uttryck","title":"Reguljära uttryck"}}},{"node":{"id":"655d9900-5214-5ba4-88d7-a81fd819b0a0","frontmatter":{"path":"/osa-12","title":"Modul 12"}}},{"node":{"id":"10a6b4aa-f106-50e6-9d72-39e500891fd8","frontmatter":{"path":"/osa-12/2-generatorer","title":"Generatorer"}}},{"node":{"id":"af6df246-f5d2-583d-9f07-5aa9736ff64f","frontmatter":{"path":"/osa-13/1-pygame","title":"Pygame"}}},{"node":{"id":"d7395cb0-da7f-5acf-bf09-fd1035b36e81","frontmatter":{"path":"/osa-13/2-animation","title":"Animation"}}},{"node":{"id":"fef7b1d3-58ba-5d58-8637-0e14a8f584a6","frontmatter":{"path":"/osa-12/1-funktioner-som-argument","title":"Funktioner som argument"}}},{"node":{"id":"bd405169-a47c-5eba-986b-4506b39036ac","frontmatter":{"path":"/osa-13/4-fler-pygame-tekniker","title":"Fler pygame-tekniker"}}},{"node":{"id":"a9357b87-636c-5d96-b46b-bbb6a421f6d0","frontmatter":{"path":"/osa-13/3-handelser","title":"Händelser"}}},{"node":{"id":"78b8d6cc-7e14-5090-b43c-1513e8069e0c","frontmatter":{"path":"/osa-13","title":"Modul 13"}}},{"node":{"id":"5f9e405b-ae8f-5181-b1ae-ff2f4e6ad6da","frontmatter":{"path":"/osa-14/1-spelprojekt","title":"Spelprojekt"}}},{"node":{"id":"6e0e1b55-3ed4-56a8-9580-cd451bb7edde","frontmatter":{"path":"/osa-14/2-robot-och-ladar","title":"Robot och lådor"}}},{"node":{"id":"7f22ddd1-54e5-548f-b8d1-07863a79e2df","frontmatter":{"path":"/osa-14","title":"Modul 14"}}},{"node":{"id":"fea4657b-129f-5bb5-8645-17f84341e4b6","frontmatter":{"path":"/osa-2/1-terminologi","title":"Programmeringsterminologi"}}},{"node":{"id":"8c86392d-05ca-5e03-bf19-9e18db4c3578","frontmatter":{"path":"/osa-2/2-else-elif","title":"Mera om if-satser"}}},{"node":{"id":"4272a508-fa3f-5c99-b0d0-ca0a77dcbd88","frontmatter":{"path":"/osa-2/3-kombinera-villkor","title":"Kombinera villkor"}}},{"node":{"id":"2a9f88b8-4fe8-5fcb-9dfe-b4d98dde5d42","frontmatter":{"path":"/osa-14/3-fardigstallande-av-spelet","title":"Färdigställande av spelet"}}},{"node":{"id":"a620e53b-7d15-54ea-9a40-5d549bf3fddc","frontmatter":{"path":"/osa-14/4-ditt-eget-sepl","title":"Ditt eget spel"}}},{"node":{"id":"6a0f5405-e6cb-581d-92e3-c8af9ad4e7c2","frontmatter":{"path":"/osa-3/1-loopar-med-villkor","title":"Loopar med villkor"}}},{"node":{"id":"a131e4e2-8f05-5986-ab20-e06d9ed60dbe","frontmatter":{"path":"/osa-3/2-behandla-strangar","title":"Behandla strängar"}}},{"node":{"id":"29bc027e-c4f5-5d80-9e6a-bca75ee73682","frontmatter":{"path":"/osa-3/3-mer-om-loopar","title":"Mera om loopar"}}},{"node":{"id":"ed81d1ed-bbbb-573c-a017-e49e4ccd3d56","frontmatter":{"path":"/osa-3/4-definiera-funktioner","title":"Definiera funktioner"}}},{"node":{"id":"f9cdcf8a-269d-5ddb-9346-9ca23e48ef7e","frontmatter":{"path":"/osa-3","title":"Modul 3"}}},{"node":{"id":"8c15b7c7-809b-5ea5-a801-7d20819960ea","frontmatter":{"path":"/osa-4/1-vscode","title":"Editorn Visual Studio Code, Pythontolken och det inbyggda debuggningsverktyget"}}},{"node":{"id":"0f597439-5fd6-5ebf-a758-51fa680510d6","frontmatter":{"path":"/osa-4/2-mer-om-funktioner","title":"Mer om funktioner"}}},{"node":{"id":"d61169f7-0d24-5b3c-8b8c-6f3001453119","frontmatter":{"path":"/osa-4/3-listor","title":"Listor"}}},{"node":{"id":"0cc0967d-12d5-5877-966c-83262ee2d053","frontmatter":{"path":"/osa-4/4-iteration","title":"Iteration"}}},{"node":{"id":"b7f5aab0-16f5-57ea-be99-ef776e766449","frontmatter":{"path":"/osa-4/5-utskrift","title":"Formatera utskrift"}}},{"node":{"id":"7ce1ae54-08a7-55c5-8fdf-e66c163be7c5","frontmatter":{"path":"/osa-4","title":"Modul 4"}}},{"node":{"id":"7616bfc3-86a8-51ad-a63d-f62e70d684f7","frontmatter":{"path":"/osa-5/1-mer-om-listor","title":"Mer om listor"}}},{"node":{"id":"2754089d-7b6b-5a07-98f8-ed47c35f0f1e","frontmatter":{"path":"/osa-5/2-referenser","title":"Referenser"}}},{"node":{"id":"e44de044-469b-5a0c-b484-8b1c6d76b36e","frontmatter":{"path":"/osa-5/4-tuple","title":"Tuple"}}},{"node":{"id":"1777675c-c2e5-5912-9351-6bf786995e74","frontmatter":{"path":"/osa-4/6-strangar-listor","title":"Mera strängar och listor"}}},{"node":{"id":"f5608366-0cdb-5799-ad10-c1ae5bf31ff5","frontmatter":{"path":"/osa-2/4-loopar","title":"Enkla loopar"}}},{"node":{"id":"335a567d-d08f-56d6-8449-9d4bfb7dbbf5","frontmatter":{"path":"/osa-2","title":"Modul 2"}}},{"node":{"id":"05201f8b-92c3-5f20-aa64-572c040a44ef","frontmatter":{"path":"/osa-6/2-skriva-filer","title":"Skriva filer"}}},{"node":{"id":"bc19aa61-1a37-5b73-bd20-0c3994c3a7cf","frontmatter":{"path":"/osa-6/3-fel","title":"Förbered dig på fel"}}},{"node":{"id":"9c4ca0dd-1be2-5b8f-a357-61049541022a","frontmatter":{"path":"/osa-6/1-lasa-filer","title":"Läsa filer"}}},{"node":{"id":"05a28a78-3f81-5cb4-8f94-9a16288789c8","frontmatter":{"path":"/osa-6/4-lokala-globala-variabler","title":"Lokala och globala variabler"}}},{"node":{"id":"2f89b471-3e51-5519-9173-c8029a4a5bf7","frontmatter":{"path":"/osa-6","title":"Modul 6"}}},{"node":{"id":"cda20318-6650-5b01-96a7-c8a9436ea427","frontmatter":{"path":"/osa-7/1-moduler","title":"Moduler"}}},{"node":{"id":"c0858900-47db-5c88-8875-147a8e652fe4","frontmatter":{"path":"/osa-5/3-lexikon","title":"Lexikon"}}},{"node":{"id":"11da0cd6-66de-5139-aeea-f6536ce49cca","frontmatter":{"path":"/osa-7/2-slumpmassighet","title":"Slump"}}},{"node":{"id":"2190a210-ac82-5c3e-8671-037f9247c83f","frontmatter":{"path":"/osa-7/3-tid-datum","title":"Tid och datum"}}},{"node":{"id":"9970fc94-eb27-5148-b31b-e887b737b7b4","frontmatter":{"path":"/osa-7/4-behandla-data","title":"Behandla data"}}},{"node":{"id":"9de0b38c-9ab2-5dca-918f-53f58d473b4e","frontmatter":{"path":"/osa-7/5-egna-moduler","title":"Skapa dina egna moduler"}}},{"node":{"id":"6c06e867-814c-5c2c-b0d6-d6cfaaf92234","frontmatter":{"path":"/osa-5","title":"Modul 5"}}},{"node":{"id":"f7d5f344-d3b4-56c6-bf18-45edc2245759","frontmatter":{"path":"/osa-8/4-metoder-i-egna-klasser","title":"Metoder i egna klasser"}}},{"node":{"id":"303465de-b86a-519b-b1b5-9711b03072d9","frontmatter":{"path":"/osa-8/5-fler-exempel","title":"Fler exempel"}}},{"node":{"id":"a85852ab-8cf8-52b4-8872-4c73d5821319","frontmatter":{"path":"/osa-9/1-objekt-och-referenser","title":"Objekt och referenser"}}},{"node":{"id":"b6cd6b79-fcb4-535d-8d00-b4f849f4647f","frontmatter":{"path":"/osa-9/3-inkapsling","title":"Inkapsling"}}},{"node":{"id":"c6757168-dbea-5c4f-aa4e-c2c3bb0ca423","frontmatter":{"path":"/osa-9/4-metodernas-rackvidd","title":"Metodernas räckvidd"}}},{"node":{"id":"601766bc-2985-5820-a4a3-32bbb761c69b","frontmatter":{"path":"/osa-7/6-funktionaliteter-python","title":"Flera funktionaliteter i Python"}}},{"node":{"id":"08ceb5d1-6e8e-599a-995d-a1125f7a1f80","frontmatter":{"path":"/osa-9/5-klassattribut","title":"Klassattribut"}}},{"node":{"id":"b1f13f0c-169e-519f-9f42-f572bebd8535","frontmatter":{"path":"/osa-9","title":"Modul 9"}}},{"node":{"id":"4b4101dc-9e1f-5a4a-bb4e-dbb6a4ba5e0d","frontmatter":{"path":"/osa-8/3-egna-klasser","title":"Egna klasser"}}},{"node":{"id":"35f36261-94d8-509f-9fcb-59b3e08fc6a1","frontmatter":{"path":"/osa-8/2-klasser-och-objekt","title":"Klasser och objekt"}}},{"node":{"id":"53079b0b-f0d2-5c35-83a0-4f713e57ce72","frontmatter":{"path":"/osa-8/1-objekt-och-metoder","title":"Objekt och metoder"}}},{"node":{"id":"954e5006-2925-5035-a27c-10e05897cfa4","frontmatter":{"path":"/osa-9/6-fler-exempel-med-klasser","title":"Fler exempel med klasser"}}},{"node":{"id":"f1eeb001-f445-57c9-b2e7-380dabc25b86","frontmatter":{"path":"/osa-8","title":"Modul 8"}}},{"node":{"id":"ccc63fff-7834-5270-b69c-944db644a9ad","frontmatter":{"path":"/osa-7","title":"Modul 7"}}},{"node":{"id":"75ae0566-a8bf-5305-aee3-4c5bc0d2d5e9","frontmatter":{"path":"/osa-9/2-objekt-som-attribut","title":"Objekt som attribut "}}}]}},"pageContext":{}},
    "staticQueryHashes": ["1357757885","994120085"]}