729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2,...

68
729G04 Programmering och diskret matematik Föreläsning 4

Transcript of 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2,...

Page 1: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

729G04 Programmering ochdiskret matematikFöreläsning 4

Page 2: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Turtle Graphics

Page 3: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

LOGO⁃ LOGO:programmeringsspråkföranvändninginomundervisning1967avPapertochFeurzeig

⁃ SpråketärsläktmedLISP,mensom"utenhet"hademanbl.a.möjlighetattstyraensköldpadda.

⁃ Sköldpaddanhadeävenen"penna"somdenkundehöjaochsänka.

Page 4: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

The robot

Page 5: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Trådlös variant

Page 6: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Modern variant

Valiant Technology Ltd.

Page 7: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Turtle Graphics⁃ AttritamedhjälpavensköldpaddasommanstyrmedhjälpavkommandonbrukarmankallaförTurtleGraphics.

⁃ Mansersköldpaddanuppifrånochkangedenkommandon

⁃ PythonharenmodulsomlåterosshållapåmedTurtleGraphics.

Page 8: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Kommandon man kan ge till sköldpaddan⁃ Gå frammåt

⁃ Backa⁃ Sväng vänster⁃ Sväng höger⁃ Dra upp pennan

⁃ Sätt ner pennan

Page 9: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

http://el.media.mit.edu/logo-foundation/logo/turtle.html

Page 10: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Pythons turtle-modul

Page 11: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Förflyttning av sköldpaddan⁃ fd(avstånd):flyttasköldpaddanframmåtettvisstavstånd

⁃ bk(avstånd):flyttasköldpaddanbakåtettvisstavstånd⁃ lt(grader):svängvänsterettvisstantalgrader⁃ rt(grader):svänghögerettvisstantalgrader

Page 12: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

En fyrkantimport turtle

screen = turtle.Screen()screen.setup(width=600, height=600)turtle.mode("logo")turtle.showturtle()

turtle.fd(100)turtle.rt(90)turtle.fd(100)turtle.rt(90)turtle.fd(100)turtle.rt(90)turtle.fd(100)

importera modulen

skapa en ritytasätt storleken på ritytananvänd LOGO-standard för riktningvisa sköldpaddan

gå framåt 100 stegsväng höger 90 gradergå framåt 100 stegsväng höger 90 gradergå framåt 100 stegsväng höger 90 gradergå framåt 100 steg

Page 13: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

En fyrkant

framåt

Page 14: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

En fyrkant

vänster

Page 15: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

En fyrkant

framåt

Page 16: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

En fyrkant

vänster

Page 17: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

En fyrkant

framåt

Page 18: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

En fyrkant

vänster

Page 19: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

En fyrkant

framåt

Page 20: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

En fyrkant

Page 21: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Demo av pennan, förflyttning, position och riktning

Page 22: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Olika sätt att importera modulerimport turtle

screen = turtle.Screen()turtle.showturtle()

turtle.fd(100)turtle.rt(90)turtle.fd(100)turtle.rt(90)turtle.fd(100)turtle.rt(90)turtle.fd(100)

from turtle import *

screen = Screen()showturtle()

fd(100)rt(90)fd(100)rt(90)fd(100)rt(90)fd(100)

Page 23: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Kan vi stoppa in detta i en loop?

Page 24: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Kan vi få sköldpaddan att röra sig slumpmässigt?

Page 25: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Sköldpaddan ritar på ritytan med en penna⁃ Sköldpaddan har enpenna som kan höjas och sänkas.

⁃ Denär nere från början.

⁃ pd():sätt ner pennan

⁃ pu():dra upp pennan

Page 26: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Koordinatsystem och riktning

Page 27: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

(0, 0)

(-, +) (+, +)

(+, -)(-, -)

Page 28: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Sköldpaddan och koordinater⁃ pos() returnerar entupel (x, y) där x och y är flyttal

⁃ setpos(x, y) flyttar sköldpaddan tillpositionen(x, y) där x och y är flyttal.

⁃ OBS! setpos() "teleporterar"inte sköldpaddan,dvs attompennan är nere kommer det att bli ett streck.

Page 29: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Ja, tupler finns i Python också...⁃ Lista:[1, 2, 3]⁃ Tupel:(1, 2, 3)⁃ Denstora skillnaden mellan listor och tupler i Pythonäratt maninte kan ändra på entupel.

⁃ Datatyper sommaninte kan ändra värdet på kallas"immutable"

⁃ Datatyper mankan ändra värde på kallas "mutable"

Page 30: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Tupel-exempel

Page 31: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Går inte att ändra på en tupel

>>> a = [1, 2, 3]>>> b = (1, 2, 3)>>> a[0] = 4>>> b[0] = 4Traceback (most recent call last):

File "<stdin>", line 1, in <module>TypeError: 'tuple' object does not support item assignment>>>

Page 32: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Riktning

Page 33: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Riktning i världen

90°0°

90°

mode("standard") mode("logo")

