Top Banner
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.
62

KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Sep 16, 2018

Download

Documents

TrầnNgọc
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Kommentarer• 2016

– Drog över lite både första och andra timmen.

– Spenderade för mycket tid på introduktionen tror jag. Kom till Datalogiskttä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 diskussionenom 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.

Page 2: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Imperativ och FunktionellProgrammering i Python#TDDD73Fredrik Heintz, [email protected]@FredrikHeintz

Page 3: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Vem är jag?

Utbildning Programmeringstävlingar

ForskningBakgrund

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 4: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Mål med föreläsningen

2016-08-29Fredrik Heintz, Fö1 #TDDD73

• 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äggandeterminologin.

• Du ska vara medveten om att det krävs mycket arbete att bli braprogrammerare!

Page 5: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 6: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 7: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Autonoma farkoster på IDA

2016-08-29Fredrik Heintz, Fö1 #TDDD73

• 245kLOC header filer,• 875kLOC C++,• 600kLOC C,• 300kLOC java,• 150kLOC python• Totalt mer än 2 millioner rader kod

Page 8: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Världen är beroende av mjukvara!

2016-08-29Fredrik Heintz, Fö1 #TDDD73

De som verkligen förstår ochkan utnyttja mjukvaruteknik

äger framtiden

Page 9: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Vem riktar sig kursen till?

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Hur mycket kan jag om programmering redan?

Hjälp!Jag fattar noll!

Rädda mig!Ska man tryckapå Enter nu?!

Hur svårtkan det vara?

Det är mig Google ringernär de har problem.

Page 10: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 11: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

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

Page 12: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Kursmål enligt kursplanen• Efter avslutad kurs ska du kunna:

– redogöra för grundläggande datavetenskapliga begrepp relaterade tillprogrammering och programspråk

– konstruera program i Python

– metodiskt lösa programmeringsrelaterade problem med hjälp av ettinteraktivt arbetssätt med implementering, testning och felsökning

– formulera och implementera rekursiva och iterativa algoritmer

– konstruera abstraktioner med varierande grad av stöd i detunderliggande språket

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 13: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

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 ochhur man etablerar goda vanor för att bli en bra programmerare.Allt det andra – och mycket mer – kommer längre fram.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 14: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Vad är ett program och vad är programmering?

Page 15: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Programmering i ett nötskalprogram en uppsättning regler eller instruktioner med uppgift att styraen dators beräkningar (Nationalencyklopedin NE)programmering skrivande av instruktioner för en dators arbete (NE)

komponenternaprogramspråket ochdess konstruktioner

processenprinciper för hur man

utformar program

resultatethur program körs ochhur de påverkar folk

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 16: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

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

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 17: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

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

2016-08-29Fredrik Heintz, Fö1 #TDDD73

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

Page 18: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Programflöde2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 19: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Abstraktion

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 20: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Programutvecklingsprocessen

Implementation Översätt designen till ett datorprogram!

Testning Prova programmet och rätta eventuella fel!

Underhåll Fortsätt utveckla programmet vid behov!

Analys Förstå vilket problem som ska lösas!

Specifikation Beskriv vad programmet ska göra!

Design Beskriv hur programmet ska lösa problemet!

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 21: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Datalogiskt tänkande

2016-08-29Fredrik Heintz, Fö1 #TDDD73

• Computational Thinking

• Data + logik + tänkande

• En problemlösningprocess för att beskriva,analysera och lösa problem på ett sätt så attdatorer kan hjälpa till

– Ge detaljerade steg-för-steg instruktioner

– Bryta ner problem i delar

– Hitta mönster

– Skapa abstraktioner

– Designa algoritmer

Page 22: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Datalogiskt tänkande>

Programmering>

Kodning

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 23: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Hur lär man sig att programmera?

Page 24: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

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

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 25: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Varför har vi valt programspråket Python?

Page 26: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

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 enganska stor förändring som inte är bakåtkompatibel.

• Fri programvara.[1] TIOBE Programming Community Index, augusti 2016http://www.tiobe.com/tiobe-index/[2] IT World, 8 juli 2014http://www.itworld.com/software/426242/python-bumps-java-top-learning-language

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 27: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

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.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 28: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Kursupplägg

Page 29: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Traditionell programmeringskurs

2016-08-29Fredrik Heintz, Fö1 #TDDD73

print("Hello")

1

Föreläsare

Student Labbass

Page 30: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Student

Lärare

Yadayada

?

Labbass

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 31: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Upplägg för Python

Aktivitet Tid i HT1 InnehållFöreläsningar 6 h Introduktion och översiktSeminarier 14 h Torrövningar samt diskussioner utifrån övningarnaLaborationer 28 h Arbete i datorsal med övningar och uppgifter, diskussionerEget arbete 64 h Läsa, öva, experiementera, arbeta med övningar och uppgifter

2016-08-29Fredrik Heintz, Fö1 #TDDD73

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 studeramaterialet på egen hand INNAN seminarierna.

Page 32: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

TDDD73Funktionell ochimperativprogrammeringi Python

TDDC66Datorsystem ochprogrammering

ExaminationWebbaserad datorintroduktionSlutuppgiftProva på-laborationer

Laborationsomgång 1-3

Laborationsomgång 4-7

Datortentamen

UPG1

LAB1

LAB1

DAT1

Förstaläsperioden

Första och andraläsperioden

Python

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 33: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Tillåtet och otillåtet samarbete• Allt arbete med examinerande uppgifter i kursen TDDC66 Datorsystem

