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

Relevanta dokument
Introduktion till programmering

Imperativ och Funktionell Programmering i Python #TDDD73

Introduktion till programmering

Introduktion till Python. TDDE23 Funktionell och imperativ programmering, del 1 Föreläsning 3 Peter Dalenius Institutionen för datavetenskap

Programmering, grundkurs

Mjukstart i programmering

729G75: Programmering och algoritmiskt tänkande. Tema 1, föreläsning 1 Jody Foo

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo

Selektion och iteration

TDIU01 (725G67) - Programmering i C++, grundkurs

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

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

Objektorienterad Programmering (TDDC77)

TDDD78 / 729A85 Objektorienterad programmering och Java

DD1314 Programmeringsteknik

Datalogiskt tänkande är mer än Programmering. Fredrik Heintz Linköpings universitet

Introduktion till Linux. TDDC66 Datorsystem och programmering Föreläsning 1 Peter Dalenius Institutionen för datavetenskap

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

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

TDDD78 / 729A85 Objektorienterad programmering och Java

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

Grundläggande programmering med matematikdidaktisk inriktning för lärare som undervisar i gy eller komvux gy nivå, 7,5 hp

Datalogiskt tänkande för alla

FÖRELÄSNING 1 PERSONAL TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017 SYFTE EXAMINATION ORGANISATION

Datavetenskapligt program, 180 högskolepoäng

TDDE44 Programmering, grundkurs

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

IT OCH PROGRAMMERING I SKOLAN. Jan Erik Moström Peter Vinnervik

Datalogiskt Tänkande i skolan. Fredrik Heintz,

Programmering - abstraktion och modellering

Programutveckling med Java 7.5 p, ht 2007 (D0019N) STUDIEHANDLEDNING - ALLMÄN INFORMATION

Grundkurs i programmering - intro

Introduktion till programmering och Python Grundkurs i programmering med Python

Objektorienterad Programmering (TDDC77)

Introduktion till Linux. TDDC66 Datorsystem och programmering Föreläsning (i) Peter Dalenius Institutionen för datavetenskap

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

Objektorienterad programmering

Outline. Objektorienterad Programmering (TDDC77) Kursinfo. Outline. Hemsida. Organization. Ahmed Rezine Examination. Webreg.

Läsöversikt. Föreläsningar 2-6. Genomförande av laborationer

Översikt. Programmering tillämpningar och datastrukturer. Vad kursen täcker. Lärare. Rekommenderad litteratur. Kursmål 729G58 (HKGBB7)

Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg

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

Sätt att skriva ut binärträd

729G06 Föreläsning 1 Objektorienterad programmering

TDDD73-funktionell och imperativ programmering i python

Datorsystem och programmering

Välkomna till DIT012 IPGO

TDP001/TDP002. Introduktionsföreläsning. Eric Elfving Institutionen för Datavetenskap (IDA)

Imperativ programmering

Kursanalys DA2003 sommar 2017

Dataabstraktion. TDDD73 Funktionell och impterativ programmering i Python Föreläsning 12. Peter Dalenius Institutionen för datavetenskap

Uppgifter teknik HT17 (uppdaterad v. 40)

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

Avdelningen för informations- och kommunikationssystem Fakulteten för naturvetenskap, teknik och medier

TDDC77 Objektorienterad Programmering

Grafik. TDDC66 Datorsystem och programmering Föreläsning 4. Peter Dalenius Institutionen för datavetenskap

Program & programmering

Välkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA

Introduktion till Datalogi DD1339. Föreläsning 1 8 sept 2014

Programvaruteknik, hp

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

Objektorienterad programmering och Java

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Digitalt lärande och programmering i klassrummet

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Introduktion till programmering, hösten 2011

Datamodeller och databaser, avancerad kurs

MATLAB-modulen Programmering i MATLAB. Höstterminen hp. Vad är MATLAB

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

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

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

Välkomna till DIT012 IPGO. Tyvärr en bug i Google Docs: Sidnummer stämmer inte alltid. Alla anteckningar börjar på sidan 1.

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

EDAA01 Programmeringsteknik - fördjupningskurs

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

Introduktion till Unix och Linux

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Utbildningsplan för Datavetenskapligt program, 180 högskolepoäng

Introduktionsmöte Innehåll

Föreläsning 1: Intro till kursen och programmering

Kursplanering Objektorienterad programmering

Imperativ programmering i ADA

GRUNDKURS I C-PROGRAMMERING

Introduktion till Linux. TDDE23 Funktionell och imperativ programmering, del 1 Föreläsning 1 Peter Dalenius Institutionen för datavetenskap

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

Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg niklas.broberg@chalmers.

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

SKOLFS. beslutade den XXX 2017.

Kursanalys DA2003 höst 2017

Funktionell programmering

Grundläggande programmering med matematikdidaktisk inriktning för lärare i åk 7-9

Deklarativ programmering

Föreläsning 1: Introduktion till kursen

Programming in C# and.net Framework

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Programmeringsteknik I

Transkript:

Kommentarer 2016 Drog över lite både första och andra timmen. Spenderade för mycket tid på introduktionen tror jag. Kom till Datalogiskt tänkande första timmen. Behöver ha en genomtänkt plan för bilden med olika typer av studenter. Bilderna om laborationer och seminarier borde komma direkt efter diskussionen om kursupplägg. Kan repeteras sist om önskas. Scope tas inte upp. Mer fokus på begrepp i delen om Python? Bilden om uttryck borde ha exempel.

Imperativ och Funktionell Programmering i Python #TDDD73 Fredrik Heintz, IDA fredrik.heintz@liu.se @FredrikHeintz

