420 likes | 689 Views
Planering av ett större program - Funktioner, moduler, if och Boolean. Linda Mannila 2.10.2007. Vad kan vi nu?. Primitiva datatyper grundläggande funktionalitet Utskrift Indata Felhantering. Denna föreläsning. Planering av ett större program Intro till funktioner och moduler
E N D
Planering av ett större program- Funktioner, moduler, if och Boolean Linda Mannila 2.10.2007
Vad kan vi nu? • Primitiva datatyper • grundläggande funktionalitet • Utskrift • Indata • Felhantering
Denna föreläsning • Planering av ett större program • Intro till funktioner och moduler • Kontrollstrukturen if • Booleska värden
Större program: Tabellkollare Vad är 6 gånger 7? 49 Tyvärr, rätt svar är 42. Vad är 3 gånger 2? 6 Bra, helt rätt! Vad är 9 gånger 5? 45 Bra, helt rätt! : : Jag ställde 10 frågor och du svarade rätt på 7 av dem. Fint jobbat!
Planera... • Vad skall programmet kunna göra? • Välja två slumpmässiga tal till varje fråga • Skriva ut en fråga • Beräkna det rätta svaret • Läsa in de svar testpersonen skriver på tangentbord • Kontrollera om testpersonens svar är rätt eller inte • Skriva ut ett rätt- eller felmeddelande • Hålla koll på hur många frågor som testpersonen svarat rätt på • Ställa ett givet antal frågor (t.ex. 10) • Skriva ut ett slutmeddelande som berättar hur bra testpersonen klarat sig
Vad kan vi redan? • Vad skall programmet kunna göra? • Välja två slumpmässiga tal till varje fråga • Skriva ut en fråga • Beräkna det rätta svaret • Läsa in de svar testpersonen skriver på tangentbord • Kontrollera om testpersonens svar är rätt eller inte • Skriva ut ett rätt- eller felmeddelande • Hålla koll på hur många frågor som testpersonen svarat rätt på • Ställa ett givet antal frågor (t.ex. 10) • Skriva ut ett slutmeddelande som berättar hur bra testpersonen klarat sig
Vad måste vi lära oss? • Vad skall programmet kunna göra? • Välja två slumpmässiga tal till varje fråga • Skriva ut en fråga • Beräkna det rätta svaret • Läsa in de svar testpersonen skriver på tangentbord • Kontrollera om testpersonens svar är rätt eller inte • Skriva ut ett rätt- eller felmeddelande • Hålla koll på hur många frågor som testpersonen svarat rätt på • Ställa ett givet antal frågor (t.ex. 10) • Skriva ut ett slutmeddelande som berättar hur bra testpersonen klarat sig
Vad är en funktion? Ett miniprogram inne i ett program Indata Utdata min_funktion
Funktioner • Python innehåller många färdiga funktioner (inbyggda och i sk moduler) • Redan använt en del inbyggda funktioner • raw_input • input • type • En funktion är • inte ett magiskt ord som vi bara “kan” använda, utan det finns kod bakom alla funktioner • Ett namngivet kodblock som utför en specifik sak och som du kan anropa istället för att skriva om koden varje gång du behöver utföra den.
Varför funktioner? • Gör det snabbare att skriva kod • Finns mycket sådant som behöver göras ofta (t.ex. inläsning från tangentbordet) • Onödigt att alla programmerare skall skriva egen kod för det ändamålet • Ist har någon skrivit funktioner som utför dessa uppgifter (input, raw_input) som alla kan använda • Förenklar uppdateringar • Om samma kod används flera gånger i ett och samma program (t.ex. en beräkning) måste eventuella ändringar göras på alla de ställena • Om man ist skapar en funktion som sköter uppgiften räcker det att man ändrar i funktionsdefinitionen för att ändringen skall ske på alla ställen • Underlättar själva programmeringen • Ett stort program är svårare att skriva än ett litet • Med funktioner kan man dela upp program i mindre delar som är lättare att hantera
”Batteries included” • Förutom de inbyggda funktionerna kommer Python med en mängd specialmoduler • T.ex. string, math, time, … • Varje modul innehåller en mängd konstanter och funktioner för det specialområdet • Onödigt att ha tillgång till allt hela tiden • skulle ta upp plats i datorns minne
Moduler • Bättre: Väljer ut de funktioner vi behöver i ett visst program och begär att få tillgång till just dem. Det gör man genom att importera modulen. • För att få tillgång till det som finns i en modul skriver man överst i programmet import modulnamn • Därefter kan vi använda allt som finns i den modulen genom att skriva modulnamn.funktionsnamn(eventuella parametrar)
Modulen math • Matematiska konstanter och funktioner >>> import math >>> dir(math) ['__doc__', '__name__', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh']
Exempel # Importerar mattemodulen för att få tillgång till # dess funktioner import math # Multipel tilldelning a,b,c = input(“Enter the coefficients (a, b, c): ") # Beräknar diskriminanten disc = math.sqrt(b*b-4*a*c) root1 = (-b + disc) / (2*a) root2 = (-b - disc) / (2*a) print "\nThe solutions are:", root1, root2
Modulen random • random: modul som innehåller funktioner för att generera slumptal import random • Vad finns i modulen? >>> import random >>> dir(random) • Hjälp om modulen: >>> help(random)
Modulen random • Flera olika funktioner • För att välja ett slumptal i ett givet intervall: randrange(start, stop [,step]) • Returnerar ett slumptal mellan start och stop (stop är inte med i intervallet)
Exempel • random.randrange(1,100) returnerar ett slumptal mellan 1 och 99. >>> random.randrange(1, 100) 33 >>> random.randrange(1, 100) 58 >>> random.randrange(1, 100) 1
Övning • Hur skulle du få Python att skriva ut en rad i stil med Vad är 7 gånger 3? där de två talen väljs slump-mässigt ur intervallet [0, 10]?
Planera... • Vad skall programmet kunna göra? • Välja två slumpmässiga tal till varje fråga • Skriva ut en fråga • Beräkna det rätta svaret • Läsa in de svar testpersonen skriver på tangentbord • Kontrollera om testpersonens svar är rätt eller inte • Skriva ut ett rätt- eller felmeddelande • Hålla koll på hur många frågor som testpersonen svarat rätt på • Ställa ett givet antal frågor (t.ex. 10) • Skriva ut ett slutmeddelande som berättar hur bra testpersonen klarat sig
Hittills… • Program med mycket enkel struktur • Sekvens av satser • Körs (exekveras) i den ordning de kommer i programmet, dvs. från första raden till den sista
…men… • Denna typ av program • Är inte så otroligt intressanta! • Låter inte användaren upprepa processen, eller • ändra på den ordning i vilken satserna körs • Program är i allmänhet mer användbara om de gör det möjligt att välja vad som skall ske som följande och upprepaen viss kodsnutt flera gånger
Kontrollstrukturer • Programkontroll = att hantera hur ett program köra, t.ex. i vilken ordning instruktionerna körs och hur många gånger. • Två kontrollstrukturer: • Villkor (det här eller det där?) • Repetition (om och om igen)
Villkorssatsen • Ger datorn möjlighet att välja vilken instruktion/ vilka instruktioner som skall köras som följande • Testa om ett villkor är sant • Skrev användaren in rätt ord? • Är talet större än 10? • Testresultatet bestämmer vad som skall hända • Skriv ut "Jajapp" om användaren skriver in rätt ord • Om alla tal är större än 10 så addera till 20
if if villkorstest: kod • if är ett nyckelord i Python • villkorstest är ett uttryck som antingen är sant eller falskt • kod är de instruktioner som skall utföras om villkorstestet är sant. Alla instruktioner som hör till if-satsen måste indenteras if-raden måste avslutas med ett kolon
En till datatyp - Boolean • Två booleska värden • True (tal olika 0) • False (0) • Olika jämförelseoperatorer • Likhet == • Olikhet != • Större än > • Större än eller lika med >= • Mindre än < • Mindre än eller lika med <= >>> type(True) <type 'bool'> >>>
Booleska uttryck True True False True True False
= vs == • = operatorn används vid tilldelning och inte när man skall jämföra om två värden är lika • x = 12 tilldelar värdet 12 till variabeln x • == operatorn används när man vill testa om två värden är lika • x == 12 kollar om värdet 12 finns lagrat i variabeln x • Python låter dig inte sätta en tilldelning som villkor i en if-sats • if x = 12:fel i Python
Logiska operatorer • and, or, not • Exempel • x > 0 and x < 10 • n % 2 == 0 or n % 3 == 0 • not(x > y) False True True True True False
Precendensregler • I uttryck med många operatorer sker evalueringen i följande ordning (** har högst precedens, or har lägst)
if: exempel age = input('How old are you? ') if age < 19: print 'You are not allowed to drive a car.‘ Villkorstest: antingen sant eller falskt Den kod som skall utföras om villkoret är sant indenteras.
if - else if villkorstest: kod else: kod • elsekan aldrig komma före if • else körs bara då villkorstestet för if är falskt • använd den här konstruktionen när programmet har två alternativ att välja mellan
if-else: exempel if age < 19: print “You are not allowed to drive a car." else: car = raw_input(“Which car do you want to rent? ”) print ”A”, car, ”has been reserved.” Alla satser som indenteras under en kontrollstruktur hör till samma kodblock. Här hör två instruktioner till if-satsens else-del.
Läs in tal tal % 2 == 0 Nej Ja Skriv ut ”Talet är jämnt” Skriv ut ”Talet är udda” if – else: flödesschema
Läs in tal tal % 2 == 0 Nej Ja Skriv ut ”Talet är jämnt” Skriv ut ”Talet är udda” if – else: motsvarande kod tal = input("Ge in ett tal: ") if tal % 2 == 0: print "Talet är jämnt" else: print "Talet är udda" Indenterade
if – elif - else if villkorstest: kod elif villkorstest: kod else: kod • elif kan aldrig komma före if • elif är en förkortning för else if • kan finnas hur många elif-delar som helst i en och samma if-sats • else körs om if-test och alla elif-test är falska • Använd elif när du behöver fler än två alternativ i programmet
if – elif – else: flödesschema Läs in tal Ja tal < 0 Nej tal > 0 Nej Ja Skriv ut tal är negativt Skriv ut tal är positivt Skriv ut tal är noll
if – elif – else: motsvarande kod tal = input('Ge in ett tal: ') if tal < 0: print tal, 'är negativt' elif tal > 0: print tal, 'är positivt' else: print tal, 'är noll'
if – elif – else: provkörningar Ge in ett tal: 15 15 är positivt Ge in ett tal: -5 -5 är negativt Ge in ett tal: 0 0 är noll
Nästlade if-satser • if-satser inne i if-satser spela = raw_input('Vill du spela schack? (j/n) ') if spela == 'n': print 'OK, hejdå!' else: print 'Nu skall här spelas schack!' etta = raw_input('Vill du börja? (j/n) ') if etta == 'j': print 'OK, ge mig ditt bästa drag.' else: print 'OK, bered dig på att förlora.\ Låt mig fundera...' Backslash \ för att skriva ut långa strängar
Exempel: provkörningar Vill du spela schack? (j/n) n OK, hejdå! Vill du spela schack? (j/n) j Nu skall här spelas schack! Vill du börja? (j/n) j OK, ge mig ditt bästa drag. Vill du spela schack? (j/n) j Nu skall här spelas schack! Vill du börja? (j/n) n OK, bered dig på att förlora. Låt mig fundera...
Övningar • True eller False a) True and (not False) b) (2 + 4 == 4 + 2) and (5 - 3 == 3 - 5) c) (5 <= 5 + 3) or (10 == 5 * 2) or (4 >= 3) d) (5 > 6) or (not (12 == 8 -(-4))) and (1 != 5) e) (1 == 1) and (2 != 3) and (5 <= 14) f) (6 % 2 == 0 ) and ((7-3)/2 == 2) • Planera ett program som ber användaren mata in två tal, och sedan meddelar vilket av talen som är större.T.ex. så här: Mata in det första talet: 67Mata in det andra talet: 5667 är större än 56.