Övningar i 2D2050 Per-Anders Staav (kallas Pa) Epost: pasta@kth.se eller pastaav@algonet.se Läser till civilingengör på Elektro 180 p inriktning mot programmering. Har jobbat extra som lärare på Nada sedan 1999
Allmän uppmaning De saker som ingår på labbarna täcker inte in hela kursmaterialet ni behöver lära er. Snarare tar labbarna stickprov från alla de relevanta kapitlen. Det krävs att man bortsett från labbarna skriver små test program och läser allt det som står i boken. Vad gäller den 6 labben så är avsikten med den att orientera er om grafik eftersom ni går Media...det krävs dock att man kan installera tilläggspaket. Vi jobbar på finna en lösning som fungerar i Mac salarna.
Vilket språk talar datorn? Svar: Själva datorn jobbar med så kallad maskinkod. Processorn (som är datorns huvudenhet) har ett fåtal register där den kan lagra bitar (ettor och nollor). Desutom finns ett gigantiskt minne där enorma mängder ettor och nollor får plats. Genom att jonglera data mellan minnet och registren samt använda elektronik som kan räkna t.ex. plus så skapas all verksamhet i datorn. Ingen vettigt funtad människa vill skriva sådan kod och därför uppfinner man språk som exempelvis Python.
Om Python inte är maskinkod, vad är det då? Svar: Python är ett så kallat högnivå språk som måste översättas till maskin kod innan datorn förstår det. För att översättningen ska vara genomförbar måste det språket man använder vara entydigt. Det går inte gissa från sammanhanget som människor gör med talspråk. Reglerna för hur Python program får se ut är en sorts grammatik, med fint datorspråk talar man så kallad syntax. Ett Pythonprogram är en instruktion till datorn som uppfyller Pythons syntax-krav.
Vilka byggblock finns i Program? Inmatning Att vi hämtar data från tangentbord eller filer Utmatning Skriver data till skärmen (eller något annat lämpligt) Variabler Lagrar data som programmet arbetar med Vilkorssatser Gör att vi kan välja vilken kod som ska köras beroende på vad som finns i en variabel Slingor Låtor oss göra en uppsättning rader i programmet flera gånger...dessutom metoder från funktionsbibliotek
Om python programmering Att skriva program är lätt...att skriva program som gör rätt sak är svårare...att veta säkert att programmet gör rätt sak är enormt svårt. Python program går snabbt att skriva men kan vara svårt att hitta fel i. Testar man saker noggrant hittar man dock alla fel och med python hinner man testa mycket.
Önskad effekt av vårt första program exempelkörning: Ange vad nuvarande euro kurs är: 8.95 100 kr är 11.173184 stycken euro 8.95 är inmatat av användaren...talet 11.17 osv beräknas av programmet och stoppas in på rätt ställe
Ett första försök till lösning #coding: iso-8859-1 print Ange vad nuvrande euro kurs är:, euro_kurs=input() euro=100/euro_kurs print 100 kr är print euro print stycken euro exempelkörning: Ange vad nuvarande euro kurs är: 8.95 100 kr är 11.173184 stycken euro
Fixar radbrytning genom att lägga till komma efter vissa print rader #coding: iso-8859-1 print Ange vad nuvrande euro kurs är:, euro_kurs=input() euro=100/euro_kurs print 100 kr är, print euro, print stycken euro exempelkörning: Ange vad nuvarande euro kurs är: 8.95 100 kr är 11.173184 stycken euro
Om användaren ger euro kursen som heltal kommer inga decimaler #coding: iso-8859-1 print Ange vad nuvrande euro kurs är:, euro_kurs=input() euro=100.0 / euro_kurs print 100 kr är, print euro, print stycken euro exempelkörning: Ange vad nuvarande euro kurs är: 8 100 kr är 12.5 stycken euro
Exempel på Inmatning till variabel variabel=input( Ange vad du vill lägga in i variabeln ) Input används för att ta emot inmatning och direkt översätta till siffra. Det som kallas variabel ovan får automagiskt lämplig sort för att kunna ta emot just en siffra. Hade man använt annan sorts inmatning hade variabel fått annan sort (mer om inmatning senare).
Villkorssatser + utmatning variabel=input( Ange vad du vill lägga in i variabeln ) if variabel > 0 : print Du angav ett positivt tal else: print Talet är troligen negativt... Om villkoret är sant körs den första print raden. Är det falskt körs det som står efter else (mer om villkorssatser senare)
Slingor variabel=input() while variabel < 30: print Ett nytt varv i slingan print variabel variabel = variabel +1 En slinga är en sorts villkorssats som körs om och om igen så länge villkoret är sant. Det som upprepas är de rader som följer som har samma inflyttning som raden som följer while raden. I python får man bara flytta in raden om föregående rad slutade med tecknet : (mer om slingor senare)
Utskrift till skärmen print Proxxi print är bra Proxxi är bra print Proxxi, print är bra Proxxi är bra
Kommentarer #Kommentarer används för att förklara obegripliga #kodrader. När programmet körs så hoppar python #över det som följer tecknet # #Det finns dock special fall...följande är bra att #skriva om man vill ha svenska tecken och vill #slippa varningar om okända tecken #coding: iso-8859-1 print Hejsan Världen
Exempelprogram 2 #coding: iso-8859-1 svar=raw_input( Vad är lösen? ) while( svar!= All makt åt Tengil vår befriare ): print Odugling...ange lösen svar=raw_input() print Ja...då kan du passera #Ett logiskt skjysst program...fast det är inte #säkert att terminal vi kör på låter oss skriva #å,ä eller ö så att python förstår det
While vilkoret ligger alltid först... While inleds alltid med ett test...i verkligheten vill man ha sekvensen fråga, inmatning och sist test. En lösning är att lägga till en extra fråga och inmatning innan while slingan startas. En annan möjlig lösning är att man lägger svar= dummy Sekvensen blir då egentligen test, fråga inmatning test, fråga...men det lider ju inte användaren av
Exempel program 3 print Hur pass kul tror du python är? kulgrad=int(raw_input( (Ange ett siffervärde): )) if kulgrad < 0: print Man kan väl inte ha negativt kul!!! elif (kulgrad == 0): print Det ändrar sig nog när du börjat elif kulgrad > 100: print Precis rätt attetyd elif kulgrad == 159: print En utskrift som aldrig skrivs ut else: print Bra, kan kanske bli bättre?
Exempel på random #coding: iso-8859-1 #Modulen random låter oss få tag på pseudo #slumptal om vi importerar den import random print "Vi kan få heltal från funktionen randint(a,b) mellan a och b" counter=random.randint(3,25) #operatorn. används för komma åt saker som finns inne i andra #saker. Vad som finns inne i random hittar man genom att googla while counter < 20: print "Counter is", counter counter=counter+1
Exempel på tidtagning #coding: iso-8859-1 #Detta program utför tidtagning...modulen time har massa #nyttiga funktioner för att göra sådant...jag importerar den #så jag kan använda dessa import time print "Program där tid är dödligt viktigt..." raw_input("tryck enter för att börja") #funktionen clock från time säger vad tiden är start_punkt=time.clock() raw_input("tryck enter så fort som möjligt!") slut_punkt=time.clock() print "Det tog dig",slut_punkt - start_punkt, "sekunder att reagera"
Var kommer mellanslagen ifrån? Den som är uppmärksam har märkt att när vi skriver ut något blir det mellanslag instoppade i utskiften...bra men inte alltid det man vill ha. day= 01 month= 05 print 2005-,month, -,day 2005 05 01 sys.stdout.softspace=false löser problemet men måste anges efter varje utskrift eftersom inställningen nollställs av utskrift. Om man ändå ska importera saker från sys kan sys.stdout.write() vara ett trevligare alternativ för att undvika mellanslagen.