Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
2015-08-31 Imperativ och Funktionell Programmering i Python #TDDD73 Fredrik Heintz, IDA [email protected] @FredrikHeintz Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Mål med föreläsningen • Du ska bli grymt inspirerad att lära dig programmera! • Du ska känna till och förstå målen och upplägget med kursen. • Du ska känna till och förstå kopplingen mellan TDDC66, TDDD73, TDDD63 och TATA65. • Du ska ha sett ett Python-program och känna till den grundläggande terminologin. • Du ska vara medveten om att det krävs mycket arbete att bli bra programmerare! 1 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Autonoma farkoster på IDA • • • • • • 245kLOC header filer, 875kLOC C++, 600kLOC C, 300kLOC java, 150kLOC python Totalt mer än 2 millioner rader kod 2 2015-08-31 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 Världen är beroende av mjukvara! De som verkligen förstår och kan utnyttja mjukvaruteknik äger framtiden 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 Vem riktar sig kursen till? Hjälp! Jag fattar noll! Rädda mig! Ska man trycka på Enter nu?! Hur svårt kan det vara? Det är mig Google ringer när de har problem. Hur mycket kan jag om programmering redan? 3 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Hur långt kommer vi i den här kursen? 4 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Kursmål enligt kursplanen • Efter avslutad kurs ska du kunna: – redogöra för grundläggande datavetenskapliga begrepp relaterade till programmering och programspråk – konstruera program i Python – metodiskt lösa programmeringsrelaterade problem med hjälp av ett interaktivt arbetssätt med implementering, testning och felsökning – formulera och implementera rekursiva och iterativa algoritmer – konstruera abstraktioner med varierande grad av stöd i det underliggande språket Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Några roliga saker vi inte hinner med • Hur man designar grafiska gränssnitt • Hur datorer kommunicerar med varandra över nätverk • Hur man lagrar information i databaser • Hur man startar processer för att få saker att hända samtidigt • Hur man hanterar större programmeringsprojekt • Hur man gör appar Vi kommer att fokusera på grunderna i programmering och hur man etablerar goda vanor för att bli en bra programmerare. Allt det andra – och mycket mer – kommer längre fram. 5 2015-08-31 Vad är ett program och vad är programmering? 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 Programmering i ett nötskal program en uppsättning regler eller instruktioner med uppgift att styra en dators beräkningar (Nationalencyklopedin NE) programmering skrivande av instruktioner för en dators arbete (NE) komponenterna programspråket och dess konstruktioner processen principer för hur man utformar program resultatet hur program körs och hur de påverkar folk 6 2015-08-31 Programutvecklingsprocessen Fredrik Heintz, Fö1 #TDDD73 Analys Specifikation Design Implementation 2015-08-31 Förstå vilket problem som ska lösas! Beskriv vad programmet ska göra! Beskriv hur programmet ska lösa problemet! Översätt designen till ett datorprogram! Testning Prova programmet och rätta eventuella fel! Underhåll Fortsätt utveckla programmet vid behov! Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Datalogiskt tänkande • Computational Thinking • Data + logik + tänkande • En problemlösningprocess för att beskriva, analysera och lösa problem på ett sätt så att datorer kan hjälpa till – Bryta ner problem i delar – Hitta mönster – Skapa abstraktioner – Designa algoritmer 7 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Datalogiskt tänkande > Programmering > Kodning Hur lär man sig att programmera? 8 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Enligt Peter Norvig, forskningschef på Google • Bli intresserad av programmering, så att du orkar lägga ner 10000 timmar på träning. • Skriv många olika program. • Prata med andra programmerare och läs deras kod. • Om du vill, läs på universitet. • Arbeta i projekt tillsammans med andra programmerare. • Ta över projekt efter andra programmerare. • Lär dig åtminstone ett halvt dussin olika programmeringsspråk. Peter Norvig (2001) Teach Yourself Programming in Ten Years. http://norvig.com/21-days.html Varför har vi valt programspråket Python? 9 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande spelar en stor roll för språkets utveckling. • Det femte mest populära programspråket i världen. [1] • Åtta av tio toppuniversitet i USA använder Python som förstaspråk. [2] • Version 3.0, som vi kommer använda, kom i december 2008. Det var en ganska stor förändring som inte är bakåtkompatibel. • Fri programvara. [1] TIOBE Programming Community Index, augusti 2015 http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html [2] IT World, 8 juli 2014 http://www.itworld.com/software/426242/python-bumps-java-top-learning-language Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Fördelar med Python • Lätt att komma igång med. Enklare syntax än t.ex. Java och C++. • Har en stabil användarbas både på universitet och i industrin. • Funkar bra både för systemprogram och för tillämpningar. • Neutralt i förhållande till olika programmeringsparadigm. • Kan användas för att illustrera koncept inom programmering. 10 2015-08-31 Kursupplägg 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 Traditionell programmeringskurs print("Hello") Föreläsare 1 Student Labbass 11 2015-08-31 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 Yada yada Labbass Lärare ? Student 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 Upplägg för Python Inlärning kräver aktivitet. Föreläsningar är huvudsakligen passiva. Därför är föreläsningarna ersatta med studiematerial samt seminarier. Detta kräver att DU förbereder dig genom att studera materialet på egen hand INNAN seminarierna. Aktivitet Föreläsningar Tid i HT1 2h Innehåll Introduktion och översikt Seminarier 16 h Torrövningar samt diskussioner utifrån övningarna Laborationer 26 h Arbete i datorsal med övningar och uppgifter, diskussioner Eget arbete 68 h Läsa, öva, experiementera, arbeta med övningar och uppgifter 12 2015-08-31 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 Examination TDDC66 Datorsystem och programmering TDDD73 Funktionell och imperativ programmering i Python UPG1 Webbaserad datorintroduktion Slutuppgift Prova på-laborationer LAB1 Laborationsomgång 1-2 LAB1 Laborationsomgång 3-7 DAT1 Datortentamen Fredrik Heintz, Fö1 #TDDD73 Första läsperioden Python Första och andra läsperioden 2015-08-31 Tillåtet och otillåtet samarbete • Allt arbete med examinerande uppgifter i kursen TDDC66 Datorsystem och programmering ska ske enskilt (förutom prova på-laborationerna där arbetet sker i par). • I kursen TDDD73 Funktionell och imperativ programmering i Python (d.v.s. i praktiken från labbomgång 3) kommer ni att arbeta i par som ni själva får välja. • Vad är enskilt arbete? Var går gränsen för fusk? • Universitetets disciplinnämnd kan vid fusk stänga av studenter upp till sex månader, vilket innebär att man ej får delta i undervisning och inte får några studiemedel. 13 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Kurslitteratur • John M. Zelle (2010) Python Programming: An Introduction to Computer Science. Second Edition. ISBN 978-1-59028-241-0 • Boken har ett bra pedagogiskt upplägg som ansluter väl till det vi vill göra i kursen. • Den täcker dock inte allt som vi vill gå igenom, så läs studiematerialet! • Om man skaffar en annan Python-bok, se till att den täcker Python 3! • På tentan får ni ha med en publicerad bok. Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Personal • Examinator: Fredrik Heintz • Studierektor: Peter Dalenius • Kursadministratör: Anna Grabska Eklund • Lektions- och laborationsassistenter: – D1a: Fredrik Bergstrand, Sara Bergman – D1b: Henning Nåbo, Anders Märak Leffler – D1c: Simon Lindblad, Emil Segerbäck – U1: Fredrik Heintz, Erik Hansson, Viktor Holmgren 14 2015-08-31 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 Information och kommunikation • På kurswebben finns all information om kursen du behöver: http://www.ida.liu.se/~TDDD73 – Studiematerial – Laborationsmaterial – Länk till schema – Planering och deadlines – Regler för redovisning och komplettering – m.m. 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 Förhållande mellan övriga kurser under termin 1 TATA65 Diskret matematik TDDD72 Logik (bara U) TDDD63 Perspektiv på datateknik/datavetenskap TDDC66 Datorsystem och programmering TDDD73 Imperativ och funktionell programmering i Python 15 2015-08-31 Introduktion till Python och programmeringsterminologi Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Hur man startar Python-interpretatorn 16 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Hur man använder Python-interpretatorn >>> 2+3 5 >>> 2+4*5-6 16 >>> print("Hello world!") Hello world! >>> def greeting(): ... print(”Nobody expects the Spanish Inquisition.") ... print(”Our chief weapon is surprise... and fear.") ... >>> greeting() Nobody expects the Spanish Inquisition. Our chief weapon is surprise... and fear. Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Hur man använder Python-interpretatorn >>> def skryt(namn): ... print("Det är bra att kunna Python.") ... print(namn, "är jättebra på Python.") ... >>> skryt("Peter") Det är bra att kunna Python. Peter är jättebra på Python. >>> skryt("Jenny") Det är bra att kunna Python. Jenny är jättebra på Python. >>> skryt <function skryt at 0x218390> >>> print <built-in function print> 17 2015-08-31 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 Vårt första Python-program Fredrik Heintz, Fö1 #TDDD73 1. Skriv ut lite informativ text Vad gör programmet? 2. Läs in en rad från användaren, försök tolka vad som matades in och spara detta i variabeln x 2015-08-31 3. Börja gissa att roten ur x är x/2 och spara gissningen i variabeln guess def find_root(): print("This program tries to find the square root of a number.") x = eval(input("Enter a number: ")) guess = x/2 for i in range(5): 4. Upprepa de guess = (guess + x/guess)/2 följande raderna print(guess) 5 gånger find_root() 5. Räkna ut en ny bättre gissning och skriv ut den Newton-Raphsons metod för att räkna ut kvadratroten av ett tal x. 18 2015-08-31 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 Varför så mycket mellanrum? def find_root(): print("This program tries to find the square root of a number.") x = eval(input("Enter a number: ")) guess = x/2 for i in range(5): guess = (guess + x/guess)/2 print(guess) find_root() Underordnade rader måste skjutas in en bit på raden, indenteras. Newton-Raphsons metod för att räkna ut kvadratroten av ett tal x. 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 Olika sätt att köra vårt program zaza4 <23> python3 newton.py This program tries to find the square root of a number. Enter a number: 2 1.5 1.4166666666666665 1.4142156862745097 1.4142135623746899 1.414213562373095 zaza4 <24> python3 Python 3.2.2 (default, Mar 7 2012, 13:44:00) [GCC 3.4.6] on sunos5 Type "help", "copyright", "credits" or "license" for more information. >>> 19 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Hur man använder Python-interpretatorn >>> import newton This program tries to find the square root of a number. Enter a number: 2 1.5 1.4166666666666665 1.4142156862745097 1.4142135623746899 1.414213562373095 >>> newton.find_root() This program tries to find the square root of a number. Enter a number: 10 3.5 3.178571428571429 3.162319422150883 3.1622776604441363 3.162277660168379 Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Hur man använder Python-interpretatorn >>> from newton import * This program tries to find the square root of a number. Enter a number: 3 1.75 1.7321428571428572 1.7320508100147274 1.7320508075688772 1.7320508075688772 >>> find_root() This program tries to find the square root of a number. Enter a number: 5 2.25 2.236111111111111 2.2360679779158037 2.23606797749979 2.23606797749979 20 2015-08-31 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 Två viktiga byggstenar Satser gör något. Uttryck har ett värde. print("Hello") x = x + 3 a + b/2 square(y + 7) Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Imperativ och funktionell programmering • Imperativ programmering – Ett program är en följd av satser som manipulerar globala datastrukturer så att deras tillstånd förändras över tid. • Funktionell programmering – Ett program är en uppsättning funktioner vars utdata enbart beror av indata, d.v.s. de har inga sidoeffekter och manipulerar inte globala datastrukturer. • Objektorienterad programmering – Ett program är en uppsättning objekt som har vissa egenskaper och kan utföra vissa metoder. Programkörning innebär att meddelanden skickas mellan dessa objekt. 21 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Satser – ryggraden i ett program • Ett Python-program består av ett antal satser (eng. statements) som utförs i tur och ordning. De är huvudsakligen imperativa. Vi ska titta på de fem viktigaste, där vi redan sett de fyra första: • Enkla satser – Tilldelning (eng. assignment) – Funktionsanrop • Sammansatta satser – Iteration med for – Funktionsdefinition – Selektion med if Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Olika typer av satser: Tilldelning Hur ser det ut? namn = uttryck Vad händer? Uttrycket beräknas och resultatet sparas i den namngivna variabeln. def find_root(): print("This program tries to find the square root of a number.") x = eval(input("Enter a number: ")) guess = x/2 for i in range(5): guess = (guess + x/guess)/2 print(guess) find_root() 22 2015-08-31 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 Olika typer av satser: Funktionsanrop Hur ser det ut? funktionsnamn(frivilliga argument) Vad händer? Argumenten skickas till funktionen, underprogrammet, för behandling. def find_root(): print("This program tries to find the square root of a number.") x = eval(input("Enter a number: ")) guess = x/2 for i in range(5): guess = (guess + x/guess)/2 print(guess) find_root() Funktionsanrop som inte är självständiga satser Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Olika typer av satser: Iteration med for Hur ser det ut? for namn in område: undersatser Vad händer? Undersatserna körs så många gånger som området specificerar. def find_root(): print("This program tries to find the square root of a number.") x = eval(input("Enter a number: ")) guess = x/2 for i in range(5): guess = (guess + x/guess)/2 print(guess) find_root() 23 2015-08-31 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 Olika typer av satser: Funktionsdefinitioner Hur ser det ut? def funktionsamn(frivilliga argument): undersatser Vad händer? Undersatserna sparas för att kunna anropas senare. def find_root(): print("This program tries to find the square root of a number.") x = eval(input("Enter a number: ")) guess = x/2 for i in range(5): guess = (guess + x/guess)/2 print(guess) find_root() 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 Olika typer av satser: Selektion Enkelt val Tre eller fler alternativ if a > 0: print(“positivt") if 0 <= a < 10: print("ental") elif a < 0: print("negativt") else: print("tio eller mer") Två alternativ if a > 0: print(“positivt") else: print(“negativt") 24 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Inför första laborationstillfället • Ta reda på vilken labbgrupp du är med i (se kurswebben). • Ta reda på när den labbgruppen har sitt första labbtillfälle (se schemat). • Dyk upp på rätt plats i rätt tid. Våra laborationer brukar börja kvart över. De flesta har sin första laboration på onsdag, några redan imorgon. Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Mål med föreläsningen • Du ska bli grymt inspirerad att lära dig programmera! • Du ska känna till och förstå målen och upplägget med kursen. • Du ska känna till och förstå kopplingen mellan TDDC66, TDDD73, TDDD63 och TATA65. • Du ska ha sett ett Python-program och känna till den grundläggande terminologin. • Du ska vara medveten om att det krävs mycket arbete att bli bra programmerare! 25 2015-08-31 Fredrik Heintz, Fö1 #TDDD73 2015-08-31 Glöm aldrig! Imperativ och Funktionell Programmering i Python #TDDD73 Fredrik Heintz, IDA [email protected] @FredrikHeintz 26