Göm menyn

Seminarium 3 - Experimentering

Kapitel som ska ha lästs:

Uppgift: Metoder

Skriv funktioner som med hjälp av pythons sträng-metoder manipulerar indata på valfritt sätt.

Exempel

Uppgift: Game of Life

Game of Life's regler är som följande:

  • En levande cell med 0-1 levande grannar dör av ensamhet
  • En levande cell med 4-8 levande grannar dör av trängsel
  • En död cell med 3 levande grannar återföds
  • Alla övriga celler är oförändrade.

Denna formulering är ej optimal för kodning. Förbättra formuleringen så att samma regler gäller men med dessa saker i åtanke:

  • Du bör inte behöva kolla cellens tillstånd om du inte måste
  • När du hittat ett visst antal grannar kan du kunna sluta räkna
  • Minimera antalet regler
  • Reglerna ska vara atomära (ej delbara) på samma sätt som reglerna ovan
  • Reglerna ska tillsammans vara fullständiga, alla fall ska täckas

Uppgift: Tvådimensionella listor

func1
  1. Vad gör funktionen och vad returnerar den? Vilken datatyp har returvärdet?
  2. Föreslå ett namn på funktionen
  3. Vad är bra variabelnamn för en en- resp.tvådimensionell lista?
  4. Varför itererar funktionen först över height? Hur kommer resultatet lagras?
  5. Rita upp en rutnätsrepresentation av returvärdet där varje element är numrerat efter ordningen de skapas. Sätt width och height till 5.
func2
  1. Vad gör funktionen och vad returnerar den? Vilken datatyp har returvärdet?
  2. Föreslå ett namn på funktionen.
func3
  1. Vad gör funktionen och vad returnerar den? Vilken datatyp har returvärdet? Tips: för att förstå vad funktionen gör, upprepa uppgift 5 för denna funktion.
  2. Föreslå ett namn på funktionen.
  3. Kan funktionen köras på en lista med strängar? Varför/varför inte?

Extrauppgifter: 2D-listor

Extrauppgift 1

Skriv en variant av func3 som modifierar den existerande listan istället för att skapa en ny, det vill säga att den ska vara desktruktiv version. För enkelhetens skull kan du anta att len(grid) == len(grid[0]).

Extrauppgift 2

Baserat på deluppgift 5 för func1, föreslå ett sätt att iterera över en existerande två-dimensionell lista med en for-loop och numrera den på samma sätt som i deluppgift 5 (dvs elementen ska besökas i samma ordning som func1 skapar dem). Funktionen ska vara destruktiv.

Uppgift: Grannar

Skriv en funktion neighbours(seq, x, y) där seq är en 2-dimensionell lista och x, y är index för ett element. Funktionen ska kalla på check(seq, i, j) för varje element som är granne till (x. y). (dvs i <= |x+-1|, j <= |y+-1|). Du kan anta att det finns grannar i alla riktningar.


Sidansvarig: Peter Dalenius
Senast uppdaterad: 2016-08-17