Forenkel med funktioner og objekter

Python programmet tegner skibet igen, men denne gang er anvendt funktioner til at gøre programmet lettere at læse men også at rette og udvide.


import turtle

# Funktion til at flytte skildpadden
def saet_skildpadde(x, y, tyk, farve="black"):
    skildpadde.up()
    skildpadde.setpos(x, y)
    skildpadde.pensize(tyk)
    skildpadde.color(farve)
    skildpadde.down()

# Funktion til at tegne rektangel
def tegn_rekt(bredde, laengde):
    for i in range(0,2):
        skildpadde.right(90)
        skildpadde.forward(bredde)
        skildpadde.right(90)
        skildpadde.forward(laengde)

turtle.setup(width=450,height=300)
skildpadde = turtle.Turtle()

# Tegn vand
saet_skildpadde(-225, -100, 12, "blue")
skildpadde.forward(450)

# Tegn skib - flyt skildpadde foerst
saet_skildpadde(-100, -100, 4)

# Tegn skrog
skildpadde.left(90)
skildpadde.forward(30)
skildpadde.right(90)
skildpadde.forward(250)
skildpadde.right(90+45)
skildpadde.forward(45)
skildpadde.right(45)
skildpadde.forward(225)

saet_skildpadde(10, -70, 4)
# Tegn mast
tegn_rekt(200, 8)
saet_skildpadde(10, -50, 4)

# tegn bom
skildpadde.right(180)
tegn_rekt(8, 90)
saet_skildpadde(10, 130, 1)

skildpadde.left(62)
skildpadde.forward(200)

turtle.exitonclick()

Det oprindelige program havde fire linjer, som gentog sig ofte, når skildpadden skal tage pennen op, flytte og tage pennen ned. Det er i dette program lavet i en funktion i stedet for med navmet saet_skildpadde, som tager fire argumenter: x, y, tyk og farve. Det betyder at skildpadden bliver flyttet med et kald til funktionen, som også ændre tykkelsen og faven på pennen.

Masten består at to rektangler, hvorfor der også er tegnet en funktion til at tegne rektangler. Funktionen har to argumenter- nemlig bredde og længde.

Det nye Python program fylder 14 linjer mindre end det oprindelige samtidigt med at det blevet meget lettere at læse.

Kort om objekter

Funktionen er låst til at vi har kaldt turtle for skildpadde, da det indgår i funktionens Python kode. Det kan gøres mere smartere, men det kræver at kendskab til såkaldte objekter i Python. Rent faktisk er alting i Python objekter, hvorfor det er beskrevet meget kort her.

På de første sider var beskrevet, hvordan Python ændrer på programmets data, mens data ændrer på, hvordan Python koden fungerer. Det ændrer objekter ikke på men det giver mulighed for at samle data og kode i objekter.

Det kan samles i objekter og der er tre vigtige udtryk: klasser, instans og metode.

  • turtle er en klasse. En klasse er definition i Python kode af objektets data og metoder.
  • skildpadde er en instans af turtle. Instansen bliver oprettet med skildpadde = turtle.Turtle(). Et python program kan have mange instanser af den samme klasse. Her er instansen kaldet skildpadde, men Python programmet kunne have haft mange flere instanser med andre navne.
  • Objekter har metoder, som er brugt til at bruge objektet (eller instansen). Det er gennem metoder, at instansen data bliver ændret eller skilpadden flytter sig. turtle-klassen har en del metoder, som du har set. Det er forward, right, left osv. Metoderne er defineret som funktioner med def.

Senere vil du se, hvordan du kan lave dine egne objekter men også udvide eksisterende.

Du har lært

  • Funktioner gør programmer mere overskuelige og derved lettere at rette
  • Python arbejder med objekter. Objekter er en samling af data og metoder (i Python)
  • Skabelonen for et objekt hedder en klasse, og et objekt eller dens instans bliver oprettet, når det skal bruges . Objektets data bliver tilgået med metoder.