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

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

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

Transcript of Planering av ett större program - Funktioner, moduler, if och Boolean

Page 1: Planering av ett större program - Funktioner, moduler, if och Boolean

Planering av ett större program- Funktioner, moduler, if och BooleanLinda Mannila 2.10.2007

Page 2: Planering av ett större program - Funktioner, moduler, if och Boolean

Vad kan vi nu?

Primitiva datatyper grundläggande funktionalitet

Utskrift Indata Felhantering

Page 3: Planering av ett större program - Funktioner, moduler, if och Boolean

Denna föreläsning

Planering av ett större program Intro till funktioner och moduler Kontrollstrukturen if Booleska värden

Page 4: Planering av ett större program - Funktioner, moduler, if och Boolean

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!

Page 5: Planering av ett större program - Funktioner, moduler, if och Boolean

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

Page 6: Planering av ett större program - Funktioner, moduler, if och Boolean

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

Page 7: Planering av ett större program - Funktioner, moduler, if och Boolean

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

Page 8: Planering av ett större program - Funktioner, moduler, if och Boolean

Vad är en funktion?

Ett miniprogram inne i ett program

min_funktion

Indata Utdata

Page 9: Planering av ett större program - Funktioner, moduler, if och Boolean

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.

Page 10: Planering av ett större program - Funktioner, moduler, if och Boolean

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

Page 11: Planering av ett större program - Funktioner, moduler, if och Boolean

”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

Page 12: Planering av ett större program - Funktioner, moduler, if och Boolean

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)

Page 13: Planering av ett större program - Funktioner, moduler, if och Boolean

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']

Page 14: Planering av ett större program - Funktioner, moduler, if och Boolean

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

Page 15: Planering av ett större program - Funktioner, moduler, if och Boolean

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)

Page 16: Planering av ett större program - Funktioner, moduler, if och Boolean

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)

Page 17: Planering av ett större program - Funktioner, moduler, if och Boolean

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

Page 18: Planering av ett större program - Funktioner, moduler, if och Boolean

Ö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]?

Page 19: Planering av ett större program - Funktioner, moduler, if och Boolean

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

Page 20: Planering av ett större program - Funktioner, moduler, if och Boolean

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

Page 21: Planering av ett större program - Funktioner, moduler, if och Boolean

…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

Page 22: Planering av ett större program - Funktioner, moduler, if och Boolean

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)

Page 23: Planering av ett större program - Funktioner, moduler, if och Boolean

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

Page 24: Planering av ett större program - Funktioner, moduler, if och Boolean

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

Page 25: Planering av ett större program - Funktioner, moduler, if och Boolean

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'>>>>

Page 26: Planering av ett större program - Funktioner, moduler, if och Boolean

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

Page 27: Planering av ett större program - Funktioner, moduler, if och Boolean

= 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

Page 28: Planering av ett större program - Funktioner, moduler, if och Boolean

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

Page 29: Planering av ett större program - Funktioner, moduler, if och Boolean

Precendensregler I uttryck med många operatorer sker

evalueringen i följande ordning (** har högst precedens, or har lägst)

**

*, /, %

+, -

<, <=, >, >=, !=, ==

not

and

or

Page 30: Planering av ett större program - Funktioner, moduler, if och Boolean

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.

Page 31: Planering av ett större program - Funktioner, moduler, if och Boolean

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

Page 32: Planering av ett större program - Funktioner, moduler, if och Boolean

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.

Page 33: Planering av ett större program - Funktioner, moduler, if och Boolean

if – else: flödesschema

tal % 2 == 0

Skriv ut ”Talet är jämnt”

Läs in tal

Ja Nej

Skriv ut ”Talet är udda”

Page 34: Planering av ett större program - Funktioner, moduler, if och Boolean

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

Page 35: Planering av ett större program - Funktioner, moduler, if och Boolean

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

Page 36: Planering av ett större program - Funktioner, moduler, if och Boolean

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

Page 37: Planering av ett större program - Funktioner, moduler, if och Boolean

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'

Page 38: Planering av ett större program - Funktioner, moduler, if och Boolean

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

Page 39: Planering av ett större program - Funktioner, moduler, if och Boolean

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

Page 40: Planering av ett större program - Funktioner, moduler, if och Boolean

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

Page 41: Planering av ett större program - Funktioner, moduler, if och Boolean

Ö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.