Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Relevanta dokument
Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner

Föreläsning 2 Programmeringsteknik och C DD1316

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Introduktion till programmering SMD180. Föreläsning 3: Funktioner

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Grundläggande datalogi - Övning 1

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Programmeringsteknik med C och Matlab

Språket Python - Del 1 Grundkurs i programmering med Python

Introduktion till programmering SMD180. Föreläsning 8: Listor

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Föreläsning 3 Programmeringsteknik och Matlab DD1315. Importering av moduler. randrange

TDIU01 - Programmering i C++, grundkurs

Introduktion till programmering SMD180. Föreläsning 9: Tupler

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

DD1314 Programmeringsteknik

Selektion och iteration

Uppgifter teknik HT17 (uppdaterad v. 40)

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Pythons standardbibliotek

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Föreläsning 3-4 Innehåll

DD1361 Programmeringsparadigm. Carina Edlund

Tentamen i Introduktion till programmering

Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

TDIU01 - Programmering i C++, grundkurs

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

Övning2. Variabler. Data typer

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

729G74 IT och programmering, grundkurs. Tema 2, Föreläsning 2 Jody Foo,

Programmering i C, 7,5 hp

PYTHON SNABBREPETITION MEN FÖRST LITE ALLMÄNT OM PROGRAMMERING 729G04 PYTHON 2. Dagens Python

Språket Python - Del 2 Grundkurs i programmering med Python

Övningsuppgifter kapitel 8

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

Ordlistor, filhantering och ut på webben. Linda Mannila

Kurslitteraturen. C-nivå Villkorssatser [kap 8] if & elif & else and & or Loopar [kap 9] for

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Data, typ, selektion, iteration

Kort om programmering i Python

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Klassdeklaration. Metoddeklaration. Parameteröverföring

Laboration: Whitebox- och blackboxtesting

Föreläsning 4 Programmeringsteknik DD1310. Felhantering. Syntax. try och except är reserverade ord som används för hantering av exekverings fel.

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

729G04 Programmering och diskret matematik. Python 3: Loopar

Variabler och konstanter

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

Föreläsning 5 Mer om funktioner, villkor

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

Föreläsning 5-6 Innehåll

JavaScript del 3 If, Operatorer och Confirm

Repetition C-programmering

Introduktion till programmering D0009E. Föreläsning 9: Tupler och dictionaries

Numeriska Metoder och Grundläggande Programmering för P1, VT2014

Datalogi, grundkurs 1

Föreläsning 6: Introduktion av listor

Föreläsning 4. Val, boolska värden, läsbarhet, osv

v. 42 Python HT17 En introduktion Oscar Bergqvist

Imperativ och Funktionell Programmering i Python #TDDD73. Fredrik Heintz,

Använda Python Laboration 1 GruDat, DD1344

Introduktion C-programmering

Sammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

C++ - En introduktion

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Att skriva till och läsa från terminalfönstret

TDP002 - Imperativ programmering

Funktioner. Linda Mannila

Uttryck och villkor. Föreläsning 2

Sätt att skriva ut binärträd

729G74 IT och programmering, grundkurs. Tema 3. Föreläsning 2 Jody Foo,

Hur man programmerar. TDDC66 Datorsystem och programmering Föreläsning 3. Peter Dalenius Institutionen för datavetenskap

Kompilera och exekvera Javakod

Datorlära 6. Arbeta med strängar Inmatning med tangentbordet Bygga ett program med inmatning, funktioner, osv

TDDC77 Objektorienterad Programmering

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Introduktion till programmering SMD180. Föreläsning 7: Strängar

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

Objektorienterad programmering Föreläsning 4

C++ Slumptalsfunktioner + switch-satsen

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

Komponentvisa operationer,.-notation Multiplikation (*), division (/) och upphöj till (ˆ) av vektorer följer vanliga vektoralgebraiska

v. 43 Python HT17 En introduktion Oscar Bergqvist

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två