Vem är jag? Bakgrund Utbildning Forskning Programmeringstävlingar

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!

Autonoma farkoster på IDA 245kLOC header filer, 875kLOC C++, 600kLOC C, 300kLOC java, 150kLOC python Totalt mer än 2 millioner rader kod

Världen är beroende av mjukvara! De som verkligen förstår och kan utnyttja mjukvaruteknik äger framtiden

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? Hur mycket kan jag om programmering redan? Det är mig Google ringer när de har problem.

Hur långt kommer vi i den här kursen?

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

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.

Vad är ett program och vad är programmering?

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

Vad är ett program? En detaljerad instruktion som om man följer den ger ett visst resultat.

Vad är ett program? En detaljerad instruktion som om man följer den ger ett visst resultat. def find_root(): print( Find the square root.") x = int(input("enter a number: ")) guess = x/2 for i in range(5): guess = (guess + x/guess)/2 print(guess) find_root()

Programflöde

Abstraktion

Programutvecklingsprocessen Analys Specifikation Design Implementation 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!

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 Ge detaljerade steg-för-steg instruktioner Bryta ner problem i delar Hitta mönster Skapa abstraktioner Designa algoritmer

Datalogiskt tänkande > Programmering > Kodning

Hur lär man sig att programmera?

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?

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 2016 http://www.tiobe.com/tiobe-index/ [2] IT World, 8 juli 2014 http://www.itworld.com/software/426242/python-bumps-java-top-learning-language

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.

Kursupplägg

Traditionell programmeringskurs print("hello") Föreläsare 1 Student Labbass

Yada yada Labbass Lärare? Student

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 6h Innehåll Introduktion och översikt Seminarier 14 h Torrövningar samt diskussioner utifrån övningarna Laborationer 28 h Arbete i datorsal med övningar och uppgifter, diskussioner Eget arbete 64 h Läsa, öva, experiementera, arbeta med övningar och uppgifter

Examination TDDC66 Datorsystem och programmering TDDD73 Funktionell och imperativ programmering i Python UPG1 Webbaserad datorintroduktion Slutuppgift Prova på-laborationer LAB1 Laborationsomgång 1-3 LAB1 Laborationsomgång 4-7 DAT1 Datortentamen Första läsperioden Python Första och andra läsperioden

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 4) kommer ni att arbeta i par som vi väljer tillsammans med er. 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.

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.

Personal Examinator: Fredrik Heintz Studierektor: Peter Dalenius Kursadministratör: Anna Grabska Eklund Lektions- och laborationsassistenter: D1a: Andreas Norrstig, Raymond Leow D1b: Erik Hansson, Emil Segerbäck D1c: Henning Nåbo, Anders Märak Leffler U1: Fredrik Heintz, Frans Skarman, Anton Gefvert

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.

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

Introduktion till Python och programmeringsterminologi

Hur man startar Python-interpretatorn

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.

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>

Vårt första Python-program

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 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 = int(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.

Varför så mycket mellanrum? def find_root(): print("this program tries to find the square root of a number.") x = int(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.

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

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

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

Två viktiga byggstenar Satser gör något. Uttryck har ett värde. print("hello") x = x + 3 a + b/2 square(y + 7)

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.

Uttryck det enda som är värt något Uttryck (eng. expressions) är delar av satser som kan beräknas till ett värde, t.ex. ett tal eller en bit text. Funktionella program består endast av uttryck. Enkla uttryck Identifierare (namn) Literaler (konstanter) Sammansatta uttryck Funktionsanrop Uttryck kan kombineras till sammansatta uttryck med hjälp av olika operatorer.

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) x = x + 2 Funktionsanrop print("hello") Sammansatta satser Iteration med for for i in range(5):... Funktionsdefinition def find_root():... Selektion med if if a > 0:...a

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 = int(input("enter a number: ")) guess = x/2 for i in range(5): guess = (guess + x/guess)/2 print(guess) find_root()

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 = int(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

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 = int(input("enter a number: ")) guess = x/2 for i in range(5): guess = (guess + x/guess)/2 print(guess) find_root()

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 = int(input("enter a number: ")) guess = x/2 for i in range(5): guess = (guess + x/guess)/2 print(guess) find_root()

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")

Ordning och reda på programkoden Programkod organiseras i moduler, och om man inte gör något speciellt kommer varje fil att bli en modul. import newton Ladda in modulen (filen) newton som finns i filen newton.py. Funktioner i modulen går att anropa med newton.funktionsnamn from newton import * Ladda in modulen (filen) newton så att allt som finns i den går att anropa direkt. Detta är bra för våra små program, men blir rörigt när vi kommer lite längre fram.

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 börjar kvart över. Alla har sin första laboration imorgon.

Inför första seminarietillfället Bestäm dig för vilken grupp du vill vara med i: En sak i taget (D1c) För er som vill ta det steg för steg och känna att ni förstår en sak innan ni går vidare till nästa. Experimentering (D1a och D1b) För er som vill lära er genom att testa er fram. Prövar gärna olika lösningar på medhavd dator. Diskussion och analys (U) För er som vill diskutera och analysera utifrån det ni redan kan och det ni kommer att lära er. Ni är inte rädda för okända begrepp eller att gå utanför kursens ramar. Dyk upp på rätt plats i rätt tid. Våra seminarier börjar kvart över.

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 för att bli bra programmerare!

Glöm aldrig!

Imperativ och Funktionell Programmering i Python #TDDD73 Fredrik Heintz, IDA fredrik.heintz@liu.se @FredrikHeintz