{
    "componentChunkName": "component---src-templates-course-content-template-js",
    "path": "/osa-3/1-loopar-med-villkor",
    "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 skapa en loop med ett villkor"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"vet du vad vilka roller initiering, villkoret och uppdatering av variabler har i en loop"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"kan du skapa loopar med olika typer av villkor."}]},{"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":"I den förra delen bekantade vi oss med "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"while True"}]},{"type":"text","value":" -loopen som ett sätt för att upprepa delar av kod. Så som loopen är uppbyggd är villkoret alltid "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"True"}]},{"type":"text","value":", alltså sant. Vi måste då avsluta loopen manuellt med "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"break"}]},{"type":"text","value":" i något skede för att undvika en oändlig loop. Exempelvis:"}]},{"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":"# skriv ut tal tills värdet på variabeln a är 5"}]},{"type":"text","value":"\na "},{"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":"while"}]},{"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    "},{"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":"a"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n    a "},{"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":"if"}]},{"type":"text","value":" a "},{"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":"5"}]},{"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":"break"}]}]}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"1\n2\n3\n4"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Men förstås behöver villkoret inte alltid vara True, utan det kan vara vilket som helst Boolean-uttryck. while-satsens struktur ser ut så här:"}]},{"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":"while"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"<"}]},{"type":"text","value":"villkor"},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"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","operator"]},"children":[{"type":"text","value":"<"}]},{"type":"text","value":"block"},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":">"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Idén är att koden körs om och om igen så länge som villkoret är sant. Villkorets värde kollas inför varje ny iteratione och när det är "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"False"}]},{"type":"text","value":" kommer programmet inte att fortsätta köra loopen, utan i stället fortsätta med koden som kommer efter while-blocket."}]},{"type":"element","tagName":"span","properties":{"className":["gatsby-resp-image-wrapper"],"style":"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 417px; margin-bottom: 1rem;"},"children":[{"type":"text","value":"\n      "},{"type":"element","tagName":"a","properties":{"className":["gatsby-resp-image-link"],"href":"/static/f04729f75a5887689930a906bc04ff72/f27fb/3_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: 103.04347826086956%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAYAAABG1c6oAAAACXBIWXMAAAsSAAALEgHS3X78AAABsklEQVQ4y42VW6+CMBCE+f8/S5+MMdEX3zQao3hXwBvear49GVKBI92EtJTt7OzstkQuwN7vt42Px8Ndr9diTeu+ReVNvqPmer/dbi5Jkop/LWD5o7/h9XrZHHaj0agSzH8qDM/ns8uyrBIA0M1m4/r9vvnUpVub8uFwsA2y6XTqJpOJ2+/3brlc2vtut7M5I6zxv1wufwxFVWkdj8dCeNYGg4Gbz+cWKI5jNx6P3Xa7NbaM+KPrYrEwjaMyZT4KMM/zIv3n82ksAfUzkKVpavsinIgKC6Ks12ujj93vd2MhA7zX633pKqmUWQQjoq5WK9OE0QdkTWDo1+12LYh8fEDWGlMWQ0be1QloKpbY6XSyxv9ZFHSDPWAwn81m1jbI4rcWe+kEZKttm3I6YkgVxRDt/QYnGDWoALJJVfSPHSmhJwEZBe5/t5RDjp6OHfrSHjwU7GdRfl0OGLoBSGGYK2VpD3Nrm6arSxsQvdVquU6nY33bbrcLYB1FWEehdyEbeGCCXlRfAf0GDwYkXVqHh3Nc1wlf11cIKCmp/+ruxGCGcgZsOByG39hNDKmwtPvvn/IBsvFoyw9tBp8AAAAASUVORK5CYII='); 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/f04729f75a5887689930a906bc04ff72/a0b58/3_1_1.webp 230w","/static/f04729f75a5887689930a906bc04ff72/b6b2f/3_1_1.webp 417w"],"sizes":"(max-width: 417px) 100vw, 417px","type":"image/webp"},"children":[]},{"type":"text","value":"\n          "},{"type":"element","tagName":"source","properties":{"srcSet":["/static/f04729f75a5887689930a906bc04ff72/81c8e/3_1_1.png 230w","/static/f04729f75a5887689930a906bc04ff72/f27fb/3_1_1.png 417w"],"sizes":"(max-width: 417px) 100vw, 417px","type":"image/png"},"children":[]},{"type":"text","value":"\n          "},{"type":"element","tagName":"img","properties":{"className":["gatsby-resp-image-image"],"src":"/static/f04729f75a5887689930a906bc04ff72/f27fb/3_1_1.png","alt":"3 1 1","title":"3 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":"I den följande loopen har vi villkoret "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"tal < 10"}]},{"type":"text","value":". Blocket inom loopen kommer bara att köras då variabeln tal är mindre än tio."}]},{"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","builtin"]},"children":[{"type":"text","value":"int"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"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":"\"Ge ett tal: \""}]},{"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":"while"}]},{"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":"10"}]},{"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":"tal"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n    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":"1"}]},{"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":"\"Programmet är klart.\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Utskriften skulle kunna se ut så här:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Ge ett tal: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"4"}]},{"type":"text","value":"\n4\n5\n6\n7\n8\n9\nProgrammet är klart."}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Med den här strukturen kommer villkoret att kollas före blocket inom loopen körs. Det är möjligt att här blocket inte kommer att köras en enda gång. Till exempel så här:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Ge ett tal: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"12"}]},{"type":"text","value":"\nProgrammet är klart."}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Tolv är inte mindre än tio, så programmet skriver inte ut något tal alls."}]},{"type":"element","tagName":"h2","properties":{"id":"initialisering-villkor-och-uppdatering","style":"position:relative;"},"children":[{"type":"text","value":"Initialisering, villkor och uppdatering"},{"type":"element","tagName":"a","properties":{"href":"#initialisering-villkor-och-uppdatering","ariaLabel":"initialisering villkor och uppdatering 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 vi jobbar med while-loopar behöver vi komma ihåg tre steg: initialisering, ett villkor och uppdatering av variabler."}]},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Initialisering innebär att vi tilldelar startvärden till de variabler som används i loopens villkor. Det här behöver man göra före loopen i koden."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Villkoret bestämmer hur länge loopen körs och anges direkt efter while."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"För att undvika oändliga loopar, måste vi se till att värdet på någon variabel i villkoret uppdateras, så att loopen steg för steg närmar sig sitt slut."}]},{"type":"text","value":"\n"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Här presenterar vi stegen i ett exempel:"}]},{"type":"element","tagName":"span","properties":{"className":["gatsby-resp-image-wrapper"],"style":"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 701px; margin-bottom: 1rem;"},"children":[{"type":"text","value":"\n      "},{"type":"element","tagName":"a","properties":{"className":["gatsby-resp-image-link"],"href":"/static/a9e9068a5a4abf5977e87c6b64318418/49217/3_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: 40.43478260869565%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAABaUlEQVQoz1WRy3KbMABF2cfGBiT0RggBxnEn7Uw3/f8fOx3JidMuzkIj6c59NDruTOsPTDxw6wdue2DXD0I+CNuOzzdcynTKMSjHRTpaYWmF4aoCvZnpdKQ3iV5HmjEk3LLTl0ufGJcVMd9xc2TaZuwccWlCaI80nsvouUhbRTs1MRQhk5B+Q9hMY+xGCHd8fhC3n2iXcWFB+judzgx2o1OJwa1If2OwS/1c3BW3xd11DJw6yalXNM5mvFkwU8bEFaE8xk50KnCtbhyX8Rn1X74cCpdr7FJBoTkNilYHxHRjDBmbDoTPdHqujwtjuNWY50FxHvSLUz/y1gneOsm5f941ba9Q887x+w/LfrC9/2J/PJA6cC1OpKeVtgp+83TY67nG/+qvCl5UQPpEXFd0iJg411VNiCgfkG56jfDi81y6K3GLcFm4Cop5Z1x2bHSkY2F9z3VVFQLTllC+dKb/i/qNqkOcPykd/gWh5s8zQ4VpAgAAAABJRU5ErkJggg=='); 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/a9e9068a5a4abf5977e87c6b64318418/a0b58/3_1_2.webp 230w","/static/a9e9068a5a4abf5977e87c6b64318418/bc10c/3_1_2.webp 460w","/static/a9e9068a5a4abf5977e87c6b64318418/e2a71/3_1_2.webp 701w"],"sizes":"(max-width: 701px) 100vw, 701px","type":"image/webp"},"children":[]},{"type":"text","value":"\n          "},{"type":"element","tagName":"source","properties":{"srcSet":["/static/a9e9068a5a4abf5977e87c6b64318418/81c8e/3_1_2.png 230w","/static/a9e9068a5a4abf5977e87c6b64318418/08a84/3_1_2.png 460w","/static/a9e9068a5a4abf5977e87c6b64318418/49217/3_1_2.png 701w"],"sizes":"(max-width: 701px) 100vw, 701px","type":"image/png"},"children":[]},{"type":"text","value":"\n          "},{"type":"element","tagName":"img","properties":{"className":["gatsby-resp-image-image"],"src":"/static/a9e9068a5a4abf5977e87c6b64318418/49217/3_1_2.png","alt":"3 1 2","title":"3 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":"Om någon av de här tre komponenterna fattas kommer loopen antagligen inte att fungera korrekt. Ett vanligt misstag är att låta bli att uppdatera variabler:"}]},{"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":"1"}]},{"type":"text","value":"\n\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"while"}]},{"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":"10"}]},{"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":"tal"},{"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":"\"Programmet är klart.\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Här kommer värdet på variabeln "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"tal"}]},{"type":"text","value":" aldrig att ändras. Programmet är fast i en oändlig loop. Samma kod upprepas tills användaren avslutar programmet, till exempel med tangentkombinationen Control + C:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"1\n1\n1\n1\n1\n(det här fortsätter i all oändlighet...)"}]}]},{"type":"element","tagName":"in-browser-programming-exercise","properties":{"name":"Skriv ut siffror","tmcname":"osa03-00_utskrift_av_siffror"},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Skapa ett program som i en loop skriver ut vartannat tal från två till trettio. Varje tal skrivs ut på en ny rad."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Så här ska utskriften se ut:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"text","value":"\n2\n4\n6\n8\no.s.v. ...\n"}]}]},{"type":"element","tagName":"in-browser-programming-exercise","properties":{"name":"Nedräkning","tmcname":"osa03-01_nedrakning"},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Korrigera uppgiftens program..."}]},{"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":"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":"\"Klara?\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\nnummer "},{"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":"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":"\"Ge ett tal: \""}]},{"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":"while"}]},{"type":"text","value":" nummer "},{"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":"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":"nummer"},{"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":"\"Gå!\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"...så att det fungerar på följande sätt:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Klara?\nGe ett tal: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"5"}]},{"type":"text","value":"\n5\n4\n3\n2\n1\nGå!"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Använd inte en "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"while True"}]},{"type":"text","value":" -loop!"}]}]},{"type":"element","tagName":"h2","properties":{"id":"skriva-villkor","style":"position:relative;"},"children":[{"type":"text","value":"Skriva villkor"},{"type":"element","tagName":"a","properties":{"href":"#skriva-villkor","ariaLabel":"skriva villkor 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":"Alla Boolean-uttryck och kombinationer av dem kan användas som villkor i en while-loop. Till exempel skriver följande program ut vart tredje tal förutsatt att det är mindre än 100 och inte delbart med fem:"}]},{"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","builtin"]},"children":[{"type":"text","value":"int"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"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":"\"Ge ett tal: \""}]},{"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":"while"}]},{"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":"100"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"and"}]},{"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":"5"}]},{"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":"0"}]},{"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":"tal"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n    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":"3"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Här följer två exempel på utskriften från programmet:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Ge ett tal: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"28"}]},{"type":"text","value":"\n28\n31\n34\n37"}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Ge ett tal: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"96"}]},{"type":"text","value":"\n96\n99"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"När man ger programmet värdet 28 kommer loopen att avslutas med 37, eftersom nästa tal är 40 – och är dividerbart med fem. När man ger värdet 96 kommer loopen att avsluta med 99 eftersom nästa tal är 102 – som inte är mindre än 100."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"När du skriver en loop är det viktigt att se till att loopen alltid kommer att avslutas vid något skede. Det här programmet avslutas – eller inte – beroende på det värde som ges:"}]},{"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":"nummer "},{"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":"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":"\"Ge ett tal: \""}]},{"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":"while"}]},{"type":"text","value":" nummer "},{"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":"10"}]},{"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":"nummer"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n    nummer "},{"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":"2"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Om man ger ett jämnt tal som är lika med tio eller mindre, kommer loopen att avslutas:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Ge ett tal: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"4"}]},{"type":"text","value":"\n4\n6\n8"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"I övriga fall kommer loopen att fortsätta oändligt eftersom det inte då finns något sätt för variabeln att bli lika med tio. Till exempel skulle 3 och 12 leda till en oändlig loop."}]},{"type":"element","tagName":"in-browser-programming-exercise","properties":{"name":"Siffror","tmcname":"osa03-02_siffror"},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Skapa ett program som skriver ut alla tal som är lägre än det tal som användaren matat in. Börja från ett."}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Fram till talet: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"5"}]},{"type":"text","value":"\n1\n2\n3\n4"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Använd inte "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"True"}]},{"type":"text","value":" som villkor i while-loopen!"}]}]},{"type":"element","tagName":"h2","properties":{"id":"tips-for-debuggning","style":"position:relative;"},"children":[{"type":"text","value":"Tips för debuggning"},{"type":"element","tagName":"a","properties":{"href":"#tips-for-debuggning","ariaLabel":"tips for debuggning 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":"Föreställ dig att du håller på att skapa ett aningen mer komplicerat program, som det i den följande uppgiften – "},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"Potenser av två"}]},{"type":"text","value":". Du kunde till exempel börja så här:"}]},{"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":"stanna "},{"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":"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":"\"Fram till talet\""}]},{"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":"\ntal "},{"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":"while"}]},{"type":"text","value":" tal "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"=="}]},{"type":"text","value":" stanna"},{"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":"# kod"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Programmet börjar med att läsa in det tal som användaren matar in och fortsätter till en while-loop med ett villkor."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Det är sannolikt att koden inte kommer att fungera på önskat sätt från början. Den kan behöva testas tio- eller till och med hundratals gånger före den fungerar korrekt."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Den här kodsnutten ber alltid om indata av användaren, vilket gör testandet långsamt och arbetsdrygt. Varje gång programmet testas måste ett värde anges."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Ett sätt att bli av med problemet är att hårdkoda ett värde i koden medan den testas:"}]},{"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":"# vi hårdkodar värdet här tills vidare"}]},{"type":"text","value":"\nstanna "},{"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":"8"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","comment"]},"children":[{"type":"text","value":"# int(input(\"Fram till talet\"))"}]},{"type":"text","value":"\ntal "},{"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":"while"}]},{"type":"text","value":" tal "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"=="}]},{"type":"text","value":" stanna"},{"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":"# kod"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"När programmet fungerar med det hårdkodade värdet, kan man enkelt testa med andra hårdkodade värden. När allt fungerar korrekt kan man gå tillbaka till att testa programmet så att användaren anger värdet."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Det här tricket fungerar väl med flera av de tester som används i betygsättningen av den här kursens uppgifter. Om testet berättar att något är fel med till exempel värdet 42 så kan värdet tillfälligt hårdkodas i programmet medan du letar efter buggen:"}]},{"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":"# testet meddelade att koden inte fungerade korrekt då indatat är 42"}]},{"type":"text","value":"\nstanna "},{"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":" "},{"type":"element","tagName":"span","properties":{"className":["token","comment"]},"children":[{"type":"text","value":"# int(input(\"Fram till talet\"))"}]},{"type":"text","value":"\ntal "},{"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":"while"}]},{"type":"text","value":" tal "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"=="}]},{"type":"text","value":" stanna"},{"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":"# kod"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Debuggning med hjälp av "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"print"}]},{"type":"text","value":"-satsen nämndes några gånger under den förra kursmodulen. De program som du skapar kommer att bli mer invecklade i och med att vi kommer längre i kursen. Då kommer mängden debuggning som du behöver göra också antagligen att öka i samma proportion. Vanliga orsaker till buggar finns ofta i de villkor som ska avsluta loopar – de fungerar eventuellt korrekt för vissa värden, medan andra värden orsakar problem. Det är inte alltid heller lätt att lägga märke till de här felen."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Därför är det nu dags att använda dig av "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"print"}]},{"type":"text","value":"-satser för att debugga – om du inte redan har gjort det. Du hittar instruktioner i den första och fjärde delen av modul 2."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Vid sidan om "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"print"}]},{"type":"text","value":"-satser finns även andra verktyg som kan använda för debuggning. Ett av dem är "},{"type":"element","tagName":"a","properties":{"href":"https://pythontutor.com/visualize.html","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"visualiseringsverktyget"}]},{"type":"text","value":" på "},{"type":"element","tagName":"a","properties":{"href":"https://pythontutor.com/","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"Python Tutor"}]},{"type":"text","value":" -webbsidan. Verktyget låter dig köra din kod rad för rad och visar också de värden som är lagrade i variabler vid varje steg."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Koden – med några problem – från den förra delen visualiseras med Python Tutor i följande bild:"}]},{"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/d0cc22babf6824495497d96f07b56664/95fa1/3_1_0.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: 69.1304347826087%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAIAAACgpqunAAAACXBIWXMAABYlAAAWJQFJUiTwAAABYUlEQVQoz42S3VLcMAxG8/4v15vOMFN6AdklIRv/xIkVSbYlM8Sww7alcCbjKx99kpVOVetBBHwaLn6JIqIHtVZVned5mqZ2Lsuy77scqGqnqoi4huD86gPAnkTetHaez+e+78dxGMcRAFqSqopIV2sFAGstQBQpOTEzIWIppV26ttZoseWgy4lFxFo7jqO1LoSAuMcYc85N45Q4F2s982vhEMK1UCdMrdLpdHLOxRhb5pVfD88/7h5/nxyyXMd5lw8z5+ycI6J930spH7vtR/vzvn94ski53tKVUkQkpTQMw7Zt3vuPyX/P/KfcOKZFVSUiACCiZrbF/VsWEUT03htjAIA5AQAiMrO+82myiGzbdrlcvHNh8d6/Pngzv25bVUspKXHYYJoX4wLR//Z8Izvn2uqK1JRVbm9+1XbJxGystda0b57nEEJbYfuHP08ODM4Ha2Zj+r6fpmldVyL6TvIL8JgySYPZRccAAAAASUVORK5CYII='); 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/d0cc22babf6824495497d96f07b56664/a0b58/3_1_0.webp 230w","/static/d0cc22babf6824495497d96f07b56664/bc10c/3_1_0.webp 460w","/static/d0cc22babf6824495497d96f07b56664/966d8/3_1_0.webp 920w","/static/d0cc22babf6824495497d96f07b56664/445df/3_1_0.webp 1380w","/static/d0cc22babf6824495497d96f07b56664/a8768/3_1_0.webp 1816w"],"sizes":"(max-width: 920px) 100vw, 920px","type":"image/webp"},"children":[]},{"type":"text","value":"\n          "},{"type":"element","tagName":"source","properties":{"srcSet":["/static/d0cc22babf6824495497d96f07b56664/81c8e/3_1_0.png 230w","/static/d0cc22babf6824495497d96f07b56664/08a84/3_1_0.png 460w","/static/d0cc22babf6824495497d96f07b56664/c0255/3_1_0.png 920w","/static/d0cc22babf6824495497d96f07b56664/b1001/3_1_0.png 1380w","/static/d0cc22babf6824495497d96f07b56664/95fa1/3_1_0.png 1816w"],"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/d0cc22babf6824495497d96f07b56664/c0255/3_1_0.png","alt":"3 1 0","title":"3 1 0","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":"Den röda pilen visar var programmet körs för tillfället. Verktyget visar vad som har skrivits ut fram till pilen och visar också vilka värden varje variabel har i varje steg."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Det enda du behöver för att köra visualiseringsverktyget är att kopiera och klistra in din kod i verktygets "},{"type":"element","tagName":"a","properties":{"href":"https://pythontutor.com/visualize.html","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"kodfönster"}]},{"type":"text","value":". Verktyget har en del begränsningar jämfört med den Python-version som används under den här kursen. Om du stöter på konstiga felmeddelanden kan det löna sig att använda någon annan metod för att debugga."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"De som har sysslat med programmering en längre tid använder sällan visualiseringsverktyg, men för en nybörjare kan verktyget verkligen vara till hjälp. Det är osannolikt att man får ett program att fungera av en slump. Det är nödvändigt att man som programmerare förstår vilka värden ens programkod skapar vid ett visst skede medan programmet körs. Om de värden som lagras i variabler inte är sådana som man förväntar sig, finns det högst sannolikt en bugg i programmet."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Visualiseringsverktyget och "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"print"}]},{"type":"text","value":"-satser är båda bra sätt för en programmerare att med egna ögon se att programmet gör exakt det som det ska göra."}]},{"type":"element","tagName":"in-browser-programming-exercise","properties":{"name":"Potenser av två","tmcname":"osa03-03_potenser_av_tva"},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Skapa ett program som först skriver ut 1 och därefter alltid det föregående talet multiplicerat med två."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Programmet avslutas då man skrivit ut det tal som är högst lika stort som det värde användaren angett. Programmet ska alltså inte skriva ut något tal som är större än det användaren matat in!"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Fram till talet: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"8"}]},{"type":"text","value":"\n1\n2\n4\n8"}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Fram till talet: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"20"}]},{"type":"text","value":"\n1\n2\n4\n8\n16"}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Fram till talet: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"100"}]},{"type":"text","value":"\n1\n2\n4\n8\n16\n32\n64"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Använd inte villkoret "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"True"}]},{"type":"text","value":" i while-satsen!"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Hur räknar man potenser av två? Den första potensen av två är 1. Den nästa potensen får man genom att multiplicera 1 med 2, resultatet är 2. Den nästa potensen får man på samma sätt: "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"2 * 2 = 4"}]},{"type":"text","value":". Därefter "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"4 * 2 = 8"}]},{"type":"text","value":" o.s.v."}]}]},{"type":"element","tagName":"in-browser-programming-exercise","properties":{"name":"n:te potensen","tmcname":"osa03-04_nte_potensen"},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Ändra på det föregående programmet så att programmet räknar den n:te potensen. Användaren anger värdet på "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"n"}]},{"type":"text","value":" (i föregående programmet var värdet alltid 2)."}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Fram till talet: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"27"}]},{"type":"text","value":"\nUpphöjt till: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"3"}]},{"type":"text","value":"\n1\n3\n9\n27"}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Fram till talet: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"1234567"}]},{"type":"text","value":"\nUpphöjt till: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"10"}]},{"type":"text","value":"\n1\n10\n100\n1000\n10000\n100000\n1000000"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Använd inte villkoret "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"True"}]},{"type":"text","value":" i while-satsen i den här uppgiften!"}]}]},{"type":"element","tagName":"in-browser-programming-exercise","properties":{"name":"Summan av påvarandra följande tal, version 1","tmcname":"osa03-04a_varandra_foljandes_summa_1"},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Skapa ett program som beräknar summan av påvaranda följande tal "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"1 + 2 + 3 + ..."}]},{"type":"text","value":", tills summan är minst lika stor som det tal användaren angett."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Så här fungerar programmet:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Fram till talet: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"2"}]},{"type":"text","value":"\n3"}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Fram till talet: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"10"}]},{"type":"text","value":"\n10"}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Fram till talet: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"18"}]},{"type":"text","value":"\n21"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Du kan anta att det tal användaren matar in är två eller större."}]}]},{"type":"element","tagName":"h2","properties":{"id":"bilda-strangar","style":"position:relative;"},"children":[{"type":"text","value":"Bilda strängar"},{"type":"element","tagName":"a","properties":{"href":"#bilda-strangar","ariaLabel":"bilda strangar 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":"Under kursens första vecka lärde vi oss att det är möjligt att kombinera strängar med hjälp av "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"+"}]},{"type":"text","value":"-operatorn. Till exempel är detta helt korrekt Python-kod:"}]},{"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":"\"Ris\""}]},{"type":"text","value":"\n"},{"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","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":"\", sås\""}]},{"type":"text","value":"\n"},{"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","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":"\" och Python\""}]},{"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","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":"Ris, sås och Python"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"+="}]},{"type":"text","value":"-operatorn låter oss skriva ovanstående lite mer kompakt:"}]},{"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":"\"Ris\""}]},{"type":"text","value":"\n"},{"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":"\", sås\""}]},{"type":"text","value":"\n"},{"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":"\" och Python\""}]},{"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","builtin"]},"children":[{"type":"text","value":"ord"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Det här gäller också f-strängar som kan vara nyttiga då värden lagrade i strängar behövs som delar av en resulterande sträng. Till exempel kan vi skriva så här:"}]},{"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":"kurs "},{"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":"\"Introkurs i programmering\""}]},{"type":"text","value":"\nvitsord "},{"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":"4"}]},{"type":"text","value":"\n\ntext "},{"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":"\"Du fick \""}]},{"type":"text","value":"\ntext "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"+="}]},{"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\"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":"vitsord"},{"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":"text","value":"\ntext "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"+="}]},{"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\"i kursen "}]},{"type":"element","tagName":"span","properties":{"className":["token","interpolation"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"{"}]},{"type":"text","value":"kurs"},{"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":"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":"text"},{"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":"Du fick vitsordet 4 i kursen Introkurs i programmering"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"I det förra exemplet beräknade du summan av på varandra följande tal genom att alltid öka värdet inne i loopen."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Samma fungerar också för strängar – du kan lägga till nya delar i en sträng inom en loop. Den här tekniken kan vara till nytta i följande uppgift."}]},{"type":"element","tagName":"in-browser-programming-exercise","properties":{"name":"Summa av varandra följande tal, version 2","tmcname":"osa03-05_varandra_foljandes_summa_2"},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Skapa en mer avancerad version av det föregående programmet. Nu ska programmet visa hur man kom till det resultat som man kommit fram till:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Fram till talet: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"2"}]},{"type":"text","value":"\nRäknade 1 + 2 = 3"}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Fram till talet: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"10"}]},{"type":"text","value":"\nRäknade 1 + 2 + 3 + 4 = 10"}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Fram till talet: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"18"}]},{"type":"text","value":"\nRäknade 1 + 2 + 3 + 4 + 5 + 6 = 21"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Du kan anta att det tal användaren matar in är två eller större."}]}]},{"type":"element","tagName":"div","properties":{},"children":[{"type":"element","tagName":"quiz","properties":{"id":"f4bbb3b4-5e00-503a-a5c3-bb0253afc1ca"},"children":[]}]}]},"html":"<div><text-box variant='learningObjectives' name='Lärandemål'><p>Efter den här delen</p><ul>\n<li>kan du skapa en loop med ett villkor</li>\n<li>vet du vad vilka roller initiering, villkoret och uppdatering av variabler har i en loop</li>\n<li>kan du skapa loopar med olika typer av villkor.</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>I den förra delen bekantade vi oss med <code class=\"language-text\">while True</code> -loopen som ett sätt för att upprepa delar av kod. Så som loopen är uppbyggd är villkoret alltid <code class=\"language-text\">True</code>, alltså sant. Vi måste då avsluta loopen manuellt med <code class=\"language-text\">break</code> i något skede för att undvika en oändlig loop. Exempelvis:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># skriv ut tal tills värdet på variabeln a är 5</span>\na <span class=\"token operator\">=</span> <span class=\"token number\">1</span>\n<span class=\"token keyword\">while</span> <span class=\"token boolean\">True</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">)</span>\n    a <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n    <span class=\"token keyword\">if</span> a <span class=\"token operator\">==</span> <span class=\"token number\">5</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">break</span></code></pre></div><sample-output><p>1\n2\n3\n4</p></sample-output><p>Men förstås behöver villkoret inte alltid vara True, utan det kan vara vilket som helst Boolean-uttryck. while-satsens struktur ser ut så här:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">while</span> <span class=\"token operator\">&lt;</span>villkor<span class=\"token operator\">></span><span class=\"token punctuation\">:</span>\n    <span class=\"token operator\">&lt;</span>block<span class=\"token operator\">></span></code></pre></div><p>Idén är att koden körs om och om igen så länge som villkoret är sant. Villkorets värde kollas inför varje ny iteratione och när det är <code class=\"language-text\">False</code> kommer programmet inte att fortsätta köra loopen, utan i stället fortsätta med koden som kommer efter while-blocket.</p><span class=\"gatsby-resp-image-wrapper\" style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 417px; margin-bottom: 1rem;\">\n      <a class=\"gatsby-resp-image-link\" href=\"/static/f04729f75a5887689930a906bc04ff72/f27fb/3_1_1.png\" style=\"display: block\" target=\"_blank\" rel=\"noopener\">\n    <span class=\"gatsby-resp-image-background-image\" style=\"padding-bottom: 103.04347826086956%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAYAAABG1c6oAAAACXBIWXMAAAsSAAALEgHS3X78AAABsklEQVQ4y42VW6+CMBCE+f8/S5+MMdEX3zQao3hXwBvear49GVKBI92EtJTt7OzstkQuwN7vt42Px8Ndr9diTeu+ReVNvqPmer/dbi5Jkop/LWD5o7/h9XrZHHaj0agSzH8qDM/ns8uyrBIA0M1m4/r9vvnUpVub8uFwsA2y6XTqJpOJ2+/3brlc2vtut7M5I6zxv1wufwxFVWkdj8dCeNYGg4Gbz+cWKI5jNx6P3Xa7NbaM+KPrYrEwjaMyZT4KMM/zIv3n82ksAfUzkKVpavsinIgKC6Ks12ujj93vd2MhA7zX633pKqmUWQQjoq5WK9OE0QdkTWDo1+12LYh8fEDWGlMWQ0be1QloKpbY6XSyxv9ZFHSDPWAwn81m1jbI4rcWe+kEZKttm3I6YkgVxRDt/QYnGDWoALJJVfSPHSmhJwEZBe5/t5RDjp6OHfrSHjwU7GdRfl0OGLoBSGGYK2VpD3Nrm6arSxsQvdVquU6nY33bbrcLYB1FWEehdyEbeGCCXlRfAf0GDwYkXVqHh3Nc1wlf11cIKCmp/+ruxGCGcgZsOByG39hNDKmwtPvvn/IBsvFoyw9tBp8AAAAASUVORK5CYII='); background-size: cover; display: block;\"></span>\n  <picture>\n          <source srcset=\"/static/f04729f75a5887689930a906bc04ff72/a0b58/3_1_1.webp 230w,\n/static/f04729f75a5887689930a906bc04ff72/b6b2f/3_1_1.webp 417w\" sizes=\"(max-width: 417px) 100vw, 417px\" type=\"image/webp\">\n          <source srcset=\"/static/f04729f75a5887689930a906bc04ff72/81c8e/3_1_1.png 230w,\n/static/f04729f75a5887689930a906bc04ff72/f27fb/3_1_1.png 417w\" sizes=\"(max-width: 417px) 100vw, 417px\" type=\"image/png\">\n          <img class=\"gatsby-resp-image-image\" src=\"/static/f04729f75a5887689930a906bc04ff72/f27fb/3_1_1.png\" alt=\"3 1 1\" title=\"3 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>I den följande loopen har vi villkoret <code class=\"language-text\">tal &lt; 10</code>. Blocket inom loopen kommer bara att köras då variabeln tal är mindre än tio.</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 builtin\">int</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Ge ett tal: \"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">while</span> tal <span class=\"token operator\">&lt;</span> <span class=\"token number\">10</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>tal<span class=\"token punctuation\">)</span>\n    tal <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Programmet är klart.\"</span><span class=\"token punctuation\">)</span></code></pre></div><p>Utskriften skulle kunna se ut så här:</p><sample-output><p>Ge ett tal: <strong>4</strong>\n4\n5\n6\n7\n8\n9\nProgrammet är klart.</p></sample-output><p>Med den här strukturen kommer villkoret att kollas före blocket inom loopen körs. Det är möjligt att här blocket inte kommer att köras en enda gång. Till exempel så här:</p><sample-output><p>Ge ett tal: <strong>12</strong>\nProgrammet är klart.</p></sample-output><p>Tolv är inte mindre än tio, så programmet skriver inte ut något tal alls.</p><h2 id=\"initialisering-villkor-och-uppdatering\" style=\"position:relative;\">Initialisering, villkor och uppdatering<a href=\"#initialisering-villkor-och-uppdatering\" aria-label=\"initialisering villkor och uppdatering 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 vi jobbar med while-loopar behöver vi komma ihåg tre steg: initialisering, ett villkor och uppdatering av variabler.</p><ul>\n<li>Initialisering innebär att vi tilldelar startvärden till de variabler som används i loopens villkor. Det här behöver man göra före loopen i koden.</li>\n<li>Villkoret bestämmer hur länge loopen körs och anges direkt efter while.</li>\n<li>För att undvika oändliga loopar, måste vi se till att värdet på någon variabel i villkoret uppdateras, så att loopen steg för steg närmar sig sitt slut.</li>\n</ul><p>Här presenterar vi stegen i ett exempel:</p><span class=\"gatsby-resp-image-wrapper\" style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 701px; margin-bottom: 1rem;\">\n      <a class=\"gatsby-resp-image-link\" href=\"/static/a9e9068a5a4abf5977e87c6b64318418/49217/3_1_2.png\" style=\"display: block\" target=\"_blank\" rel=\"noopener\">\n    <span class=\"gatsby-resp-image-background-image\" style=\"padding-bottom: 40.43478260869565%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAABaUlEQVQoz1WRy3KbMABF2cfGBiT0RggBxnEn7Uw3/f8fOx3JidMuzkIj6c59NDruTOsPTDxw6wdue2DXD0I+CNuOzzdcynTKMSjHRTpaYWmF4aoCvZnpdKQ3iV5HmjEk3LLTl0ufGJcVMd9xc2TaZuwccWlCaI80nsvouUhbRTs1MRQhk5B+Q9hMY+xGCHd8fhC3n2iXcWFB+judzgx2o1OJwa1If2OwS/1c3BW3xd11DJw6yalXNM5mvFkwU8bEFaE8xk50KnCtbhyX8Rn1X74cCpdr7FJBoTkNilYHxHRjDBmbDoTPdHqujwtjuNWY50FxHvSLUz/y1gneOsm5f941ba9Q887x+w/LfrC9/2J/PJA6cC1OpKeVtgp+83TY67nG/+qvCl5UQPpEXFd0iJg411VNiCgfkG56jfDi81y6K3GLcFm4Cop5Z1x2bHSkY2F9z3VVFQLTllC+dKb/i/qNqkOcPykd/gWh5s8zQ4VpAgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"></span>\n  <picture>\n          <source srcset=\"/static/a9e9068a5a4abf5977e87c6b64318418/a0b58/3_1_2.webp 230w,\n/static/a9e9068a5a4abf5977e87c6b64318418/bc10c/3_1_2.webp 460w,\n/static/a9e9068a5a4abf5977e87c6b64318418/e2a71/3_1_2.webp 701w\" sizes=\"(max-width: 701px) 100vw, 701px\" type=\"image/webp\">\n          <source srcset=\"/static/a9e9068a5a4abf5977e87c6b64318418/81c8e/3_1_2.png 230w,\n/static/a9e9068a5a4abf5977e87c6b64318418/08a84/3_1_2.png 460w,\n/static/a9e9068a5a4abf5977e87c6b64318418/49217/3_1_2.png 701w\" sizes=\"(max-width: 701px) 100vw, 701px\" type=\"image/png\">\n          <img class=\"gatsby-resp-image-image\" src=\"/static/a9e9068a5a4abf5977e87c6b64318418/49217/3_1_2.png\" alt=\"3 1 2\" title=\"3 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>Om någon av de här tre komponenterna fattas kommer loopen antagligen inte att fungera korrekt. Ett vanligt misstag är att låta bli att uppdatera variabler:</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\">1</span>\n\n<span class=\"token keyword\">while</span> tal <span class=\"token operator\">&lt;</span> <span class=\"token number\">10</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>tal<span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Programmet är klart.\"</span><span class=\"token punctuation\">)</span></code></pre></div><p>Här kommer värdet på variabeln <code class=\"language-text\">tal</code> aldrig att ändras. Programmet är fast i en oändlig loop. Samma kod upprepas tills användaren avslutar programmet, till exempel med tangentkombinationen Control + C:</p><sample-output><p>1\n1\n1\n1\n1\n(det här fortsätter i all oändlighet...)</p></sample-output><in-browser-programming-exercise name=\"Skriv ut siffror\" tmcname=\"osa03-00_utskrift_av_siffror\"><p>Skapa ett program som i en loop skriver ut vartannat tal från två till trettio. Varje tal skrivs ut på en ny rad.</p><p>Så här ska utskriften se ut:</p><sample-output>\n2\n4\n6\n8\no.s.v. ...\n</sample-output></in-browser-programming-exercise><in-browser-programming-exercise name=\"Nedräkning\" tmcname=\"osa03-01_nedrakning\"><p>Korrigera uppgiftens program...</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Klara?\"</span><span class=\"token punctuation\">)</span>\nnummer <span class=\"token operator\">=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Ge ett tal: \"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">while</span> nummer <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>nummer<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Gå!\"</span><span class=\"token punctuation\">)</span></code></pre></div><p>...så att det fungerar på följande sätt:</p><sample-output><p>Klara?\nGe ett tal: <strong>5</strong>\n5\n4\n3\n2\n1\nGå!</p></sample-output><p>Använd inte en <code class=\"language-text\">while True</code> -loop!</p></in-browser-programming-exercise><h2 id=\"skriva-villkor\" style=\"position:relative;\">Skriva villkor<a href=\"#skriva-villkor\" aria-label=\"skriva villkor 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>Alla Boolean-uttryck och kombinationer av dem kan användas som villkor i en while-loop. Till exempel skriver följande program ut vart tredje tal förutsatt att det är mindre än 100 och inte delbart med fem:</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 builtin\">int</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Ge ett tal: \"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">while</span> tal <span class=\"token operator\">&lt;</span> <span class=\"token number\">100</span> <span class=\"token keyword\">and</span> tal <span class=\"token operator\">%</span> <span class=\"token number\">5</span> <span class=\"token operator\">!=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>tal<span class=\"token punctuation\">)</span>\n    tal <span class=\"token operator\">+=</span> <span class=\"token number\">3</span></code></pre></div><p>Här följer två exempel på utskriften från programmet:</p><sample-output><p>Ge ett tal: <strong>28</strong>\n28\n31\n34\n37</p></sample-output><sample-output><p>Ge ett tal: <strong>96</strong>\n96\n99</p></sample-output><p>När man ger programmet värdet 28 kommer loopen att avslutas med 37, eftersom nästa tal är 40 – och är dividerbart med fem. När man ger värdet 96 kommer loopen att avsluta med 99 eftersom nästa tal är 102 – som inte är mindre än 100.</p><p>När du skriver en loop är det viktigt att se till att loopen alltid kommer att avslutas vid något skede. Det här programmet avslutas – eller inte – beroende på det värde som ges:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">nummer <span class=\"token operator\">=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Ge ett tal: \"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">while</span> nummer <span class=\"token operator\">!=</span> <span class=\"token number\">10</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>nummer<span class=\"token punctuation\">)</span>\n    nummer <span class=\"token operator\">+=</span> <span class=\"token number\">2</span></code></pre></div><p>Om man ger ett jämnt tal som är lika med tio eller mindre, kommer loopen att avslutas:</p><sample-output><p>Ge ett tal: <strong>4</strong>\n4\n6\n8</p></sample-output><p>I övriga fall kommer loopen att fortsätta oändligt eftersom det inte då finns något sätt för variabeln att bli lika med tio. Till exempel skulle 3 och 12 leda till en oändlig loop.</p><in-browser-programming-exercise name=\"Siffror\" tmcname=\"osa03-02_siffror\"><p>Skapa ett program som skriver ut alla tal som är lägre än det tal som användaren matat in. Börja från ett.</p><sample-output><p>Fram till talet: <strong>5</strong>\n1\n2\n3\n4</p></sample-output><p>Använd inte <code class=\"language-text\">True</code> som villkor i while-loopen!</p></in-browser-programming-exercise><h2 id=\"tips-for-debuggning\" style=\"position:relative;\">Tips för debuggning<a href=\"#tips-for-debuggning\" aria-label=\"tips for debuggning 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>Föreställ dig att du håller på att skapa ett aningen mer komplicerat program, som det i den följande uppgiften – <em>Potenser av två</em>. Du kunde till exempel börja så här:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">stanna <span class=\"token operator\">=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Fram till talet\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\ntal <span class=\"token operator\">=</span> <span class=\"token number\">1</span>\n<span class=\"token keyword\">while</span> tal <span class=\"token operator\">==</span> stanna<span class=\"token punctuation\">:</span>\n   <span class=\"token comment\"># kod</span></code></pre></div><p>Programmet börjar med att läsa in det tal som användaren matar in och fortsätter till en while-loop med ett villkor.</p><p>Det är sannolikt att koden inte kommer att fungera på önskat sätt från början. Den kan behöva testas tio- eller till och med hundratals gånger före den fungerar korrekt.</p><p>Den här kodsnutten ber alltid om indata av användaren, vilket gör testandet långsamt och arbetsdrygt. Varje gång programmet testas måste ett värde anges.</p><p>Ett sätt att bli av med problemet är att hårdkoda ett värde i koden medan den testas:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># vi hårdkodar värdet här tills vidare</span>\nstanna <span class=\"token operator\">=</span> <span class=\"token number\">8</span> <span class=\"token comment\"># int(input(\"Fram till talet\"))</span>\ntal <span class=\"token operator\">=</span> <span class=\"token number\">1</span>\n<span class=\"token keyword\">while</span> tal <span class=\"token operator\">==</span> stanna<span class=\"token punctuation\">:</span>\n   <span class=\"token comment\"># kod</span></code></pre></div><p>När programmet fungerar med det hårdkodade värdet, kan man enkelt testa med andra hårdkodade värden. När allt fungerar korrekt kan man gå tillbaka till att testa programmet så att användaren anger värdet.</p><p>Det här tricket fungerar väl med flera av de tester som används i betygsättningen av den här kursens uppgifter. Om testet berättar att något är fel med till exempel värdet 42 så kan värdet tillfälligt hårdkodas i programmet medan du letar efter buggen:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># testet meddelade att koden inte fungerade korrekt då indatat är 42</span>\nstanna <span class=\"token operator\">=</span> <span class=\"token number\">42</span> <span class=\"token comment\"># int(input(\"Fram till talet\"))</span>\ntal <span class=\"token operator\">=</span> <span class=\"token number\">1</span>\n<span class=\"token keyword\">while</span> tal <span class=\"token operator\">==</span> stanna<span class=\"token punctuation\">:</span>\n   <span class=\"token comment\"># kod</span></code></pre></div><p>Debuggning med hjälp av <code class=\"language-text\">print</code>-satsen nämndes några gånger under den förra kursmodulen. De program som du skapar kommer att bli mer invecklade i och med att vi kommer längre i kursen. Då kommer mängden debuggning som du behöver göra också antagligen att öka i samma proportion. Vanliga orsaker till buggar finns ofta i de villkor som ska avsluta loopar – de fungerar eventuellt korrekt för vissa värden, medan andra värden orsakar problem. Det är inte alltid heller lätt att lägga märke till de här felen.</p><p>Därför är det nu dags att använda dig av <code class=\"language-text\">print</code>-satser för att debugga – om du inte redan har gjort det. Du hittar instruktioner i den första och fjärde delen av modul 2.</p><p>Vid sidan om <code class=\"language-text\">print</code>-satser finns även andra verktyg som kan använda för debuggning. Ett av dem är <a href=\"https://pythontutor.com/visualize.html\" target=\"_blank\" rel=\"noopener noreferrer\">visualiseringsverktyget</a> på <a href=\"https://pythontutor.com/\" target=\"_blank\" rel=\"noopener noreferrer\">Python Tutor</a> -webbsidan. Verktyget låter dig köra din kod rad för rad och visar också de värden som är lagrade i variabler vid varje steg.</p><p>Koden – med några problem – från den förra delen visualiseras med Python Tutor i följande bild:</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/d0cc22babf6824495497d96f07b56664/95fa1/3_1_0.png\" style=\"display: block\" target=\"_blank\" rel=\"noopener\">\n    <span class=\"gatsby-resp-image-background-image\" style=\"padding-bottom: 69.1304347826087%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAIAAACgpqunAAAACXBIWXMAABYlAAAWJQFJUiTwAAABYUlEQVQoz42S3VLcMAxG8/4v15vOMFN6AdklIRv/xIkVSbYlM8Sww7alcCbjKx99kpVOVetBBHwaLn6JIqIHtVZVned5mqZ2Lsuy77scqGqnqoi4huD86gPAnkTetHaez+e+78dxGMcRAFqSqopIV2sFAGstQBQpOTEzIWIppV26ttZoseWgy4lFxFo7jqO1LoSAuMcYc85N45Q4F2s982vhEMK1UCdMrdLpdHLOxRhb5pVfD88/7h5/nxyyXMd5lw8z5+ycI6J930spH7vtR/vzvn94ski53tKVUkQkpTQMw7Zt3vuPyX/P/KfcOKZFVSUiACCiZrbF/VsWEUT03htjAIA5AQAiMrO+82myiGzbdrlcvHNh8d6/Pngzv25bVUspKXHYYJoX4wLR//Z8Izvn2uqK1JRVbm9+1XbJxGystda0b57nEEJbYfuHP08ODM4Ha2Zj+r6fpmldVyL6TvIL8JgySYPZRccAAAAASUVORK5CYII='); background-size: cover; display: block;\"></span>\n  <picture>\n          <source srcset=\"/static/d0cc22babf6824495497d96f07b56664/a0b58/3_1_0.webp 230w,\n/static/d0cc22babf6824495497d96f07b56664/bc10c/3_1_0.webp 460w,\n/static/d0cc22babf6824495497d96f07b56664/966d8/3_1_0.webp 920w,\n/static/d0cc22babf6824495497d96f07b56664/445df/3_1_0.webp 1380w,\n/static/d0cc22babf6824495497d96f07b56664/a8768/3_1_0.webp 1816w\" sizes=\"(max-width: 920px) 100vw, 920px\" type=\"image/webp\">\n          <source srcset=\"/static/d0cc22babf6824495497d96f07b56664/81c8e/3_1_0.png 230w,\n/static/d0cc22babf6824495497d96f07b56664/08a84/3_1_0.png 460w,\n/static/d0cc22babf6824495497d96f07b56664/c0255/3_1_0.png 920w,\n/static/d0cc22babf6824495497d96f07b56664/b1001/3_1_0.png 1380w,\n/static/d0cc22babf6824495497d96f07b56664/95fa1/3_1_0.png 1816w\" sizes=\"(max-width: 920px) 100vw, 920px\" type=\"image/png\">\n          <img class=\"gatsby-resp-image-image\" src=\"/static/d0cc22babf6824495497d96f07b56664/c0255/3_1_0.png\" alt=\"3 1 0\" title=\"3 1 0\" 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>Den röda pilen visar var programmet körs för tillfället. Verktyget visar vad som har skrivits ut fram till pilen och visar också vilka värden varje variabel har i varje steg.</p><p>Det enda du behöver för att köra visualiseringsverktyget är att kopiera och klistra in din kod i verktygets <a href=\"https://pythontutor.com/visualize.html\" target=\"_blank\" rel=\"noopener noreferrer\">kodfönster</a>. Verktyget har en del begränsningar jämfört med den Python-version som används under den här kursen. Om du stöter på konstiga felmeddelanden kan det löna sig att använda någon annan metod för att debugga.</p><p>De som har sysslat med programmering en längre tid använder sällan visualiseringsverktyg, men för en nybörjare kan verktyget verkligen vara till hjälp. Det är osannolikt att man får ett program att fungera av en slump. Det är nödvändigt att man som programmerare förstår vilka värden ens programkod skapar vid ett visst skede medan programmet körs. Om de värden som lagras i variabler inte är sådana som man förväntar sig, finns det högst sannolikt en bugg i programmet.</p><p>Visualiseringsverktyget och <code class=\"language-text\">print</code>-satser är båda bra sätt för en programmerare att med egna ögon se att programmet gör exakt det som det ska göra.</p><in-browser-programming-exercise name=\"Potenser av två\" tmcname=\"osa03-03_potenser_av_tva\"><p>Skapa ett program som först skriver ut 1 och därefter alltid det föregående talet multiplicerat med två.</p><p>Programmet avslutas då man skrivit ut det tal som är högst lika stort som det värde användaren angett. Programmet ska alltså inte skriva ut något tal som är större än det användaren matat in!</p><sample-output><p>Fram till talet: <strong>8</strong>\n1\n2\n4\n8</p></sample-output><sample-output><p>Fram till talet: <strong>20</strong>\n1\n2\n4\n8\n16</p></sample-output><sample-output><p>Fram till talet: <strong>100</strong>\n1\n2\n4\n8\n16\n32\n64</p></sample-output><p>Använd inte villkoret <code class=\"language-text\">True</code> i while-satsen!</p><p>Hur räknar man potenser av två? Den första potensen av två är 1. Den nästa potensen får man genom att multiplicera 1 med 2, resultatet är 2. Den nästa potensen får man på samma sätt: <code class=\"language-text\">2 * 2 = 4</code>. Därefter <code class=\"language-text\">4 * 2 = 8</code> o.s.v.</p></in-browser-programming-exercise><in-browser-programming-exercise name=\"n:te potensen\" tmcname=\"osa03-04_nte_potensen\"><p>Ändra på det föregående programmet så att programmet räknar den n:te potensen. Användaren anger värdet på <code class=\"language-text\">n</code> (i föregående programmet var värdet alltid 2).</p><sample-output><p>Fram till talet: <strong>27</strong>\nUpphöjt till: <strong>3</strong>\n1\n3\n9\n27</p></sample-output><sample-output><p>Fram till talet: <strong>1234567</strong>\nUpphöjt till: <strong>10</strong>\n1\n10\n100\n1000\n10000\n100000\n1000000</p></sample-output><p>Använd inte villkoret <code class=\"language-text\">True</code> i while-satsen i den här uppgiften!</p></in-browser-programming-exercise><in-browser-programming-exercise name=\"Summan av påvarandra följande tal, version 1\" tmcname=\"osa03-04a_varandra_foljandes_summa_1\"><p>Skapa ett program som beräknar summan av påvaranda följande tal <code class=\"language-text\">1 + 2 + 3 + ...</code>, tills summan är minst lika stor som det tal användaren angett.</p><p>Så här fungerar programmet:</p><sample-output><p>Fram till talet: <strong>2</strong>\n3</p></sample-output><sample-output><p>Fram till talet: <strong>10</strong>\n10</p></sample-output><sample-output><p>Fram till talet: <strong>18</strong>\n21</p></sample-output><p>Du kan anta att det tal användaren matar in är två eller större.</p></in-browser-programming-exercise><h2 id=\"bilda-strangar\" style=\"position:relative;\">Bilda strängar<a href=\"#bilda-strangar\" aria-label=\"bilda strangar 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>Under kursens första vecka lärde vi oss att det är möjligt att kombinera strängar med hjälp av <code class=\"language-text\">+</code>-operatorn. Till exempel är detta helt korrekt Python-kod:</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\">\"Ris\"</span>\n<span class=\"token builtin\">ord</span> <span class=\"token operator\">=</span> <span class=\"token builtin\">ord</span> <span class=\"token operator\">+</span> <span class=\"token string\">\", sås\"</span>\n<span class=\"token builtin\">ord</span> <span class=\"token operator\">=</span> <span class=\"token builtin\">ord</span> <span class=\"token operator\">+</span> <span class=\"token string\">\" och Python\"</span>\n\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>Ris, sås och Python</p></sample-output><p><code class=\"language-text\">+=</code>-operatorn låter oss skriva ovanstående lite mer kompakt:</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\">\"Ris\"</span>\n<span class=\"token builtin\">ord</span> <span class=\"token operator\">+=</span> <span class=\"token string\">\", sås\"</span>\n<span class=\"token builtin\">ord</span> <span class=\"token operator\">+=</span> <span class=\"token string\">\" och Python\"</span>\n\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><p>Det här gäller också f-strängar som kan vara nyttiga då värden lagrade i strängar behövs som delar av en resulterande sträng. Till exempel kan vi skriva så här:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">kurs <span class=\"token operator\">=</span> <span class=\"token string\">\"Introkurs i programmering\"</span>\nvitsord <span class=\"token operator\">=</span> <span class=\"token number\">4</span>\n\ntext <span class=\"token operator\">=</span> <span class=\"token string\">\"Du fick \"</span>\ntext <span class=\"token operator\">+=</span> <span class=\"token string-interpolation\"><span class=\"token string\">f\"vitsordet </span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>vitsord<span class=\"token punctuation\">}</span></span><span class=\"token string\"> \"</span></span>\ntext <span class=\"token operator\">+=</span> <span class=\"token string-interpolation\"><span class=\"token string\">f\"i kursen </span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>kurs<span class=\"token punctuation\">}</span></span><span class=\"token string\">\"</span></span>\n\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>text<span class=\"token punctuation\">)</span></code></pre></div><sample-output><p>Du fick vitsordet 4 i kursen Introkurs i programmering</p></sample-output><p>I det förra exemplet beräknade du summan av på varandra följande tal genom att alltid öka värdet inne i loopen.</p><p>Samma fungerar också för strängar – du kan lägga till nya delar i en sträng inom en loop. Den här tekniken kan vara till nytta i följande uppgift.</p><in-browser-programming-exercise name=\"Summa av varandra följande tal, version 2\" tmcname=\"osa03-05_varandra_foljandes_summa_2\"><p>Skapa en mer avancerad version av det föregående programmet. Nu ska programmet visa hur man kom till det resultat som man kommit fram till:</p><sample-output><p>Fram till talet: <strong>2</strong>\nRäknade 1 + 2 = 3</p></sample-output><sample-output><p>Fram till talet: <strong>10</strong>\nRäknade 1 + 2 + 3 + 4 = 10</p></sample-output><sample-output><p>Fram till talet: <strong>18</strong>\nRäknade 1 + 2 + 3 + 4 + 5 + 6 = 21</p></sample-output><p>Du kan anta att det tal användaren matar in är två eller större.</p></in-browser-programming-exercise><div><quiz id=\"f4bbb3b4-5e00-503a-a5c3-bb0253afc1ca\"></quiz></div></div>","frontmatter":{"path":"/osa-3/1-loopar-med-villkor","title":"Loopar med villkor"},"fileAbsolutePath":"/home/runner/work/ohjelmointi-26-sv/ohjelmointi-26-sv/data/osa-3/1-loopar-med-villkor.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"]}