Transkript:

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E Föreläsning 4: Villkor och rekursion Konverterar mellan de grundläggande typerna: >>> int("") >>> int(.999) >>> float().0 >>> str() "" >>> int("spam") ValueError: invalid literal for int(): Spam Modulus-operatorn 7 delat med är (heltalsdivision) samt resten Uttrycks i Python med / och modulus-operatorn % >>> quotient = 7 / >>> print quotient >>> remainder = 7 % >>> print remainder Användningsexempel: x % y är 0 om x är delbart med y x % 0 ger entalssiffran för talet x Kommentarer Påverkar inte programflödet eller resultatet Är endast till för att beskriva (kommentera) själva källkoden Behjälpligt för någon annan som läser koden (eller för en själv) Kommentarer börjar med # En vanlig sats kan avslutas med en kommentar på samma rad 4 Kommentarer - exempel Exempel # compute the precentage of the hour that has elapsed percentage = (minute * 00) / 60 Exempel percentage = (minute * 00) / 60 # cuation: integer division Boolska uttryck För att kunna avgöra om x är delbart med y måste vi kunna testa om värdet av uttrycket x % y är lika med 0 Likhetstest uttrycks i Python med operatorn ==, dvs vårt delbarhetstest blir x%y == 0 Utfallet av detta test är ett utav de två sanningsvärdena True eller False Uttryck som resulterar i sanningsvärden kallas boolska (efter logikern George Boole) Observera skillnaden: x = y är ett kommando som tvingar fram likhet x == y är ett uttryck som undersöker eventuell likhet 5 6

Fler boolska uttryck Andra Python-operatorer som genererar sanningsvärden: x!= y är True om x inte är lika med y x > y är True om x är större än y x < y är True om x är mindre än y x >= y är True om x är större eller lika med y x <= y är True om x är mindre eller lika med y >>> 5 == 5 True >>> math.pi <=.7 False Logiska operatorer Vi kan räkna vidare med sanningsvärden med hjälp av de logiska operatorerna and, or och not Är n delbart med eller? n% == 0 or n% == 0 Ligger x i intervallet 0..0? x >= 0 and x <= 0 Alternativt sätt att uttrycka x!= y not (x == y) Liten sidnotis: De logiska operatorerna accepterar även numeriska värden, där 0 behandlas som False och övriga värden som True 7 8 Villkorlig exekvering En huvuduppgift för boolska uttryck är att styra exekveringen av satser. Exempel: if x > 0: print "x is positive" Generellt mönster: if uttryck: satslista Betyd beräkna uttryck, kör sedan satslista ifall resultatet blev True Alternativ exekvering En variant på if-satsen, nu med två grenar (branches): if x% == 0: print x, "is even" print x, "is odd" Ytterligare en variant, med en kedja av villkor: if x < y: print x, "is less than", y elif x > y: print x, "is greater than", y print x, "and", y, "are equal" 9 0 Ytterligare alternativ Fler än tre grenar: if choice == 'A': functiona() elif choice == 'B': functionb() elif choice == 'C': functionc() else print "Invalid choice" Regel: en elif-kedja måste inledas med en if Nästlade villkor Formen elif är strängt taget inte nödvändig: if x < y: print x, "is less than", y if x > y: print x, "is greater than", y print x, "and", y, "are equal" Läsbarheten försvinner dock snabbt om man på detta sätt nästlar if-satser i många nivåer

Mer nästling Notera I stället för den logiska operatorn and: if 0 < x: if x < 0: Följande är dock att föredra: if 0 < x and x < 0: Python har faktiskt ett speciellt "syntaktiskt socker" för just denna form av jämförelser: if 0 < x < 0: Ett ofta återkommande syntaktiskt mönster i Python: huvud: satslista Huvuden vi sett: def namn( parameterlista ) elif uttryck if uttryck else För satslistan (den omgivande satsens kropp) gäller: Varje sats skrivs på ny rad Indenteringen är viktig, den avgör var listan slutar Det måste finnas minst sats, ingen övre gräns Om tom lista önskas, använd den triviala satsen pass 4 return-satsen Om synlighet Avbryter en funktion omedelbart. Exempel: def printlogarithm(x): if x <= 0: print "Positive number only, please" return result = math.log(x) print "The logarithm of x is", result return-satsen kan bara förekomma inuti en funktion Satsen medför att programmet omedelbart fortsätter där den aktuella funktionen blev anropad Vilka andra funktioner är synliga (dvs anropbara) inuti funktionen f? def a(): satser def f(): satser? def b(): satser Svar: både a och b. Den inbördes ordningen mellan funktionsdefinitioner spelar alltså ingen roll Följdfråga: kan f i så fall också anropa sig själv? 5 6 7 Självanrop = rekursion def ( n ): if n == 0: print "Blastoff!" print n ( n- ) Vad som händer om vi anropar (0) är självklart... Men vad händer om vi skriver ()? 8 () Exekveringen av börjar, med n =, och eftersom inte är 0 så skrivs ut och () anropas Exekveringen av börjar, med n =, och eftersom inte är 0 så skrivs ut och () anropas Exekveringen av börjar, med n =, och eftersom inte är 0 så skrivs ut och (0) anropas Exekveringen av börjar, med n = 0, men eftersom 0 är lika med 0 så skrivs "Blastoff!" ut och (0) returnerar () returnerar () returnerar () returnerar