och programmering ska ske enskilt (förutom prova på-laborationernadä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 vivä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 tillsex månader, vilket innebär att man ej får delta i undervisning och intefår några studiemedel.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 34: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Kurslitteratur• John M. Zelle (2010) Python Programming:

An Introduction to Computer Science. SecondEdition. ISBN 978-1-59028-241-0

• Boken har ett bra pedagogiskt upplägg somansluter 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 tillatt den täcker Python 3!

• På tentan får ni ha med en publicerad bok.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 35: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

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

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 36: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

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.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 37: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Förhållande mellan övriga kurser under termin 1

2016-08-29Fredrik Heintz, Fö1 #TDDD73

TDDC66 Datorsystem ochprogrammering TDDD73 Imperativ och funktionell programmering i Python

TDDD63 Perspektiv på datateknik/datavetenskap

TATA65 Diskret matematik TDDD72 Logik (bara U)

Page 38: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Introduktion till Python ochprogrammeringsterminologi

Page 39: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Hur man startar Python-interpretatorn

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 40: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

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.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 41: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

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>

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 42: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Vårt första Python-program

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 43: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Vad gör programmet?

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

1. Skriv ut liteinformativ text

2. Läs in en rad frånanvändaren, försöktolka vad som matadesin och spara detta ivariabeln x

3. Börja gissa attroten ur x är x/2 ochspara gissningen ivariabeln guess

4. Upprepa deföljande raderna5 gånger

5. Räkna uten ny bättregissning ochskriv ut den

Newton-Raphsons metod för atträkna ut kvadratroten av ett tal x.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 44: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

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

Newton-Raphsons metod för atträkna ut kvadratroten av ett tal x.

Underordnaderader måste skjutasin en bit på raden,indenteras.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 45: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Olika sätt att köra vårt programzaza4 <23>zaza4 <23> python3 newton.pyzaza4 <23> python3 newton.py

This program tries to find the square root of a number.

Enter a number:

zaza4 <23> python3 newton.py

This program tries to find the square root of a number.

Enter a number: 2

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>

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

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.

>>>

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 46: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

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

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 47: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Hur man använder Python-interpretatorn>>>>>> from newton import *>>> from newton import *

This program tries to find the square root of a number.

Enter a number:

>>> from newton import *

This program tries to find the square root of a number.

Enter a number: 3

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

>>>

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

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

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

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

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 48: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Två viktiga byggstenar

print("Hello")

x = x + 3

a + b/2

square(y + 7)

Satser gör något.

Uttryck har ett värde.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 49: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Imperativ och funktionell programmering• Imperativ programmering

– Ett program är en följd av satser som manipulerar globaladatastrukturer så att deras tillstånd förändras över tid.

• Funktionell programmering

– Ett program är en uppsättning funktioner vars utdata enbart berorav indata, d.v.s. de har inga sidoeffekter och manipulerar integlobala datastrukturer.

• Objektorienterad programmering

– Ett program är en uppsättning objekt som har vissa egenskaper ochkan utföra vissa metoder. Programkörning innebär attmeddelanden skickas mellan dessa objekt.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 50: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Uttryck – det enda som är värt något

2016-08-29Fredrik Heintz, Fö1 #TDDD73

• Uttryck (eng. expressions) är delar av satser som kan beräknas till ettvä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.

Page 51: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Satser – ryggraden i ett program

2016-08-29Fredrik Heintz, Fö1 #TDDD73

• Ett Python-program består av ett antal satser (eng. statements) somutfö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

Page 52: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Olika typer av satser: Tilldelning

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

Hur ser det ut? namn = uttryckVad händer? Uttrycket beräknas och resultatet sparas i den namngivna variabeln.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 53: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Olika typer av satser: Funktionsanrop

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

Hur ser det ut? funktionsnamn(frivilliga argument)Vad händer? Argumenten skickas till funktionen, underprogrammet, för behandling.

Funktionsanrop som inte är självständiga satser

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 54: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Olika typer av satser: Iteration med for

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

Hur ser det ut? for namn in område: undersatserVad händer? Undersatserna körs så många gånger som området specificerar.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 55: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Olika typer av satser: Funktionsdefinitioner

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

Hur ser det ut? def funktionsamn(frivilliga argument): undersatserVad händer? Undersatserna sparas för att kunna anropas senare.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 56: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Olika typer av satser: Selektion

if a > 0:

print(“positivt")

Enkelt val

if a > 0:

print(“positivt")

else:

print(“negativt")

Två alternativ

if 0 <= a < 10:

print("ental")

elif a < 0:

print("negativt")

else:

print("tio eller mer")

Tre eller fler alternativ

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 57: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Ordning och reda på programkodenProgramkod organiseras i moduler, och om man inte gör något specielltkommer 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 attanropa direkt. Detta är bra för våra små program, men blir rörigt närvi kommer lite längre fram.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 58: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

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. Allahar sin första laboration imorgon.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 59: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

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 attni 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 atttesta er fram. Prövar gärna olika lösningar på medhavd dator.

– Diskussion och analys (U) – För er som vill diskutera och analyserautifrån det ni redan kan och det ni kommer att lära er. Ni är interä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.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Page 60: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Mål med föreläsningen

2016-08-29Fredrik Heintz, Fö1 #TDDD73

• 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äggandeterminologin.

• Du ska vara medveten om att det krävs mycket arbete för att bli braprogrammerare!

Page 61: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Glöm aldrig!

Page 62: KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73 2016-08-29 • Du ska bli grymt inspirerad att lära dig programmera! • Du ska

Imperativ och FunktionellProgrammering i Python#TDDD73Fredrik Heintz, [email protected]@FredrikHeintz