Page 34: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Sköldpaddan vet vilken riktning den tittar åt⁃ mode("logo")

⁃ 0˚är norrut⁃ 90˚graderär österut⁃ gradantalet ökar medurs

⁃ heading() returnerar ett flyttal som berättar gradantalethosdenriktning manstår åt

⁃ seth(d) där d är ett flyttal,ställer insköldpaddansriktning

Page 35: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Cirkelrörelse

Page 36: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Exempel på anrop till circle()

circle(40) circle(-40) circle(40, 90) circle(40, 180, 4)

Page 37: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Cirkelrörelse⁃ circle() kan taett tilltre argument

⁃ circle(40) flyttar sköldpaddan moturs i encirkel medradien 40

⁃ circle(-40) ger enrörelse i medurs riktning

⁃ circle(40, 90) avbryter rörelsen efter 90grader

⁃ circle(40, 90, 2) säger att sköldpaddan kommerdela upp rörelsen i två raksträckor.

Page 38: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Refaktoriseringatt skriva omkod för att göra denbättre utan att ändra pådess beteende

Page 39: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Exempel och refaktorisering⁃ Någraexempelpåvadmankangöramedturtle-modulensamtgenomgångavrefaktoriseringgenomgeneraliseringochinkapsling

⁃ Inkapsling:Attkapslainensekvensavuttryckochsatserienfunktion

⁃ Generalisering:Attgöraenfunktionmergenerellgenomattspecificerabeteendenmedhjälpavparametrar/argument

Page 40: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Refaktorisering (refactoring)⁃ Förbättringavkoddockmedbibehållenfunktionalitet.

⁃ Förbättringenkanavseunderhåll

lättlästhet

⁃ Inteattförväxlamedoptimeringsomharmedförbättringavprestandaattgöra.Bådakandockinträffasamtigt.Optimeringkommerpånästaföreläsning.

Page 41: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Exempel på refaktoriseringdef get_number_of_children(name):

if name == "Ada":return 1

elif name == "Bean":return 3

elif name == "Cecil":return 1

elif name == "Dan":return 2

elif name == "Eliza":return 2

elif name == "Frodo":return 0

elif name == "Garfield":return 0

def get_number_of_children(name):if name in ["Frodo", "Garfield"]:

return 0elif name in ["Ada", "Cecil"]:

return 1elif name in ["Dan", "Eliza"]:

return 2elif name in ["Bean"]:

return 3

Page 42: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

När ska man refaktorisera?⁃ När koden luktar illa - exempel på dålig lukt:

redundantkod,t.ex.kod som upprepas eller kod som inte görnågot

långa funktioner

väldigtmånga parametrar skickas tillenfunktion

enfunktion som gör för lite

variabelnamn eller funktionsnamnsom harmissvisande namn

komplexavilkor i koden

Page 43: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Olika sätt att refaktorisera⁃ Hitta loopar⁃ Kapsla in(bryt ut tillfunktioner)⁃ Generalisera (gör koden mer generell,ofta funktioner)

Page 44: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Bryta ut en funktion / inkapslingprint "Hi Ben!"print "I am happy!"

# Inkapsling: Att kapsla in en sekvens av # uttryck och satser i en funktion.

def greet_ben():print "Hi Ben!"print "I am happy!"

Page 45: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Varför är detta bra? Återanvändning!

def greet_ben():print "Hi Ben!"print "I am happy!"

greet_ben()greet_ben()

Page 46: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Generalisering av funktion⁃ Att gå från enfunktion som utför enspecifik uppgift,tillenfunktion som är mer flexibel medavseende på beteendegenom att införa parametrar

Page 47: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Generaliseringdef greet_ben():

print "Hi Ben!"print "I am happy!"

# Vi gör funktionen mer generell så# att den kan hälsa på vilket namn som helst

def greet(name):print("Hi " + name + "!")print("I am happy!")

Page 48: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Sick sack

⁃ Vivill producera ovanstående mönster.

⁃ Kom ihåg:programmering är eniterativ aktivitet!Vigör ett stegi taget.

Page 49: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Vi provar att refaktoriserahttps://www.ida.liu.se/codela/as/729g04d/sicksack

Page 50: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Sick sackfrom turtle import *

screen = Screen()mode("logo")

fd(100)rt(90)fd(10)rt(90)fd(100)lt(90)fd(10)lt(90)

fd(100)rt(90)fd(10)rt(90)fd(100)lt(90)fd(10)lt(90)

fd(100)rt(90)fd(10)rt(90)fd(100)lt(90)fd(10)lt(90)

Page 51: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Sick sack – vi ser en loopfrom turtle import *

screen = Screen()mode("logo")

fd(100)rt(90)fd(10)rt(90)fd(100)lt(90)fd(10)lt(90)

fd(100)rt(90)fd(10)rt(90)fd(100)lt(90)fd(10)lt(90)

fd(100)rt(90)fd(10)rt(90)fd(100)lt(90)fd(10)lt(90)

