{"id":206,"date":"2022-10-12T09:26:24","date_gmt":"2022-10-12T08:26:24","guid":{"rendered":"https:\/\/web01.usn.no\/~sir\/programmeringiskolen\/?page_id=206"},"modified":"2022-10-12T15:00:19","modified_gmt":"2022-10-12T14:00:19","slug":"mattespill","status":"publish","type":"page","link":"https:\/\/web01.usn.no\/~sir\/programmeringiskolen\/?page_id=206","title":{"rendered":"Mattespill"},"content":{"rendered":"\n<p>NB KUN FOR EKSEMPEL (SKAL FJERNES)<br>Forfatter: Geri Arne Hjelle<br>URL: <a rel=\"noreferrer noopener\" href=\"https:\/\/oppgaver.kidsakoder.no\/python\/mattespill\/mattespill\" target=\"_blank\">https:\/\/oppgaver.kidsakoder.no\/python\/mattespill\/mattespill<\/a> <\/p>\n\n\n\n<h5>Introduksjon<\/h5>\n\n\n\n<p>I denne leksjonen vil vi se litt n\u00e6rmere p\u00e5 hvordan Python jobber med tall, og vi vil lage et enkelt mattespill. Vi vil ogs\u00e5 se hvordan vi kan gj\u00f8re ting tilfeldige.<\/p>\n\n\n\n<p>Forutsetter kjennskap til <a href=\"https:\/\/web01.usn.no\/~sir\/programmeringiskolen\/?page_id=232\">print- og input-funksjonene<\/a>, <a href=\"https:\/\/web01.usn.no\/~sir\/programmeringiskolen\/?page_id=119\">variabler og operatorer<\/a>, <a href=\"https:\/\/web01.usn.no\/~sir\/programmeringiskolen\/?page_id=125\">if-tester<\/a> og <a href=\"https:\/\/web01.usn.no\/~sir\/programmeringiskolen\/?page_id=127\">for-sl\u00f8yfer<\/a>.<\/p>\n\n\n\n<h5>Om \u00f8velsen<\/h5>\n\n\n\n<p>I denne \u00f8velsen f\u00e5r elevene repetert print-funksjonen, regneartene og en praktisk anvendelse av betingelsen if, og l\u00f8kker. I tillegg f\u00e5r de se hvordan python h\u00e5ndterer datatyper, hvordan feil om dette kan f\u00f8re til praktiske problemer i kj\u00f8ring av kode. Vi bruker ogs\u00e5 en random-funksjon som m\u00e5 importeres fra et bibliotek<\/p>\n\n\n\n<h5>Steg 1: De fire regneartene<\/h5>\n\n\n\n<p>Python er, som de fleste programmeringsspr\u00e5k, veldig glad i \u00e5 regne. La oss se hvordan vi kan f\u00e5 Python til \u00e5 regne for oss. Vi begynner med \u00e5 utforske hvordan vi kan bruke Python til \u00e5 regne ut enkle mattestykker. Les koden under, og pr\u00f8v \u00e5 gjette hva programmet gj\u00f8r. Kj\u00f8r deretter koden.<\/p>\n\n\n\n<p><iframe loading=\"lazy\" src=\"https:\/\/trinket.io\/embed\/python\/e4164c3340\" width=\"100%\" height=\"200\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" allowfullscreen=\"\"><\/iframe><\/p>\n\n\n\n<p>N\u00e5r programmet kj\u00f8rer vil det skrive ut 4 tall. Kjenner du igjen disse tallene? Skj\u00f8nner du hva symbolene * og \/ betyr? Endre gjerne p\u00e5 programmet og kj\u00f8r det flere ganger til du skj\u00f8nner hvordan Python bruker pluss, minus, gange og dele.<\/p>\n\n\n\n<h5>Steg 2: VI KASTER TERNING<\/h5>\n\n\n\n<p>For \u00e5 lage et mattespill vil vi bruke tilfeldige tall. Tilfeldige tall blir omtrent som \u00e5 sl\u00e5 terning for \u00e5 finne et tall.<\/p>\n\n\n\n<p>For \u00e5 lage tilfeldige tall skal vi bruke en ny Python-funksjon som heter randint (her er rand en forkortelse for random som betyr tilfeldig, og int en forkortelse for integer som betyr heltall). Denne funksjonen er ikke med i grunnpakken til Python, men ligger i stedet i et <a href=\"https:\/\/web01.usn.no\/~sir\/programmeringiskolen\/index.php\/programmering\/test-01\/grunnleggende-elementer\/biblioteker-og-pakker\/\">bibliotek<\/a> kalt random. Vi m\u00e5 derfor fortelle Python at vi vil bruke dette biblioteket. I biblioteket f\u00f8lger det med mange forskjellige funksjoner for \u00e5 generer tilfeldige tall, vi skal bruke funksjonen <code>randint()<\/code>.<\/p>\n\n\n\n<p><iframe loading=\"lazy\" src=\"https:\/\/trinket.io\/embed\/python\/c30d57c0e1\" width=\"100%\" height=\"400\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" allowfullscreen=\"\"><\/iframe><\/p>\n\n\n\n<p>N\u00e5r du kj\u00f8rer programmet vil det skrive ut et tilfeldig tall mellom 1 og 6. Kj\u00f8r programmet flere ganger. Forandrer tallet seg?<\/p>\n\n\n\n<p>Pr\u00f8v selv \u00e5 forandre programmet slik at det skriver ut tilfeldige tall mellom 1 og 20! Eller mellom -1 og 1.<\/p>\n\n\n\n<p>Programmet viser hvordan vi kan late som om vi sl\u00e5r \u00e8n terning i Python. Men hvordan kan vi late som om vi sl\u00e5r to terninger, og ser summen av dem?<\/p>\n\n\n\n<p>Vi kan ogs\u00e5 utvide programmet slik at det sl\u00e5r terning mange ganger. Dette gj\u00f8r vi enklest med for-l\u00f8kker. Hvis du for eksempel utvider programmet ditt som f\u00f8lger vil det se ut som om du sl\u00e5r to terninger 25 ganger:<\/p>\n\n\n\n<p><iframe loading=\"lazy\" src=\"https:\/\/trinket.io\/embed\/python\/645611e69f\" width=\"100%\" height=\"400\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" allowfullscreen=\"\"><\/iframe><\/p>\n\n\n\n<h5>Steg 3: En liten mattepr\u00f8ve<\/h5>\n\n\n\n<p>Vi kan n\u00e5 bruke tilfeldige tall til \u00e5 lage et enkelt mattespill. Vi begynner med \u00e5 trekke to tilfeldige tall, og skrive ut et sp\u00f8rsm\u00e5l til skjerm. Hva skjer n\u00e5r du kj\u00f8rer programmet?<\/p>\n\n\n\n<p><iframe loading=\"lazy\" src=\"https:\/\/trinket.io\/embed\/python\/dafbfd0901\" width=\"100%\" height=\"400\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" allowfullscreen=\"\"><\/iframe><\/p>\n\n\n\n<p>I kodesnutten over f\u00e5r vi en feilmelding og programmet stopper. I feilmeldingen kan du lese:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>TypeError: cannot concatenate 'str' and 'int' objects on line 6 in main.py<\/code><\/pre>\n\n\n\n<p>Dette M\u00c5 fikses f\u00f8r vi kan g\u00e5 videre i eksemplene under. Du husker kanskje at vi kan bruke + for \u00e5 sette sammen tekst? Men vi bruker ogs\u00e5 + for \u00e5 plusse sammen tall. I linjen over pr\u00f8ver vi \u00e5 bruke + p\u00e5 b\u00e5de tekst og tall, og da skj\u00f8nner ikke Python helt hva vi mener.<\/p>\n\n\n\n<p>For \u00e5 fortelle Python at her vil vi egentlig sette sammen tekst m\u00e5 vi bruke funksjonen str for \u00e5 gj\u00f8re om tallene til tekst (str er en forkortelse for streng, som er det vi kaller tekster p\u00e5 fagspr\u00e5ket). Endre den siste linjen slik at den ser slik ut i stedet, og kj\u00f8r p\u00e5 nytt:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\nprint(&#039;Hva er &#039; + str(tall1) + &#039; ganger &#039; + str(tall2) + &#039;?&#039;)\n<\/pre><\/div>\n\n\n<p>Virker programmet ditt bedre n\u00e5? Pr\u00f8v \u00e5 kj\u00f8re programmet flere ganger. Blir du stilt forskjellige sp\u00f8rsm\u00e5l?<\/p>\n\n\n\n<p><a href=\"https:\/\/web01.usn.no\/~sir\/programmeringiskolen\/?page_id=119\">Her kan du lese mer om datatyper, hvordan man endrer fra en type til en annen og utskrift<\/a><\/p>\n\n\n\n<p>Neste steg er at vi vil kunne svare p\u00e5 mattestykket. Til dette bruker vi igjen funksjonen input. Se f\u00f8lgende kode:<\/p>\n\n\n\n<p><iframe loading=\"lazy\" src=\"https:\/\/trinket.io\/embed\/python\/0cc8bf3059\" width=\"100%\" height=\"400\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" allowfullscreen=\"\"><\/iframe><\/p>\n\n\n\n<p>Legg merke til at programmet n\u00e5 venter p\u00e5 at du skal skrive inn et svar i tekstfeltet. Pr\u00f8v \u00e5 kj\u00f8re programmet flere ganger, og skriv inn forskjellige svar<\/p>\n\n\n\n<p>Vi skal n\u00e5 f\u00e5 programmet til \u00e5 sjekke at vi har svart riktig. For \u00e5 gj\u00f8re dette skal vi bruke noe som heter if-tester. Disse kan sjekke om noe er sant, og vi vil bruke dem for \u00e5 sjekke om det er sant at svaret ditt er likt med det faktiske svaret. Vi legger til en if-test nederst i programmet ditt slik som dette:<\/p>\n\n\n\n<p><iframe loading=\"lazy\" src=\"https:\/\/trinket.io\/embed\/python\/0000ed65dd\" width=\"100%\" height=\"600\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" allowfullscreen=\"\"><\/iframe><\/p>\n\n\n\n<p>Kj\u00f8r programmet ditt med forskjellige svar. Virker det? Hva skjer om du svarer feil p\u00e5 en oppgave? Hva skjer om du svarer riktig?<\/p>\n\n\n\n<p>Hmm \u2026 det er et problem med programmet v\u00e5rt. Programmet sier at vi svarer feil selv om vi svarer riktig!<\/p>\n\n\n\n<h5>Bug<\/h5>\n\n\n\n<p>Dette er et eksempel p\u00e5 noe vi kaller en bug i et program. Programmet kj\u00f8rer, men det gj\u00f8r ikke slik som vi hadde ment og forventet. Selve ordet bug betyr insekt, og grunnen til at dette ordet brukes er at i gamle dager var det faktisk et problem at insekter fl\u00f8y inn i datamaskiner og \u00f8dela programmer!<\/p>\n\n\n\n<p>Problemet med programmet v\u00e5rt er ikke helt lett \u00e5 finne, men siden programmet alltid sier at svaret v\u00e5rt er feil m\u00e5 det bety at <code>svar<\/code> aldri er helt lik <code>tall1 * tall2<\/code>. Igjen er problemet at Python mener at tekst og tall er forskjellige ting.<\/p>\n\n\n\n<p>N\u00e5r vi bruker input til \u00e5 lese inn svar vil dette <strong>alltid v\u00e6re tekst<\/strong>, selv om vi bare skriver inn tall. P\u00e5 samme m\u00e5te som vi kan bruke str for \u00e5 gj\u00f8re om tall til tekst kan vi bruke int for \u00e5 gj\u00f8re om tekst til tall (husk at int er en forkortelse for integer som betyr heltall).<\/p>\n\n\n\n<p>Endre if-linjen i programmet ditt til:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\nif int(svar) == tall1 * tall2:\n<\/pre><\/div>\n\n\n<p>Virker programmet bedre n\u00e5?<\/p>\n\n\n\n<h5>Steg 4: Telle riktige svar<\/h5>\n\n\n\n<p>Det er litt kjedelig \u00e5 alltid starte programmet p\u00e5 nytt. La oss pr\u00f8ve \u00e5 stille flere mattestykker etter hverandre.<\/p>\n\n\n\n<p>Hvordan kan vi lage en l\u00f8kke slik at programmet stiller oss for eksempel 5 mattestykker p\u00e5 rad f\u00f8r det avsluttes? Pr\u00f8v litt selv i det forrige kodevinduet f\u00f8r du g\u00e5r videre.<\/p>\n\n\n\n<p>Til slutt vil vi at programmet ogs\u00e5 skal telle hvor mange riktige svar vi klarer. For \u00e5 gj\u00f8re dette skal vi bruke en variabel som vi for eksempel kan kalle ant_rett. N\u00e5r vi begynner spillet passer vi p\u00e5 at denne er 0 siden vi ikke har svart noenting enda. Hver gang vi svarer riktig kan vi s\u00e5 \u00f8ke verdien av variabelen med 1. Om vi ogs\u00e5 legger til en melding til slutt om hvor mange riktige svar spilleren klarte vil programmet se omtrent ut som f\u00f8lger:<\/p>\n\n\n\n<p><iframe loading=\"lazy\" src=\"https:\/\/trinket.io\/embed\/python\/9653bde1a3\" width=\"100%\" height=\"600\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" allowfullscreen=\"\"><\/iframe><\/p>\n\n\n\n<p>I programmet over kan du endre p\u00e5 antall regnestykker og hvilken regneoperasjon du vil trene.<\/p>\n\n\n\n<p>Hva skjer hvis du pr\u00f8ver \u00e5 gj\u00f8re spillet om til et delespill? (Hint: kanskje man skal tenke omvendt n\u00e5r man lager sp\u00f8rsm\u00e5let? Lag oppgaven slik at svaret alltid er et heltall)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>NB KUN FOR EKSEMPEL (SKAL FJERNES)Forfatter: Geri Arne HjelleURL: https:\/\/oppgaver.kidsakoder.no\/python\/mattespill\/mattespill Introduksjon I denne leksjonen vil vi se litt n\u00e6rmere p\u00e5 hvordan Python jobber med tall, og vi vil lage et enkelt mattespill. Vi vil ogs\u00e5 se hvordan vi kan gj\u00f8re ting tilfeldige. Forutsetter kjennskap til print- og input-funksjonene, variabler og operatorer, if-tester og for-sl\u00f8yfer. Om [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":113,"menu_order":10,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/web01.usn.no\/~sir\/programmeringiskolen\/index.php?rest_route=\/wp\/v2\/pages\/206"}],"collection":[{"href":"https:\/\/web01.usn.no\/~sir\/programmeringiskolen\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/web01.usn.no\/~sir\/programmeringiskolen\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/web01.usn.no\/~sir\/programmeringiskolen\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/web01.usn.no\/~sir\/programmeringiskolen\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=206"}],"version-history":[{"count":37,"href":"https:\/\/web01.usn.no\/~sir\/programmeringiskolen\/index.php?rest_route=\/wp\/v2\/pages\/206\/revisions"}],"predecessor-version":[{"id":293,"href":"https:\/\/web01.usn.no\/~sir\/programmeringiskolen\/index.php?rest_route=\/wp\/v2\/pages\/206\/revisions\/293"}],"up":[{"embeddable":true,"href":"https:\/\/web01.usn.no\/~sir\/programmeringiskolen\/index.php?rest_route=\/wp\/v2\/pages\/113"}],"wp:attachment":[{"href":"https:\/\/web01.usn.no\/~sir\/programmeringiskolen\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}