introduktion till programmeringtddd73/python/fo/2013/fo1301.pdf · 2013-09-01 · pythons historik...

39
TDDC66 Datorsystem och programmering Föreläsning 1 Introduktion till programmering Peter Dalenius Institutionen för datavetenskap 2013-09-02

Upload: others

Post on 11-Mar-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

TDDC66 Datorsystem och programmeringFöreläsning 1

Introduktion till programmering

Peter Dalenius

Institutionen för datavetenskap

2013-09-02

Page 2: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Översikt

• Vad är programmering?

• Kursens målsättning och organisation

• Hur använder man progamspråket Python?

3

Page 3: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Vad är ett program och hur programmerar man?

4

Page 4: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Programmering i ett nötskal

program en uppsättning regler eller instruktioner med uppgift att styra en dators beräkningar (Nationalencyklopedin)

5

komponenternaprogramspråket ochdess konstruktioner

processenprinciper för hur man

utformar program

resultatethur program körs ochhur de påverkar folk

Page 5: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Datorns utveckling – en kort historik

6

1940 1950 1960 1970 1980 1990 2000 2010

Stordatorer för industrin60-, 70-talet

Persondatorerför hem och kontor80-, 90-talet

Internet förvanligt folk90-,00-talet

Tidiga datorer,ofta militära40-, 50-talet

Mobilaenheter10-talet

Page 6: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Hur långt kommer vii den här kursen?

7

Page 7: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

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

8

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.

Page 8: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Hur passar programmering ini mitt framtida jobb?

9

Page 9: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Svensk industri är beroende av mjukvara...

10

Page 10: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Hur lär man sigatt programmera?

11

Page 11: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

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.

12

Peter Norvig (2001) Teach Yourself Programming in Ten Years. http://norvig.com/21-days.html

Page 12: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Varför har vi valtprogramspråket Python?

13

Page 13: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

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 åttonde mest populära programspråket i världen. [1]

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

14

[1] TIOBE Programming Community Index July 2012http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

Page 14: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Fördelar med Python

• Lätt att komma igång med.

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

15

Page 15: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Målsättning

• Datorsystem

• använda IDA:s datorsystem såpass bra att det inte blir så mycket praktiska problem i framtida programmeringskurser

• Programmering

• konstruera enklare program i Python

• förklara hur program fungerar genom att använda korrekt datavetenskaplig terminologi

16

Page 16: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Upplägg

Aktivitet Tid i HT1 Innehåll

Föreläsningar 24 h Introduktion, översikt, sammanfattning (ligger

alltid steget före)

Lektioner 8 h Genomgångar, förberedelser, exempel,

torrövningar

Laborationer 26 h Arbete med övningar och uppgifter, diskussioner,

redovisningar

Eget arbete 60 h Läsa, öva, experiementera, arbeta med övningar

och uppgifter

17

Page 17: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

TDDD73Funktionell och imperativ programmeringi Python

TDDC66 Datorsystem och programmering

Examination

18

Webbaserad datorintroduktionSlutuppgiftProva på-laborationer

Laborationsomgång 1-2

Laborationsomgång 3-7

Datortentamen

UPG1

LAB1

LAB1

DAT1

vecka 35-38

vecka 38-51

Python

Page 18: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Tillåtet och otillåtet samarbete

• Allt arbete med examinerande uppgifter i kursen TDDC66 Datorsystem och programmering ska ske enskilt (förutom i prova på-laborationerna nä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.

19

Page 19: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

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å en del saker kommer enbart att tas upp på föreläsningar.

• Om man skaffar en annan Python-bok, se till att den täcker Python 3!

20

Page 20: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Personal

• Examinator: Peter Dalenius

• Kursadministratör: Anna Grabska Eklund

• Lektions- och laborationsassistenter:

• D1A: Anders Märak Leffler, Hugo Lindholm

• D1B: Peter Larsson Green, Torbjörn Lönnemark

• D1C: Jonas Wallgren, Per Eklund

• U1: Fredrik Heintz, Rickard Andersson

21

Page 21: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Information och kommunikation

• På kurswebben finns all information om kursen man behöver:

http://www.ida.liu.se/~TDDC66

• Laborationsmaterial

• Föreläsningsbilder

• Länk till schema

• Planering och deadlines

• Regler för redovisning och komplettering

• m.m.

22

Page 22: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Hur man startar Python-interpretatorn

23

Page 23: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Hur man använder Python-interpretatorn

24

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

Page 24: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Hur man använder Python-interpretatorn

25

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

Page 25: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Vårt första Python-program

26

Page 26: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Vad gör programmet?

27

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

1. Skriv ut lite informativ text

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

4. Upprepa de följande raderna 5 gånger

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.

Page 27: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Varför så mycket mellanrum?

28

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

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

Underordnaderader måste skjutas in en bit på raden, indenteras.

Page 28: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Olika sätt att köra vårt program

29

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

>>>

Page 29: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Hur man använder Python-interpretatorn

30

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

Page 30: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Hur man använder Python-interpretatorn

31

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

Page 31: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

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

32

Page 32: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Satser – ryggraden i ett program

• Ett Python-program består av ett antal satser (eng. statements)som utförs i tur och ordning. Än så länge har vi i huvudsak stött på följande typer av satser:

• Enkla satser

• Tilldelning (eng. assignment)

• Funktionsanrop

• Sammansatta satser

• Iteration med for

• Funktionsdefinition

33

Page 33: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Olika typer av satser: Tilldelning

34

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

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

Page 34: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Olika typer av satser: Funktionsanrop

35

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

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

Page 35: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Olika typer av satser: Iteration med for

36

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

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

Page 36: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Olika typer av satser: Funktionsdefinitioner

37

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

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

Page 37: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

Olika typer av satser: Selektion

38

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

Page 38: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

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

39

Page 39: Introduktion till programmeringTDDD73/python/fo/2013/fo1301.pdf · 2013-09-01 · Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande

www.liu.se

Bildkällor:http://en.wikipedia.org/wiki/File:Windows_9X_BSOD.pnghttp://mcsp.wartburg.edu/zelle/python/http://en.wikipedia.org/wiki/File:Eniac.jpghttp://en.wikipedia.org/wiki/File:UnivacII.jpghttp://en.wikipedia.org/wiki/File:IBM_PC_5150.jpghttp://en.wikipedia.org/wiki/File:Acer_Aspire_8920_Gemstone_by_Georgy.JPGhttp://en.wikipedia.org/wiki/File:Htc_Touch_Pro2_Georgy.JPGhttp://en.wikipedia.org/wiki/File:Lego_Color_Bricks.jpghttp://commons.wikimedia.org/wiki/File:Lego_at_Work.jpghttp://www.swedsoft.se/