Upload
dolph
View
48
Download
0
Embed Size (px)
DESCRIPTION
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 - PowerPoint PPT Presentation
Citation preview
Planering av ett större program- Funktioner, moduler, if och BooleanLinda 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: TabellkollareVad ä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
Indata Utdata
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 funktionerimport math
# Multipel tilldelninga,b,c = input(“Enter the coefficients (a, b, c): ")
# Beräknar diskriminantendisc = 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)
Exempelrandom.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)<type 'bool'>>>>
Booleska uttryck
Operator Exempel
== 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
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)
Operator Exempeland (True endast då båda operanderna sanna)
5 > 5 and 3 <= 32 == 2 and 7 > 5
or (True då minst en operand är sann)
5 > 5 or 3 <= 32 == 2 or 7 > 5
not (True då operanden är falsk)
not(5 > 5)not(3<=3)
FalseTrueTrueTrueTrueFalse
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: kodelse: 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: exempelif 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 kodtal = 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 - elseif villkorstest: kodelif villkorstest: kodelse: 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
Ja Nej
tal > 0Nej
Skriv ut tal är positivt
Skriv ut tal är noll
Ja
if – elif – else: motsvarande kodtal = 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örningarGe in ett tal: 1515 är positivt
Ge in ett tal: -5-5 är negativt
Ge in ett tal: 00 ä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örningarVill du spela schack? (j/n) nOK, hejdå! Vill du spela schack? (j/n) jNu skall här spelas schack!Vill du börja? (j/n) jOK, ge mig ditt bästa drag.
Vill du spela schack? (j/n) jNu skall här spelas schack!Vill du börja? (j/n) nOK, bered dig på att förlora. Låt mig
fundera...
Övningar1. 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)
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.