() () Själva utskriften blir alltså >>> ( ) Blastoff! >>> Stackdiagram som visar tillståndet just när "Blastoff!" skrivs ut: -toplevel- n n n Observera att vi har fyra olika variabler som alla kallas n i detta läge! n 0 9 0 Mer rekursion Mer rekursion Vi har tidigare definierat def newline(): print def threelines(): Inte så flexibelt... vi kanske vill skriva ut nyrader... Med hjälp av rekursion kan vi i stället skriva: def nlines( n ): if n > 0: print nlines( n- ) Vad som händer om vi skriver nlines(0) är uppenbart (ingenting skrivs ut!) Effekten av nlines() är att en nyrad skrivs, följt av effekten av nlines(0) Effekten av nlines() är att en nyrad skrivs, följt av effekten av nlines()... Oändlig rekursion Notera att våra rekursiva funktioner båda har ett basfall (en alternativ exekveringsväg) som inte innehåller något självanrop Detta basfall visar sig vara nödvändigt. För vad händer om det utelämnas? def recurse(): recurse() recurse() Anropen fortsätter i all oändlighet (dvs tills datorns minne tar slut!) Vi återkommer till fler aspekter av rekursion längre fram Om input När vi kör interpretatorn interaktivt ger vi vanligen input till våra funktioner direkt när de anropas: >>> printlogarithm(0) The logarithm of x is.0585099940459 >>> printlogarithm(0) Only positive numbers, please Ett script kan hitta eventuell input från operativsystemets kommandorad i variabeln argv i modulen sys (mer om denna detalj senare) Större/moderna program har dock ofta möjligheten att själva kommunicera med omgivningen interaktivt... 4 4

Interaktiva program Ett interaktivt program är ett program som under tiden det körs har förmåga att stanna upp och vänta på input från omgivningen input som inte nödvändigtvis existerade när programmet en gång startade Stora interaktiva program är i allmänhet mycket komplexa, ofta med flera input-källor som kan ge indata samtidigt. Hur man konstruerar sådana program är ett viktigt ämne i senare kurser Vi ska här bara snabbt beröra en enkel metod att skriva små interaktiva program: den inbyggda funktionen raw_input() raw_input() >>> str = raw_input() Bla bla >>> print str Bla bla Observera att den andra raden är text som vi matar in, anropet till raw_input() har då alltså inte avslutats än Variant av funktionen som skriver ut en promt: >>> str = raw_input("say something! ") Say something! Bla bla >>> print "You said:", str You said: Bla bla 5 6 Input av heltal Hemuppgift Om bara heltal förväntas som input kan man skriva: >>> n = input("enter your number: ") Enter your number: >>> print n Detta program stannar dock med ett runtime-fel om man matar in en sträng som inte kan konverteras till ett heltal. Säkrast är att använda raw_input och konvertera själv (eller ge sig till tåls tills vi introducerar undantag (exceptions)!) Att minnas: med raw_input() kan man lägga in "vilopunkter" i programmet där körningen stannar upp i väntan på input från tangentbordet Skriv en funktion som skriver ut n:te multiplikationstabellen från a till b Funktionen tar tre argument, n, a och b n=, a=, b=8: Extrauppgift: Skriv en funktion som skriver ut alla multiplikationstabeller, från i till k >>> multi(,,8) * = 6 * = 9 4 * = 5 * = 5 6 * = 8 7 * = 8 * = 4 >>> 7 8 5