for i in range(3):fd(100)rt(90)fd(10)rt(90)fd(100)lt(90)fd(10)lt(90)

Page 52: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Sick sack – inkapslingfor i in range(3):

fd(100)rt(90)fd(10)rt(90)fd(100)lt(90)fd(10)lt(90)

# Vi hittar delar av koden vi kan göra om # till funktioner

def make_right_l():fd(100)rt(90)fd(10)rt(90)

def make_left_l():fd(100)lt(90)fd(10)lt(90)

for i in range(3):make_right_l()make_left_l()

Page 53: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Sick sack – inkapsling och generaliseringdef make_right_l():

fd(100)rt(90)fd(10)rt(90)

def make_left_l():fd(100)lt(90)fd(10)lt(90)

for i in range(3):make_right_l()make_left_l()

# Vi kapslar in loopen och generaliserar# den på samma gång

def make_right_l():fd(100)rt(90)fd(10)rt(90)

def make_left_l():fd(100)lt(90)fd(10)lt(90)

def zig_zag(n):for i in range(n):

make_right_l()make_left_l()

zig_zag(3)

Page 54: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Sick sack – inkapsling och generalisering# Vi kapslar in loopen och generaliserar# den på samma gång

def make_right_l():fd(100)rt(90)fd(10)rt(90)

def make_left_l():fd(100)lt(90)fd(10)lt(90)

def zig_zag(n):for i in range(n):

make_right_l()make_left_l()

zig_zag(3)

# Vi skapar en funktion som ritar ut tv� segment med en b�j

def two_segments(angle, segment1, segment2):fd(segment1)rt(angle)fd(segment2)rt(angle)

def make_right_l():two_segments(90, 100, 10)

def make_left_l():two_segments(-90, 100, 10)

def zig_zag(n):for i in range(n):

make_right_l()make_left_l()

zig_zag(3)

Page 55: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Uppgift: Stjärnan

⁃ Vivillritaensånhärfigur⁃ Hur?Delauppproblemet,hittamönster,görsammasakfleragånger?

Page 56: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Rita en stjärna

def draw_line_and_return():"""Rita ett streck p� 50 enheter och �terv�nd till

startpositionen."""fd(50)bk(50)

def draw_star():"""Rita ut en stj�rna med fem armar"""for line in range(5):

draw_line_and_return()rt(360.0/5)

draw_star()

Page 57: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Debugga med spårutskrifter

Page 58: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Att hitta vad som går fel⁃ skrivutvärdenpåvariablerpålämpligtställeikoden

⁃ print("x:",x)

Page 59: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Med spårutskrifter

def draw_line_and_return(length):"""Rita ett streck och �terv�nd till startpositionen."""# Spr�rutskriftprint("Drawing line, length:", length)fd(length)bk(length)

def draw_star(points, length):"""Rita ut en stj�rna med fem armar"""for line in range(points):

# Skriv ut vilket streck vi ligger p� print("line:", line)draw_line_and_return(length)rt(360.0/points)

Page 60: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Visualisering av nästlad loop

Page 61: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Stjärna med stjärnor

Page 62: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Stjärna med stjärnor

Page 63: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Labb 4⁃ Tillämpningavfunktioner,looparochsköldpaddor

⁃ Labb4-8görsipar⁃ Anmälertillnyapargrupperhttps://www.ida.liu.se/webreg/729G04-2014/PARLABB

Page 64: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Angry Turtles

Page 65: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Angry Turtles⁃ Fåglarharstulitsköldpaddornasäggochsköldpaddornahämnasgenomattskjutaivägsigsjälvapåenmåltavla.

⁃ Användarengerstyrkaochvinkel⁃ Speletritaruthursköldpaddanflygerivägochkollaromsköldpaddanträffarmålet.

Page 66: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Exempel

Page 67: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Angry Turtles - innan spelet kan börja⁃ Innanvispeletkanbörjamåstevigöraföljande

Ställainritytan

Bestämmavarmåltavlanskavara

Ritautmåltavlan

Placerasköldpaddanistartposition

Page 68: 729G04 Programmering och diskret matematik729G04/lectures/python4-ht2015.pdf · ⁃ Lista: [1, 2, 3] ⁃ Tupel : (1, 2, 3) ⁃ Den storaskillnadenmellan listorochtupler iPython är

Angry Turtles - själva spelet⁃ Spelarenbörjarmedt.ex.1000poäng⁃ Spelloop

Frågaanvändarenparametrar:styrkaochevvinkel- användinput()Förflyttasköldpaddanliteitaget(loop)⁃ förflyttningenbaseraspåangivenstyrka(ochevvinkel)⁃ avbrytloopen(break)närsköldpaddannuddatmarken(ellerärundermarken),dvskollaomy<=0.

Kollaavståndettillmåltavlan⁃ Omsköldpaddanärtillräckligt näramåltavlan- berättadet,visapoängochfrågaomspelarenvillspelaigen.

⁃ Omsköldpaddan varförlångtifrånmåltavlan- berättadetochdraifrånpoäng