Laboration 2: Funktioner och slingor
- Inlämningsdatum 14 okt 2022 av 18:00
- Poäng 1
- Lämnar in en filuppladdning
- Filtyper pdf, txt, py och jpg
Laboration 2: Funktioner och slingor
Innehåll:
- Kapitel 5 och 4 i kursboken: funktioner, for-slingan, while-slingan
Om labben är klar i tid ger den en bonuspoäng. Bägge gruppmedlemmarna ska lämna in labben.
1. Jämför två funktioner
Programmet nedan har två funktioner. Svara på följande frågor:
- Hur många parametrar har funktionen hypotenusa?
- Hur många returvärden har funktionen hypotenusa?
- Var anropas funktionen hypotenusa?
- Hur många parametrar har funktionen main?
- Hur många returvärden har funktionen main?
- Var anropas funktionen main?
2. Skriv egna funktioner
Välj en annorlunda längdenhet (t ex foot, yard, mile, ljusår) och skriv två funktioner:
- Skriv en funktion som skriver ut information om längdenheten (dvs hur man konverterar från meter till din enhet). Funktionen ska inte ha några parametrar, och inget returvärde.
- Lägg till kod som anropar funktionen, och testa så att det fungerar.
- Skriv en funktion (i samma fil) som omvandlar meter till din längdenhet. Funktionen ska ha en parameter, och ett returvärde.
- Lägg till kod som anropar funktionen, och testa så att det fungerar.
3. Öva på for-slinga
- Skriv in och provkör programmet multiplikation.py:
- Låt användaren välja vilken multiplikationstabell som ska skrivas ut. Ändra for-slingan så att det fungerar för användarens val.
- Flytta koden för att skriva ut multiplikationstabellen till en egen funktion. Lägg till ett anrop av funktionen i main.
4. Öva på while-slinga
- Skriv in programmet ovan och provkör.
- Ändra programmet så att det slumpar fram två tal och skriver ut dom.
- Låt användaren svara vad produkten blir.
- Lägg till en while-slinga som upprepar frågan tills användaren svarat rätt.
- Lägg till en variabel antal som räknas upp med 1 i varje varv i slingan. Den håller reda på hur många försök användaren har gjort. Skriv ut antalet försök när användaren äntligen svarat rätt.
Tips: Du behöver inte använda en 'break' sats eller liknande i uppgift eftersom 'input'-satsen fryser programmet i väntan på användaren. Villkoret för att kunna hoppa ut ur slingan kan du skriva längst uppe bredvid while. Slutligen kan du också testa att få hela programmet att köra om efter att användaren har svarat rätt. Det kan du göra på liknande sätt som du gjorde innan, när du lät användaren gissa igen.
5. Använd allt i ett program
Du ska nu skriva ett program som först skriver ut information om din längdenhet, sedan skriver ut en tabell med värden för din längdenhet och till sist låter användaren gissa ett längdvärde. Gör uppgifterna stegvis enligt listan nedan så blir det enklare.
- Informations-delen: Anropa din informationsfunktion för att skriva ut information om din längdenhet.
- Tabelldelen:
- Använd en for-slinga för att skriva ut en tabell över din längdfunktion för 1-10 meter. Det måste inte vara en vacker tabell (se extrauppgifter nedan).
- Nu ska användaren ska få välja hur många värden som ska skrivas ut i tabellen. Ändra for-slingan så att det fungerar för användarens val.
- Samla nu de satser du skrivit för tabelldelen i en funktion. Lägg till ett anrop av funktionen i huvudprogrammet och se till att det fungerar.
- Gissa-delen:
- Slumpa fram ett värde och be användaren att gissa vad det blir i din längdenhet. Skriv ut beröm om användaren svarade rätt. Du får själv avgöra hur nära gissningen ska komma för att det ska räknas som rätt svar.
- Lägg till en while-slinga som upprepar frågan tills användaren svarat rätt.
- Lägg till en räknare som håller reda på hur många gissningar användaren har gjort, och skriver ut antalet när användaren äntligen gissat rätt.
- Samla satserna för gissa-delen i en funktion, Lägg till ett anrop av funktionen i huvudprogrammet och se till att det fungerar.
- Din main-funktion ska ha anrop av informations-funktionen, tabellfunktionen och gissafunktionen. Glöm inte att anropa main.
6. Testning
Testa att ditt program fungerar som det ska. Tips: Ett enkelt sätt att spara testkörningen är att köra programmet och kopiera allt som syns på skärmen. Klistra in sist i ditt program, markera och välj Format-> Comment Out Region så blir stycket en kommentar.
7. Lämna in i Canvas
Det är det sista programmet (det testade programmet från punkt 6 ovan) som ska lämnas in.
Krav
- Kraven från första labben måste vara uppfyllda:
- Programmet ska ha en kommentar överst med författarnas namn och datum.
- Variabelnamnen ska göra programmet lättare att förstå.
- Testdata ska finnas med i kommentar sist i programmet.
- Varje funktion ska ha en förklarande kommentar.
- Anropen ska vara anpassade till om funktionen har returvärde eller inte.
- Programmet ska innehålla (minst) en korrekt for-slinga.
- Programmet ska innehålla (minst) en korrekt while-slinga.
Peer review
När det är 20 min kvar av labbtiden ska du lämna in ditt program i Canvas. Det behöver inte vara klart! Nu är det dags för Peer review. Du kommer att få granska någon annans uppgift med avseende på fyra kriterier. Kontrollera om kriterierna är uppfyllda. Du kan också ge konstruktiv feedback och skriva uppmuntrande kommentarer.
Efter labben
Hur tycker du att ditt eget arbete med labben fungerade? Borde du ha gjort något annorlunda? Fundera en stund, och skriv upp några tips till dig själv inför nästa labb!
Frivilliga extrauppgifter
- Snygga till tabellen så att den får jämna kolumner.
- Skriv en meny där man kan välja att få se tabellen eller gissa längden.
Svårare uppgifter
- Skriv en funktion som, givet en sträng med ett antal tecken, beräknar antalet permutationer.
- Skriv sedan en funktion som skriver ut alla permutationerna.
Matris
Kriterier | Bedömningar |
---|---|
Förklarande kommentarer till funktionerna
Gör kommentarerna att det blir lätt att förstå vad funktionerna gör?
|
|
Anpassade funktionsanrop
En funktion som returnerar ett värde ska anropas så att returvärdet används, t ex i en tilldelningssats
(svar = fråga()) Anropas funktionerna på ett korrekt sätt? |
|
for-slinga
Finns det en korrekt for-slinga i programmet?
|
|
while-slinga
Finns det en korrekt while-slinga i programmet?
|