Storseminarium 2.1 - Experimentering
Innan seminariet ska du ha gått igenom Inför seminariet nedan och gjort tillhörande quiz. Syftet med detta är att du ska bekanta dig med innehållet så eventuella frågor kan redas ut under seminariet.
Denna sida visar en del av det som kommer att diskuteras på seminariet. Det kan hända att handledarna också tar upp andra uppgifter som inte behöver något specifikt studentmaterial och då syns dessa uppgifter inte på sidan.
Inför seminariet
Under seminariet
Ni kommer att arbeta med uppgifterna tillsammans i mindre grupper, där ni diskuterar och förklarar för varandra, handledarna kommer att finnas till hjälp som under vanligt labbpass. Efter varje uppgift går handledarna igenom sin lösning i helklass, då finns möjlighet att ställa frågor och presentera alternativa lösningar.
Inledande uppgift: Skapa katalog
Det är viktigt att hålla ordning på sina filer, vi utgår ifrån att ni redan har skapat en kurskatalog 729g46
eller liknande. Vi rekommenderar att ni skapar en underkatalog storsem2_1
, där ni skapar en ny fil för varje uppgift, för de uppgifter där det är rimligt.
Pythontutor
Använd pythontutor.com för att stega igenom nedanstående kodexempel:
Summa från 0 till något heltal n
|
|
Summera lista (från föreläsningen)
|
|
Telephone game
Målet är att förstå:
- Hur man identifierar basfallet (när rekursionen ska sluta)
- Hur man definierar det rekursiva fallet (när funktionen ska anropa sig själv)
- Hur data förändras steg för steg i en rekursiv kedja
Telephone game (viskleken) är en lek som går ut på att skicka ett meddelande genom en sekvens av personer som återberättar meddelandet så noggrant som möjligt. Detta resulterar oftast i att meddelandet sakta ändrar mening, det kan handla om att ord byts ut till ett annat ord som låter snarlika, eller att enskilda bokstäver upfattas felaktigt.
Vår uppgift är nu att skriva ett program som använder enkelrekursion för att simulera ett sådant spel. Funktionen telephone_game ska vara enkelrekursiv, och tar emot två parametrar; phone_list, som är en lista över namn på kompisar i den ordningen som meddelandet ska berättas; message, är en sträng som representerar meddelandet som varje kompis har uppfattat från tidigare samtal.
Uppgift: Skriv klart funktionen telephone_game i koden som du kan kopiera från i kurskatalogen /courses/729G46/kursmaterial/storsem/2_1
(kopiera hela katalogen med cp -r
). En zipfil kan också laddas ner här. Du ska använda mutate
för att förändra meddelandet.
Att diskutera
- Uttrycker din lösning en iterativ processlösning eller en rekursiv processlösning? Varför?
- Kan vi konvertera till den andra typen och hur skulle det se ut?
- Hur kan vi modifiera lösningen för att samla delsteg i en lista istället för att bara skriva ut dem?
- Hur fungerar den verkliga situation som motsvarar vår lösning? Är den första personen i listan den som säger det ursprungliga meddelandet, eller är hen den första som hör det ursprungliga meddelandet och vad innebär det för i vilken ordning saker sker i simuleringen? Kan vi ändra vår tolkning och behöver vi i så fall modifiera koden?
- Kan vi modifiera lösningen för att skicka meddelandet i motsatt riktning genom listan av personer utan att ändra typen av lösning? Hur?
Sidansvarig: Johan Falkenjack
Senast uppdaterad: 2024-07-26