Planering av ett större program - Funktioner, moduler, if och Boolean Linda Mannila 2.10.2007.

Slides:



Advertisements
Liknande presentationer
En introduktion till programmeringsspråket Python
Advertisements

Föreläsning 9 Programmeringsteknik och Matlab 2D1312/2D1305
X-mas algebra Är du redo? Klicka!!.
Programstruktur: C för enchipsdatorer
Funktioner och programorganisation
2D1311 Programmeringsteknik med PBL
Repetition inför provet
Vill du lära dig kort division?
Föreläsning 3 Repetition Operatorer Styrstrukturer Deklaration och anrop av metoder.
Logikprogrammering Ons, 25/9
Föreläsning 7 Analys av algoritmer T(n) och ordo
Vilken/vilka av följande satser ger syntaxfel:
Operatorer.
2D1311 Programmeringsteknik med PBL
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
Föreläsning 2. Operatorer Tilldelning Kodblock { } if – satsen Logiska uttryck Att programmera.
Programmeringsteknik K och Media
Grundläggande programmering
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 5 Python: argument från kommando-tolken
Föreläsning 4 Python: Definiering av egna funktioner Parametrar
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
Programmering B PHP Lektion 2
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Programmering B PHP Lektion 2
Programmering B PHP Lektion 3
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Frågor om elevinflytande till elever i åk 3 – 9 i grundskolan
Föreläsning 3 Programmeringsteknik och Matlab DD1312
Programspråk Två olika typer av program omvandlar högnivå till lågnivå program: Interpreterande program och kompilerande program. Python är ett interpreterande.
Funktioner, styrstrukturer, manipulering av matriser
1 Föreläsning 3 programmeringsteknik och Matlab 2D1312/ 2D1305 Matlab fortsättning Funkioner, styrstrukturer, manipulering av matriser.
Grundläggande programmering
Problemlösning Veckodagsproblemet Gissa talet Siffersumman.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
Namnrum, räckvidd och rekursion Linda Mannila
Funktioner Linda Mannila Vad kan vi nu? Primitiva datatyper Tal, strängar, booleska värden Samlingsdatatyp Listan Utskrift Indata Felhantering.
INTRODUKTION TILL PROGRAMMERING
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 2 ( ) INNEHÅLL: -Variabler och datatyper -Tilldelning av variabler -Aritmetiska.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
2D1311 Programmeringsteknik med PBL Föreläsning 1 Skolan för Datavetenskap och kommunikation.
2D1311 Programmeringsteknik med PBL
1 Mönstermatchning och rekursion Nr 4. 2 Förenklad notation val fnname = fn name => expression Förenklas till fun fnname name = expression Exempel fun.
OOP F13:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 13 Repetition variabler, selektion och iteration.
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
Föreläsning 2 2D1312 Introduktion till Python Kap 1 och 2 i kursboken.
Föreläsning 3 Villkorssatsen if Slingor: while och for Felsökning.
1 Ingenjörsmetodik IT & ME 2007 Föreläsare Dr. Gunnar Malm.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
1 Matlab, föreläsning 1 Oktober MATLAB Perspektiv på materialdesign Lina Kjellqvist Rum: K324 Telefon:
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
OOP&M - teori1 OOP – Föreläsning 7 (Sista oop I) Konstruktioner för att hantera upprepningar Kapitel 11.
Selektion jämförande och logiska operatorer
Anders Sjögren Operatorer. Anders Sjögren Operand(er)
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
Anders Sjögren Funktioner något in och något annat ut.
KPP053, HT2015 MATLAB, Föreläsning 4
Lektion 4.
Föreläsning 3 Programmeringsteknik
Föreläsning 2 Programmeringsteknik DD1310
Iteration – Repetitionssats - while
Presentationens avskrift:

Planering av ett större program - Funktioner, moduler, if och Boolean Linda Mannila

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 min_funktion IndataUtdata

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 1. 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 upprepa en 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) >>>

Booleska uttryck OperatorExempel == Lika med 4/4 == 1 != Olika, inte lika med 4.0/3 != 1 > Större än 4 > 4 < Mindre än 'al' < ‘ax' >= Större än eller lika med 4 >= 4 <= Mindre än eller lika med 2.3 <= 2.2 True False 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) OperatorExempel and (True endast då båda operanderna sanna) 5 > 5 and 3 <= 3 2 == 2 and 7 > 5 or (True då minst en operand är sann) 5 > 5 or 3 <= 3 2 == 2 or 7 > 5 not (True då operanden är falsk) not(5 > 5) not(3<=3) False True False

Precendensregler I uttryck med många operatorer sker evalueringen i följande ordning ( ** har högst precedens, or har lägst) ** *, /, % +, -, >=, !=, == not and or

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 else kan 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.

if – else: flödesschema tal % 2 == 0 Skriv ut ”Talet är jämnt” Läs in tal Ja Nej 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" tal % 2 == 0 Skriv ut ”Talet är jämnt” Läs in tal Ja Nej Skriv ut ”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 tal < 0 Skriv ut tal är negativt Läs in tal JaNej tal > 0 Nej Skriv ut tal är positivt Skriv ut tal är noll Ja

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: är positivt Ge in ett tal: ä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 1. True eller False a) True and (not False) b) (2 + 4 == 4 + 2) and (5 - 3 == 3 - 5) c) (5 = 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) 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: 67 Mata in det andra talet: är större än 56.