1. Programmeringsintro
Programmeringsteknik
Versionen från 26 juni 2007 kl. 11.32 (redigera) KTH.SE:u1ndpe5c (Diskussion | bidrag) ← Gå till föregående ändring |
Nuvarande version (19 december 2008 kl. 13.16) (redigera) (ogör) KTH.SE:u1rp004j (Diskussion | bidrag) (→Installera Python på din dator) |
||
(87 mellanliggande versioner visas inte.) | |||
Rad 15: | Rad 15: | ||
</table> | </table> | ||
- | <p>Processorn sitter fast på en kretskort, ofta kallat moderkortet och är kopplat till flera olika minnen. Viktigaste minnena är registren i processorn, där alla beräkningar och tolkningar (t ex om 5 är större än 4) sker, RAM-minnet (Rapid Access Memory) där program ligger när de körs, och skivminnet (ofta kallat hårddisk) där program och dokument lagras för att vara kvar även när datorn har stängts av (till skillnad från RAM-minnet som töms varje gång strömmen stängs av). </p> | + | Processorn sitter fast på ett kretskort, ofta kallat |
+ | moderkortet och är kopplat till flera olika minnen. Viktigaste | ||
+ | minnena är registren i processorn, där alla beräkningar och | ||
+ | tolkningar (t ex om ett tal är större än ett annat) sker, | ||
+ | RAM-minnet (Random Access Memory) där program ligger när de | ||
+ | körs, och skivminnet (ofta kallat hårddisk) där program och | ||
+ | dokument lagras för att vara kvar även när datorn har stängts | ||
+ | av (till skillnad från RAM-minnet som töms varje gång strömmen | ||
+ | stängs av). | ||
<table> | <table> | ||
Rad 26: | Rad 34: | ||
</table> | </table> | ||
- | <p>Uppgifter som man brukar se i annonser om datorer är t ex datorhastighet mäts i MHz (MegaHertz), dvs miljoner operationer per sekund eller tom GHz (GigaHertz), dvs miljarder operationer per sekund. RAM-storlek som mäts i MB (MegaByte), dvs miljoner byte. En byte består av vanligen åtta bitar och kan t ex lagra ett tal mellan 0 och 255. En bit är den minsta minnesenheten på en dator och innehåller en etta eller en nolla. Skivminnet mäts också i byte och är något hundratal gånger större än RAM-minnet.</p> | + | Uppgifter som man brukar se i annonser om datorer är t ex |
+ | processorhastighet mätt i MHz (MegaHertz), dvs miljoner | ||
+ | cykler per sekund eller till och med GHz (GigaHertz), | ||
+ | dvs miljarder cykler per sekund. Betyder detta att en 2GHz | ||
+ | CPU är dubbelt så snabb som en 1MHz CPU? Inte nödvändigtvis. | ||
+ | Det beror också på hur mycket arbete varje CPU utför per | ||
+ | cykel. | ||
- | <p>Ibland hör man också benämningen ”data”. I IT-sammanhang betyder data | + | Datorns prestanda är också i högsta grad beroende av minnets |
- | endast information. Personer som använder data (eller ännu värre: | + | storlek och hastighet. RAM-storlek som mäts i MB (MegaByte), |
- | ”datan”) för att referera till själva datorn upplevs ofta som mindre | + | dvs miljoner byte. En byte består av vanligen åtta bitar och |
- | kunniga (se t ex Maria Bloms film Masjävlar) av de som skiljer på | + | kan t ex lagra ett tal mellan 0 och 255. En bit är den minsta |
- | datorer och informationen som datorerna behandlar. De kunniga kan | + | minnesenheten på en dator och innehåller en etta eller en |
- | också använda uttryck som ”datan” och ”min data”, men då som | + | nolla. Skivminnet mäts också i byte och är något hundratal |
- | slanguttryck. Vill du imponera ska du alltså använda uttrycken som | + | gånger större än RAM-minnet. |
- | slanguttryck, inte som om det verkligen hette så.</p> | + | |
- | <p>Om du glömmer bort vad ett visst ord betyder kan du slå upp det i [http://wiki.math.se/wikis/dd100n_0701/images/8/83/Ordlista.pdf ordlistan] som alltid finns tillgänglig under mappen <span style="color:red">"Dokument" i menyn till vänster.</span></p> | + | Ibland hör man benämningen "data". I IT-sammanhang betyder |
+ | data endast information. Personer som använder data (eller | ||
+ | ännu värre: "datan") för att referera till själva datorn | ||
+ | upplevs ofta som mindre kunniga (se t ex Maria Bloms film | ||
+ | Masjävlar) av de som skiljer på datorer och informationen | ||
+ | som datorerna behandlar. | ||
+ | |||
+ | Om du glömmer bort vad ett visst ord betyder kan du slå upp det | ||
+ | i vår [[ordlista]] över pythontermer. | ||
+ | |||
+ | |||
+ | <em>På många ställen i den här kursen finns det testfrågor | ||
+ | som du kan använda för att kolla om du har förstått. | ||
+ | Prova först att lösa uppgifterna på egen hand. | ||
+ | Det går också utmärkt att diskutera frågorna på kursens forum. | ||
+ | Här är en första uppmjukningsfråga.</em> | ||
+ | |||
+ | '''Vad är en dator?''' | ||
+ | |||
+ | # Detsamma som en processor med minne. | ||
+ | # Detsamma som en processor, skärm, dator, tangentbord och mus. | ||
+ | # Detsamma som en data. | ||
+ | |||
+ | '''Svar:''' -><span style="color:white">2. Detsamma som en processor, skärm, dator, tangentbord och mus.</span><- | ||
+ | |||
+ | <em>Lösningen till uppgiften är skriven med osynligt bläck på föregående rad. Om du vill titta på svaret så håller du ned vänster musknapp och markerar den osynliga texten som finns mellan tecknen -> och <-.</em> | ||
- | <span style="color:red">[FRÅGOR]</span> | ||
==Vad är ett program?== | ==Vad är ett program?== | ||
- | <p>Ett (dator-) program är en uppsättning instruktioner som styr vad datorn ska göra. Vanligen finns det indata (t ex knapp- eller mustryckningar) som behandlas av datorn enligt instruktionerna i programmet vilket resulterar i utdata (t ex text, diagram, bilder) på skärmen.</p> | + | |
+ | Ett (dator-) program är en uppsättning instruktioner som styr | ||
+ | vad datorn ska göra. Vanligen finns det indata (t ex knapp- | ||
+ | eller mustryckningar) som behandlas av datorn enligt | ||
+ | instruktionerna i programmet vilket resulterar i utdata | ||
+ | (t ex text, diagram, bilder) på skärmen. | ||
[[Bild:791439.jpg]]<br/> | [[Bild:791439.jpg]]<br/> | ||
[[Bild:791440.jpg]] | [[Bild:791440.jpg]] | ||
- | <p>En analogi är t ex stickning där samma indata (garn) med ett program kan bli till utdata i form av ett par sockor och med ett annat program till en tröja.</p> | + | En analogi är stickning där samma indata (garn) med ett program |
+ | kan bli till utdata i form av ett par sockor och med ett annat | ||
+ | program till en tröja. | ||
[[Bild:791441.jpg]]<br/> | [[Bild:791441.jpg]]<br/> | ||
[[Bild:791442.jpg]] | [[Bild:791442.jpg]] | ||
- | <p>Precis som själva datorn består ett datorprogram väsentligen av två saker: minne och instruktioner. Minnet kallas för variabler, instruktionerna kallas ofta för satser. Satserna är det som avgör hur variablerna manipuleras (dvs ändrar värde).</p> | + | Precis som själva datorn består ett datorprogram väsentligen |
+ | av två saker: minne och instruktioner. Minnet kallas för | ||
+ | variabler, instruktionerna kallas ofta för satser. Satserna är | ||
+ | det som avgör hur variablerna manipuleras (dvs ändrar värde). | ||
+ | |||
+ | |||
+ | '''Vad är ett datorprogram? (Det kan finnas flera riktiga svar.)''' | ||
+ | |||
+ | # Något som styr en dator. | ||
+ | # Detsamma som en processor, skärm, tangentbord och mus. | ||
+ | # Något som styr hu en dator manipulerar indata för att presentera utdata. | ||
+ | # En samling obegripliga ord i godtycklig ordning. | ||
+ | # En samling av variabler och satser. | ||
+ | |||
+ | '''Svar:'''<span style="color:white"> 1, 3 och 5 är alla rätt.</span> | ||
- | <span style="color:red">[FRÅGOR]</span> | ||
==Vad är ett programspråk?== | ==Vad är ett programspråk?== | ||
- | <p>En dator förstår endast sitt eget datorspråk, maskinkod, som är mycket svårförståeligt även för de flesta erfarna programmerare. För att underlätta för alla som programmerar skriver man därför vanligen program i ett programspråk som t ex Java, C++ eller som vi ska använda i denna kurs: Python. För att kunna få datorn att förstå och utföra program skrivna i Python krävs det att man översätter (kompilerar, tolkar, interpreterar) det till datorns eget språk.</p> | ||
- | <p>För just Python finns det två sätt: antingen skriver man programmet först med ett redigeringsprogram (liknar ett ordbehandlingsprogram som t ex Word) och sparar det på en fil. Därefter låter man Python-tolken översätta och köra programmet. </p> | ||
- | <p>Det andra sättet är att man först startar Python-tolken och därefter skriver programkod direkt i den. Tolken kommer då att utföra programkoden allteftersom du skriver den.</p> | ||
- | <p>Fördelen med det första sättet är att det blir enklare att gå tillbaka och ändra programmet om det inte blev riktigt rätt eller när man kommer på roliga tillägg till det. När man skriver större program gör man det på detta vis.</p> | ||
- | <p>Fördelen med det andra sättet är att man direkt kan se vad som inte fungerar. Det används därför mest för att testa saker.</p> | ||
- | <p>Eftersom tolken bara är ett dumt program kräver den att texten på programfilen (eller det du skriver i tolken) mycket strikt följer bestämda regler. Ett väldigt litet pythonprogram som kan kompileras och köras utan fel ser ut så här:</p> | ||
+ | En dator förstår endast sitt eget datorspråk, maskinkod, som är | ||
+ | mycket svårhanterligt även för de flesta erfarna programmerare. | ||
+ | För att underlätta för alla som programmerar skriver man därför | ||
+ | vanligen program i ett programspråk som t ex Java, C++ eller som | ||
+ | vi ska använda i denna kurs: Python. För att kunna få datorn att | ||
+ | förstå och utföra program skrivna i Python krävs det att man | ||
+ | översätter (kompilerar, tolkar, interpreterar) det till datorns | ||
+ | eget språk. | ||
- | <div class="codebox"> | ||
- | <div class="title">Python</div> | ||
- | <pre>print "Hej!"</pre> | ||
- | </div> | ||
- | <p>Om man skriver någonting som kompilatorn inte kan översätta kommer den att tala om var det är fel och vägra att översätta allt. Lyckas översättningen så går programmet att köra. I det här fallet kommer texten Hej! att skrivas ut.</p> | + | ==Installera Python på din dator== |
- | <p>Om man skriver ovanstående minimala program på en fil och kallar filen för ”MittProgram.py” kan det se ut så här i terminalfönstret (fetstil markerar inmatning från den som programmerar:</p> | + | För att kunna läsa den här kursen måste du installera Python |
+ | på din dator. Python finns tillgängligt för många olika | ||
+ | operativsystem, bland annat Linux/Unix, Mac OS X och Windows, | ||
+ | och är enkelt att installera. | ||
+ | Innan du laddar ned Python, begrunda nedanstående | ||
- | <div class="codebox"> | + | Python 3.0 släpptes i början av december 2008, i denna version har bland annat |
- | <div class="title">Unix/Mac OS X/DOS</div> | + | syntaxen för print-kommandot ändrats och även en del andra förändringar |
- | <pre>> python MittProgram.py | + | genomförts. |
- | Hej! | + | |
- | > </pre> | + | |
- | </div> | + | |
- | <p>Där > är en prompt från datorn (ett tecken som visar att den är redo för fler kommandon).</p> | + | Kursmaterialet i denna kurs är anpassat efter Python 2.4 - 2.6 vilket innebär |
+ | att alla exempel, prov och övningar i boken förutsätter att någon av dessa | ||
+ | versioner används. | ||
- | <p>Gör man samma sak genom att starta tolken först kan det se ut så här i terminalfönstret:</p> | + | För dig som ska installera Python på din dator, välj version 2.6.1 tillgänglig |
+ | via http://www.python.org | ||
- | <span style="color:red">[strong-taggarna funkar inte]</span> | + | P-uppgiften redovisas normalt i Python 2.4 - 2.6 men om du vill använda Python |
- | <div class="codebox"> | + | 3.0 så kan detta vara möjligt. Kommunicera då detta i förväg med rättande lärare. |
- | <div class="title">Python</div> | + | |
- | <pre> | + | |
- | <strong>> python</strong> | + | |
- | Python 2.3.5 (#1, Aug 22 2005, 22:13:23) | + | |
- | [GCC 3.3 20030304 (Apple Computer, Inc. build 1809)] on darwin | + | |
- | Type "help", "copyright", "credits" or "license" for more information. | + | |
- | <strong>>>> print "Hej!"</strong> | + | |
- | Hej! | + | |
- | <strong>>>> </strong></pre> | + | |
- | </div> | + | |
- | <p>Där >>> är prompten från Python-tolken, som visar att den är redo för nya kommandon.</p> | + | |
- | <p>Vill du redan nu testa att programmera på detta sätt kan du hitta instruktioner i avsnitt 1.9.</p> | + | På webbplatsen [http://www.python.org python.org] |
+ | hittar du all information du behöver för att kunna ladda ner och | ||
+ | installera den senaste versionen av Python på din dator. | ||
+ | |||
+ | Gå till [http://www.python.org python.org] och följ instruktionerna för att | ||
+ | installera Python. Om du får problem så kan du, som alltid, | ||
+ | ställa en fråga i kursens webbforum eller kontakta kursens | ||
+ | handledare. | ||
+ | |||
+ | ==Kom igång med Python och IDLE== | ||
+ | |||
+ | Nästa steg är att börja använda Python och IDLE. IDLE är ett | ||
+ | ett utvecklingsverktyg för Python med vars hjälp man enkelt | ||
+ | och behändigt kan skriva och testa sina program. | ||
+ | [http://hkn.eecs.berkeley.edu/~dyoo/python/idle_intro/ One Day of IDLE Toying] | ||
+ | är en kort och lättläst introduktion som visar hur man använder IDLE | ||
+ | för att skriva sitt första program. | ||
+ | Gå dit, läs texten och prova själv på att skriva och köra | ||
+ | ett Python-program (svensk översättning finns). | ||
+ | |||
+ | För Python finns det alltså två sätt att skriva program. | ||
+ | Antingen skriver man programkod direkt i en pythontolk och | ||
+ | ser resultatet av varje kommando efterhand som man skriver | ||
+ | in sitt program. Detta fungerar bäst om man vill skriva | ||
+ | mycket korta program som bara ska användas en gång eller | ||
+ | om man vill testa hur något fungerar i Python. | ||
+ | |||
+ | Det andra sättet är att använda ett redigeringsprogram, | ||
+ | till exempel det som är inbyggt i IDLE, och sedan låta | ||
+ | pythontolken översätta och köra programmet. Fördelen med | ||
+ | detta är att det blir enklare att gå tillbaka och ändra | ||
+ | programmet om det inte blev riktigt rätt eller om man kommer | ||
+ | på roliga tillägg. När man skriver större program gör man | ||
+ | alltid på detta sätt. | ||
+ | |||
+ | Eftersom tolken bara är ett dumt program kräver den att texten | ||
+ | i programfilen (eller det du skriver i tolken) mycket strikt | ||
+ | följer bestämda regler. Ett väldigt litet pythonprogram som | ||
+ | kan kompileras och köras utan fel ser ut så här: | ||
+ | |||
+ | <div class="codebox"><pre>print "Hej!"</pre></div> | ||
+ | |||
+ | Om man skriver någonting som kompilatorn inte kan översätta | ||
+ | kommer den att tala om var det är fel och vägra att översätta | ||
+ | allt. Lyckas översättningen så går programmet att köra. I det | ||
+ | här fallet kommer texten Hej! att skrivas ut. | ||
==Tilldelning== | ==Tilldelning== | ||
- | <p>För att hålla reda på data i ett program används variabler. Alla variabler har ett namn för att kunna skilja dem åt. Du kan jämföra med minnet på en miniräknare. Enklare räknare har bara ett minne och behöver därför inte namnge det. Mer avancerade räknare har flera minnen som namnges med t ex ett nummer. Ett datorprogram kan hålla reda på en stor mängd data. När man programmerar kan man lägga in data som t ex längd vikt och ålder i datorns minne med hjälp av variabler. För att tilldela variablerna värden skriver man i Python t ex:</p> | ||
+ | För att hålla reda på data i ett program används variabler. Alla variabler har ett namn för att kunna skilja dem åt. Du kan jämföra med minnet på en miniräknare. Enklare räknare har bara ett minne och behöver därför inte namnge det. Mer avancerade räknare har flera minnen som namnges med t ex ett nummer. Ett datorprogram kan hålla reda på en stor mängd data. När man programmerar kan man lägga in data som t ex längd vikt och ålder i datorns minne med hjälp av variabler. För att tilldela variablerna värden skriver man i Python t ex: | ||
- | <div class="codebox"><div class="title">Python</div><pre>age = 18 | + | <pre>age = 18 |
length = 180 | length = 180 | ||
- | weight = 80</pre></div> | + | weight = 80</pre> |
- | <p>I vänsterledet (vänster om =) skriver man namnet på den variabel som ska få ett nytt värde och i högerledet (höger om =) värdet som tilldelas. Likhetstecknet kallas i programmeringssammanhang för tilldelning (eller tom tilldelningsoperator). Man kan också skriva variabler i högerledet:</p> | + | I vänsterledet (vänster om =) skriver man namnet på den variabel som ska få ett nytt värde och i högerledet (höger om =) värdet som tilldelas. Likhetstecknet kallas i programmeringssammanhang för tilldelning (eller tom tilldelningsoperator). Man kan också skriva variabler i högerledet: |
+ | <div class="codebox"><pre>my_cousins_age = age</pre></div> | ||
- | <div class="codebox"><div class="title">Python</div><pre>my_cousins_age = age</pre></div> | + | Då tilldelas <code>my_cousins_age</code> samma värde som <code>age</code> har. Alla variabelnamn i Python måste börja med en (engelsk) bokstav (inte åäö), men efter den kan man blanda bokstäver och siffror. |
- | <p>Då tilldelas <span class="code">my_cousins_age</span> samma värde som <span class="code">age</span> har. Alla variabelnamn i Python måste börja med en (engelsk) bokstav (inte åäö), men efter den kan man blanda bokstäver och siffror. </p> | + | Högerledet kan innehålla uträkningar som behöver utföras innan tilldelningen sker: |
- | <p>Högerledet kan innehålla uträkningar som behöver utföras innan tilldelningen sker:</p> | + | <pre>a = 3 |
+ | b = a + 15</pre> | ||
+ | Ovanstående två rader ser till att <code>b</code> får värdet 18. | ||
- | <div class="codebox"><div class="title">Python</div><pre>a = 3 | + | Ett bra sätt att förstå vad som händer i ett program är att stegvis går igenom det för hand och skriva upp alla variabelvärden. Varje variabel har endast ett värde åt gången och kommer inte ihåg vad för värde den haft tidigare. |
- | b = a + 15</pre></div> | + | |
- | <p>Ovanstående två rader ser till att b får värdet 18.</p> | ||
- | <p>Ett bra sätt att förstå vad som händer i ett program är att stegvis går igenom det för hand och skriva upp alla variabelvärden. Varje variabel har endast ett värde åt gången och kommer inte ihåg vad för värde den haft tidigare.</p> | + | '''Vad blir värdet på variabeln <code>d</code> efter följande rader?''' |
+ | <pre>a = 12 | ||
+ | b = a | ||
+ | c = a + b + 3 | ||
+ | d = c - b</pre> | ||
+ | |||
+ | '''Svar:''' <code>d</code> =<span style="color:white"> 15 </span> | ||
+ | |||
+ | |||
+ | '''Vad är det för fel på följande kod?''' | ||
+ | <pre>6606 = svenska_flaggans_dag</pre> | ||
+ | # 6606 är ett ogiltigt variabelnamn. | ||
+ | # Det blir fel för att 6606 inte är svenska flaggans dag. | ||
+ | # Man kan inte tilldela värdet 6606 ett nytt värde. | ||
+ | |||
+ | '''Svar:'''<span style="color:white"> 1 och 3 är båda korrekta svar.</span> | ||
- | <span style="color:red">[FRÅGOR]</span> | ||
==Olika slags värden== | ==Olika slags värden== | ||
- | <p>Det finns olika slags värden man tilldela variabler. Som vi tidigare sett kan man tilldela variabler värden i form av tal, men man kan också tilldela teckenföljder som t ex namn. I datalitteraturen kallas teckenföljderna för strängar (av engelskans string som bland annat betyder sträng och kedja).</p> | ||
+ | <p>Det finns olika slags värden man tilldela variabler. Som vi tidigare sett kan man tilldela variabler värden i form av tal, men man kan också tilldela teckenföljder som t ex namn. I datalitteraturen kallas teckenföljderna för strängar (av engelskans string som bland annat betyder sträng och kedja). | ||
- | <div class="codebox"><div class="title">Python</div><pre>namn1 = 'Oskar' | + | <pre>namn1 = 'Oskar' |
- | namn2 = "Kajsa"</pre></div> | + | namn2 = "Kajsa"</pre> |
- | <p>För att skilja på variabelnamn och strängar omsluter man strängar med apostrofer eller citattecken.</p> | + | För att skilja på variabelnamn och strängar omsluter man strängar med apostrofer eller citattecken. |
+ | <pre>namn3 = 'Sima' | ||
+ | namn4 = namn3</pre> | ||
- | <div class="codebox"><div class="title">Python</div><pre>namn3 = 'Sima' | + | I exemplet ovan får <code>namn4</code> värdet 'Sima'. Hade man skrivit apostrofer runt <code>namn3</code> hade <code>namn4</code> istället fått värdet 'namn3'. |
- | namn4 = namn3</pre></div> | + | |
- | <p>I exemplet ovan får namn4 värdet 'Sima'. Hade man skrivit apostrofer runt namn3 hade namn4 istället fått värdet 'namn3'.</p> | ||
- | <span style="color:red">[FRÅGOR]</span> | + | '''Vad blir det för värden på a och b efter följande rader?''' |
+ | <pre>djur = 'katt' | ||
+ | a = djur | ||
+ | b = 'djur'</pre> | ||
+ | '''Svar:''' a får värdet <span style="color:white">'katt'</span> och b får värdet <span style="color:white">'djur'</span>. | ||
+ | |||
==Uppräkning== | ==Uppräkning== | ||
- | <p>Man kan öka värdet på variabler som tidigare har tilldelats ett värde med hjälp av uppräkningsoperatorn +=. Om variabeln innehåller en siffra räknas värdet upp. Efter följande rader</p> | ||
+ | Man kan öka värdet på variabler som tidigare har tilldelats ett värde med hjälp av uppräkningsoperatorn +=. Om variabeln innehåller en siffra räknas värdet upp. Efter följande rader | ||
- | <div class="codebox"><div class="title">Python</div><pre>my_age = 19 | + | <pre>my_age = 19 |
- | my_age += 1</pre></div> | + | my_age += 1</pre> |
- | <p>får <span class="code">my_age</span> värdet 20. Den första raden ger <span class="code">my_age</span> värdet 19 och den andra raden räknar upp <span class="code">my_age</span> med 1. När du trycker på pil upp eller ned i telefonnummerlistan på din mobil utför den en upp- eller nedräkning pss som andra raden.</p> | + | får <code">my_age</code> värdet 20. Den första raden ger <code>my_age</code> värdet 19 och den andra raden räknar upp <code>my_age</code> med 1. När du trycker på pil upp eller ned i telefonnummerlistan på din mobil utför den en upp- eller nedräkning på samma sätt som andra raden.</p> |
- | <p>Man kan åstadkomma samma sak med satserna:</p> | + | Man kan åstadkomma samma sak med satserna: |
+ | <pre>my_age = 19 | ||
+ | my_age = my_age + 1</pre> | ||
- | <div class="codebox"><div class="title">Python</div><pre>my_age = 19 | + | Men så många tecken orkar få programmerare att skriva. Anledningen att variabeln heter <code>my_age</code> istället för <code>min_ålder</code> är att åäö inte fungerar i variabelnamn. |
- | my_age = my_age +1</pre></div> | + | |
- | <p>Men så många tecken orkar få programmerare att skriva. Anledningen att variabeln heter <span class="code">my_age</span> istället för min_ålder är att åäö inte fungerar i variabelnamn. </p> | + | Om variabeln innhåller en sträng läggs den nya strängen till den gamla. Efter satserna: |
- | <p>Om variabeln innhåller en sträng läggs den nya strängen till den gamla. Efter satserna:</p> | + | <pre>husdjur = "hund " |
+ | husdjur += "och katt"</pre> | ||
+ | Kommer <code>husdjur</code> att vara "hund och katt"</p> | ||
- | <div class="codebox"><div class="title">Python</div><pre>husdjur = "hund " | ||
- | husdjur += "och katt"</pre></div> | ||
- | <p>Kommer <span class="code">husdjur</span> att vara "hund och katt"</p> | + | '''Vad är värdet på a och s efter följande rader?''' |
+ | <pre>a = 100 | ||
+ | b = 10 | ||
+ | a += b | ||
+ | s = "svaret är " | ||
+ | s += "a"</pre> | ||
+ | # a = 10010, s = "svaret är 10010" | ||
+ | # a = 110, s = "svaret är a" | ||
+ | # a = 100, s = "svaret är 100" | ||
+ | # a = 110, s = "svaret är 110" | ||
+ | # 1 = 110, s = "svaret är 100" | ||
+ | |||
+ | '''Svar:'''<span style="color:white"> Det korrekta svaret är 2: a = 110, s = "svaret är a".</span> | ||
- | <span style="color:red">[FRÅGOR]</span> | ||
==Utskrifter== | ==Utskrifter== | ||
- | <p>För att kunna provköra exemplen och egen kod behöver du en Python-tolk. Instruktioner för hur man öppnar eller installerar en sådan (beroende på operativsystem) hittar du via länken nedan. Vi rekommenderar att du provar på eftersom det är roligare.</p> | ||
- | |||
- | [[Python-tolk|Länk till instruktioner för Python-tolk]] | ||
- | |||
- | <p>För att skriva ut värden på skärmen använder man instruktionen <em>print</em>. Prova att skriva följande rader</p> | ||
+ | För att skriva ut värden på skärmen använder man instruktionen '''print'''. Prova följande pythonprogram i IDLE: | ||
- | <div class="codebox"><div class="title">Python</div><pre>x = 15 | + | <pre>x = 15 |
print x | print x | ||
print 1001 | print 1001 | ||
- | print 14</pre></div> | + | print 14</pre> |
- | <p>Genom att använda ett kommatecken så kan man skriva ut flera saker på samma rad. Exempelvis skriver</p> | + | Genom att använda ett kommatecken så kan man skriva ut flera saker på samma rad. Exempelvis skriver |
+ | <pre>print "Charles is", 19, "years old"</pre> | ||
- | <div class="codebox"><div class="title">Python</div><pre>print "Charles is", 19, "years old"</pre></div> | + | ut "Charles is 19 years old" på samma rad. |
+ | Observera att Python automatiskt lägger till ett blanktecken | ||
+ | mellan strängarna vid varje kommatecken. | ||
+ | Precis samma sak skrivs ut på samma sätt av: | ||
- | <p>ut "Charles is 19 years old" på samma rad. Precis samma sak skrivs ut på samma sätt av:</p> | + | <pre>age = 19 |
+ | print "Charles is", age, "years old"</pre> | ||
+ | Vill man att en senare utskrift (t ex en som görs av en print-sats några rader senare) ska göras på samma rad som den man just skriver ut låter man ett komma stå sist på raden: | ||
- | <div class="codebox"><div class="title">Python</div><pre>age = 19 | + | <pre>print "Charles is", |
- | print "Charles is", age, "years old"</pre></div> | + | age = 2006-1987 |
+ | print age, "years old"</pre> | ||
- | <p>Vill man att en senare utskrift (t ex en som görs av en print-sats några rader senare) ska göras på samma rad som den man just skriver ut låter man ett komma stå sist på raden:</p> | + | Ovanstående skriver också ut samma sak som tidigare. |
+ | Om man vill kombinera strängar utan att lägga till ett blanktecken så kan man istället | ||
+ | använda sig av ett vanligt plustecken: | ||
- | <div class="codebox"><div class="title">Python</div><pre>print "Charles is", | + | <pre>print "Charles is", |
age = 2006-1987 | age = 2006-1987 | ||
- | print age, "years old"</pre></div> | + | print age + "."</pre> |
+ | |||
+ | Utskriften blir då "Charles is 19.". | ||
+ | |||
+ | |||
+ | ==Kommentarer== | ||
+ | |||
+ | <pre># Skriv ut Charles ålder | ||
+ | print "Charles is", | ||
+ | age = 2006-1987 | ||
+ | print age, "years old"</pre> | ||
+ | |||
+ | Den första raden i det här programmet, raden som börjar med #-tecknet, är en så kallad kommentar. Raden påverkar inte vad som händer när man kör programmet utan är enbart avsedd som information för den som läser programmet. I Python räknas allt från och med #-tecknet till radslut som en kommentar. Man kan till exempel skriva så här: | ||
+ | |||
+ | <pre>salary += 1 # Jippi, löneförhöjning! | ||
+ | </pre> | ||
+ | |||
+ | Kommentarer kan kanske verka överflödiga men är i själva verket mycket viktiga för att man ska kunna förstå och överblicka sina program. | ||
+ | |||
+ | |||
+ | '''Vad skrivs ut när man kör följande program?''' | ||
+ | <pre># Skriv ut Annas telefonnummer | ||
+ | namn = 'Anna' | ||
+ | telefon = '06509911122' | ||
+ | mobil = '07079911322' | ||
+ | print namn, "har telefon", telefon</pre> | ||
+ | '''Svar:''' <span style="color:white">Anna har telefon 06509911122</span> | ||
+ | |||
- | <p>Ovanstående skriver också ut samma sak som tidigare.</p> | + | ==Test== |
+ | |||
+ | Börja med att presentera dig genom att skriva ett | ||
+ | inlägg under rubriken Intro i kursens forum. Om du inte har lust | ||
+ | att berätta om dig själv så kan du alltid skriva ett kort inlägg: | ||
+ | <pre>Hej, jag heter Stefan och har skostorlek 41.</pre> | ||
+ | Du får gärna ljuga om skostorleken med det är bra om namnet stämmer! | ||
- | <span style="color:red">[FRÅGOR]</span> | + | Nu är det dags att göra kursens första test. |
+ | Under rubriken Examination på kursens förstasida hittar | ||
+ | du samtliga test och inlämningsuppgifter. | ||
+ | Testet rättas automatiskt och du har möjlighet att göra | ||
+ | om testet flera gånger om du inte lyckas på första försöket. | ||
- | ==Slutprov 1== | + | Om det är något som du undrar över i det här avnsnittet eller |
+ | i testet så är det fritt fram att fråga och diskutera i kursens forum. | ||
+ | Men undvik att avslöja de rätta svaren på testfrågorna! |
Nuvarande version
Innehåll |
[redigera] Vad är en dator?
En dator i dagligt tal består väsentligen av ett tangentbord, en mus och en skärm som ibland sitter i samma låda som själva datorn. I tekniska sammanhang menar man ibland lådan med datorn och ibland endast processorn som sitter i lådan.
Löstagen processor (i svart) med sex rader med kontakter runt om. |
Processorn sitter fast på ett kretskort, ofta kallat moderkortet och är kopplat till flera olika minnen. Viktigaste minnena är registren i processorn, där alla beräkningar och tolkningar (t ex om ett tal är större än ett annat) sker, RAM-minnet (Random Access Memory) där program ligger när de körs, och skivminnet (ofta kallat hårddisk) där program och dokument lagras för att vara kvar även när datorn har stängts av (till skillnad från RAM-minnet som töms varje gång strömmen stängs av).
Minneskort med minnen (RAM) i svart |
Uppgifter som man brukar se i annonser om datorer är t ex processorhastighet mätt i MHz (MegaHertz), dvs miljoner cykler per sekund eller till och med GHz (GigaHertz), dvs miljarder cykler per sekund. Betyder detta att en 2GHz CPU är dubbelt så snabb som en 1MHz CPU? Inte nödvändigtvis. Det beror också på hur mycket arbete varje CPU utför per cykel.
Datorns prestanda är också i högsta grad beroende av minnets storlek och hastighet. RAM-storlek som mäts i MB (MegaByte), dvs miljoner byte. En byte består av vanligen åtta bitar och kan t ex lagra ett tal mellan 0 och 255. En bit är den minsta minnesenheten på en dator och innehåller en etta eller en nolla. Skivminnet mäts också i byte och är något hundratal gånger större än RAM-minnet.
Ibland hör man benämningen "data". I IT-sammanhang betyder data endast information. Personer som använder data (eller ännu värre: "datan") för att referera till själva datorn upplevs ofta som mindre kunniga (se t ex Maria Bloms film Masjävlar) av de som skiljer på datorer och informationen som datorerna behandlar.
Om du glömmer bort vad ett visst ord betyder kan du slå upp det i vår ordlista över pythontermer.
På många ställen i den här kursen finns det testfrågor
som du kan använda för att kolla om du har förstått.
Prova först att lösa uppgifterna på egen hand.
Det går också utmärkt att diskutera frågorna på kursens forum.
Här är en första uppmjukningsfråga.
Vad är en dator?
- Detsamma som en processor med minne.
- Detsamma som en processor, skärm, dator, tangentbord och mus.
- Detsamma som en data.
Svar: ->2. Detsamma som en processor, skärm, dator, tangentbord och mus.<-
Lösningen till uppgiften är skriven med osynligt bläck på föregående rad. Om du vill titta på svaret så håller du ned vänster musknapp och markerar den osynliga texten som finns mellan tecknen -> och <-.
[redigera] Vad är ett program?
Ett (dator-) program är en uppsättning instruktioner som styr vad datorn ska göra. Vanligen finns det indata (t ex knapp- eller mustryckningar) som behandlas av datorn enligt instruktionerna i programmet vilket resulterar i utdata (t ex text, diagram, bilder) på skärmen.
En analogi är stickning där samma indata (garn) med ett program kan bli till utdata i form av ett par sockor och med ett annat program till en tröja.
Precis som själva datorn består ett datorprogram väsentligen av två saker: minne och instruktioner. Minnet kallas för variabler, instruktionerna kallas ofta för satser. Satserna är det som avgör hur variablerna manipuleras (dvs ändrar värde).
Vad är ett datorprogram? (Det kan finnas flera riktiga svar.)
- Något som styr en dator.
- Detsamma som en processor, skärm, tangentbord och mus.
- Något som styr hu en dator manipulerar indata för att presentera utdata.
- En samling obegripliga ord i godtycklig ordning.
- En samling av variabler och satser.
Svar: 1, 3 och 5 är alla rätt.
[redigera] Vad är ett programspråk?
En dator förstår endast sitt eget datorspråk, maskinkod, som är mycket svårhanterligt även för de flesta erfarna programmerare. För att underlätta för alla som programmerar skriver man därför vanligen program i ett programspråk som t ex Java, C++ eller som vi ska använda i denna kurs: Python. För att kunna få datorn att förstå och utföra program skrivna i Python krävs det att man översätter (kompilerar, tolkar, interpreterar) det till datorns eget språk.
[redigera] Installera Python på din dator
För att kunna läsa den här kursen måste du installera Python på din dator. Python finns tillgängligt för många olika operativsystem, bland annat Linux/Unix, Mac OS X och Windows, och är enkelt att installera.
Innan du laddar ned Python, begrunda nedanstående
Python 3.0 släpptes i början av december 2008, i denna version har bland annat syntaxen för print-kommandot ändrats och även en del andra förändringar genomförts.
Kursmaterialet i denna kurs är anpassat efter Python 2.4 - 2.6 vilket innebär att alla exempel, prov och övningar i boken förutsätter att någon av dessa versioner används.
För dig som ska installera Python på din dator, välj version 2.6.1 tillgänglig via http://www.python.org
P-uppgiften redovisas normalt i Python 2.4 - 2.6 men om du vill använda Python 3.0 så kan detta vara möjligt. Kommunicera då detta i förväg med rättande lärare.
På webbplatsen python.org hittar du all information du behöver för att kunna ladda ner och installera den senaste versionen av Python på din dator.
Gå till python.org och följ instruktionerna för att installera Python. Om du får problem så kan du, som alltid, ställa en fråga i kursens webbforum eller kontakta kursens handledare.
[redigera] Kom igång med Python och IDLE
Nästa steg är att börja använda Python och IDLE. IDLE är ett ett utvecklingsverktyg för Python med vars hjälp man enkelt och behändigt kan skriva och testa sina program. One Day of IDLE Toying är en kort och lättläst introduktion som visar hur man använder IDLE för att skriva sitt första program. Gå dit, läs texten och prova själv på att skriva och köra ett Python-program (svensk översättning finns).
För Python finns det alltså två sätt att skriva program. Antingen skriver man programkod direkt i en pythontolk och ser resultatet av varje kommando efterhand som man skriver in sitt program. Detta fungerar bäst om man vill skriva mycket korta program som bara ska användas en gång eller om man vill testa hur något fungerar i Python.
Det andra sättet är att använda ett redigeringsprogram, till exempel det som är inbyggt i IDLE, och sedan låta pythontolken översätta och köra programmet. Fördelen med detta är att det blir enklare att gå tillbaka och ändra programmet om det inte blev riktigt rätt eller om man kommer på roliga tillägg. När man skriver större program gör man alltid på detta sätt.
Eftersom tolken bara är ett dumt program kräver den att texten i programfilen (eller det du skriver i tolken) mycket strikt följer bestämda regler. Ett väldigt litet pythonprogram som kan kompileras och köras utan fel ser ut så här:
print "Hej!"
Om man skriver någonting som kompilatorn inte kan översätta kommer den att tala om var det är fel och vägra att översätta allt. Lyckas översättningen så går programmet att köra. I det här fallet kommer texten Hej! att skrivas ut.
[redigera] Tilldelning
För att hålla reda på data i ett program används variabler. Alla variabler har ett namn för att kunna skilja dem åt. Du kan jämföra med minnet på en miniräknare. Enklare räknare har bara ett minne och behöver därför inte namnge det. Mer avancerade räknare har flera minnen som namnges med t ex ett nummer. Ett datorprogram kan hålla reda på en stor mängd data. När man programmerar kan man lägga in data som t ex längd vikt och ålder i datorns minne med hjälp av variabler. För att tilldela variablerna värden skriver man i Python t ex:
age = 18 length = 180 weight = 80
I vänsterledet (vänster om =) skriver man namnet på den variabel som ska få ett nytt värde och i högerledet (höger om =) värdet som tilldelas. Likhetstecknet kallas i programmeringssammanhang för tilldelning (eller tom tilldelningsoperator). Man kan också skriva variabler i högerledet:
my_cousins_age = age
Då tilldelas my_cousins_age
samma värde som age
har. Alla variabelnamn i Python måste börja med en (engelsk) bokstav (inte åäö), men efter den kan man blanda bokstäver och siffror.
Högerledet kan innehålla uträkningar som behöver utföras innan tilldelningen sker:
a = 3 b = a + 15
Ovanstående två rader ser till att b
får värdet 18.
Ett bra sätt att förstå vad som händer i ett program är att stegvis går igenom det för hand och skriva upp alla variabelvärden. Varje variabel har endast ett värde åt gången och kommer inte ihåg vad för värde den haft tidigare.
Vad blir värdet på variabeln d
efter följande rader?
a = 12 b = a c = a + b + 3 d = c - b
Svar: d
= 15
Vad är det för fel på följande kod?
6606 = svenska_flaggans_dag
- 6606 är ett ogiltigt variabelnamn.
- Det blir fel för att 6606 inte är svenska flaggans dag.
- Man kan inte tilldela värdet 6606 ett nytt värde.
Svar: 1 och 3 är båda korrekta svar.
[redigera] Olika slags värden
Det finns olika slags värden man tilldela variabler. Som vi tidigare sett kan man tilldela variabler värden i form av tal, men man kan också tilldela teckenföljder som t ex namn. I datalitteraturen kallas teckenföljderna för strängar (av engelskans string som bland annat betyder sträng och kedja).
namn1 = 'Oskar' namn2 = "Kajsa"
För att skilja på variabelnamn och strängar omsluter man strängar med apostrofer eller citattecken.
namn3 = 'Sima' namn4 = namn3
I exemplet ovan får namn4
värdet 'Sima'. Hade man skrivit apostrofer runt namn3
hade namn4
istället fått värdet 'namn3'.
Vad blir det för värden på a och b efter följande rader?
djur = 'katt' a = djur b = 'djur'
Svar: a får värdet 'katt' och b får värdet 'djur'.
[redigera] Uppräkning
Man kan öka värdet på variabler som tidigare har tilldelats ett värde med hjälp av uppräkningsoperatorn +=. Om variabeln innehåller en siffra räknas värdet upp. Efter följande rader
my_age = 19 my_age += 1får
my_age
värdet 20. Den första raden ger my_age
värdet 19 och den andra raden räknar upp my_age
med 1. När du trycker på pil upp eller ned i telefonnummerlistan på din mobil utför den en upp- eller nedräkning på samma sätt som andra raden.
Man kan åstadkomma samma sak med satserna:
my_age = 19 my_age = my_age + 1
Men så många tecken orkar få programmerare att skriva. Anledningen att variabeln heter my_age
istället för min_ålder
är att åäö inte fungerar i variabelnamn.
Om variabeln innhåller en sträng läggs den nya strängen till den gamla. Efter satserna:
husdjur = "hund " husdjur += "och katt"
Kommer husdjur
att vara "hund och katt"</p>
Vad är värdet på a och s efter följande rader?
a = 100 b = 10 a += b s = "svaret är " s += "a"
- a = 10010, s = "svaret är 10010"
- a = 110, s = "svaret är a"
- a = 100, s = "svaret är 100"
- a = 110, s = "svaret är 110"
- 1 = 110, s = "svaret är 100"
Svar: Det korrekta svaret är 2: a = 110, s = "svaret är a".
[redigera] Utskrifter
För att skriva ut värden på skärmen använder man instruktionen print. Prova följande pythonprogram i IDLE:
x = 15 print x print 1001 print 14
Genom att använda ett kommatecken så kan man skriva ut flera saker på samma rad. Exempelvis skriver
print "Charles is", 19, "years old"
ut "Charles is 19 years old" på samma rad. Observera att Python automatiskt lägger till ett blanktecken mellan strängarna vid varje kommatecken. Precis samma sak skrivs ut på samma sätt av:
age = 19 print "Charles is", age, "years old"
Vill man att en senare utskrift (t ex en som görs av en print-sats några rader senare) ska göras på samma rad som den man just skriver ut låter man ett komma stå sist på raden:
print "Charles is", age = 2006-1987 print age, "years old"
Ovanstående skriver också ut samma sak som tidigare.
Om man vill kombinera strängar utan att lägga till ett blanktecken så kan man istället använda sig av ett vanligt plustecken:
print "Charles is", age = 2006-1987 print age + "."
Utskriften blir då "Charles is 19.".
[redigera] Kommentarer
# Skriv ut Charles ålder print "Charles is", age = 2006-1987 print age, "years old"
Den första raden i det här programmet, raden som börjar med #-tecknet, är en så kallad kommentar. Raden påverkar inte vad som händer när man kör programmet utan är enbart avsedd som information för den som läser programmet. I Python räknas allt från och med #-tecknet till radslut som en kommentar. Man kan till exempel skriva så här:
salary += 1 # Jippi, löneförhöjning!
Kommentarer kan kanske verka överflödiga men är i själva verket mycket viktiga för att man ska kunna förstå och överblicka sina program.
Vad skrivs ut när man kör följande program?
# Skriv ut Annas telefonnummer namn = 'Anna' telefon = '06509911122' mobil = '07079911322' print namn, "har telefon", telefon
Svar: Anna har telefon 06509911122
[redigera] Test
Börja med att presentera dig genom att skriva ett inlägg under rubriken Intro i kursens forum. Om du inte har lust att berätta om dig själv så kan du alltid skriva ett kort inlägg:
Hej, jag heter Stefan och har skostorlek 41.
Du får gärna ljuga om skostorleken med det är bra om namnet stämmer!
Nu är det dags att göra kursens första test. Under rubriken Examination på kursens förstasida hittar du samtliga test och inlämningsuppgifter. Testet rättas automatiskt och du har möjlighet att göra om testet flera gånger om du inte lyckas på första försöket.
Om det är något som du undrar över i det här avnsnittet eller i testet så är det fritt fram att fråga och diskutera i kursens forum. Men undvik att avslöja de rätta svaren på testfrågorna!