Download Imperativ och Funktionell Programmering i Python #TDDD73 Mål med föreläsningen

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
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