Erfarenheter från labben Uppgifterna tidigare Bättre instruktioner än förra veckan Väntetid Smidigare hjälp Olika krav från olika examinatorer Kan alltid kolla med Joachim
God programmeringssed De allra flesta gör detta mycket bra! Välj lämpliga namn på variabler och funktioner Dela upp i små testbara delar Testa varje del noga och systematiskt Många behöver öva mer på detta!
Testning Mitt stiliga program är säkert rätt. FEL Jag kör någon test för att bevisa det. Det finns fel i mitt usla program. Jag testar tills jag hittar det. RÄTT Testning kan påvisa fel i program Testning kan inte påvisa frånvaron av fel.
Programmeringscykeln: Förstå uppgiften Förstå redskap Planera strukturen Fundera Definiera in/utdata Iterativt på varje del Koda Testa Tänk ut testfall Kör tester Värdera resultaten
Programmeringscykeln: Förstå uppgiften Förstå redskap Planera strukturen Iterativt på varje del Fundera Koda Testa Definiera in/utdata Tänk ut testfall Gör detta innan du börjar koda! Kör tester Värdera resultaten
Testsvit Rimligt stor mängd av testfall Försök hitta alla konstiga fall Täck alla delar av koden Förutsägbart resultat: ha en hypotes Dokumentera alltid I riktig programmering görs ofta testsviter innan kodning, som del i planeringen
Denna vecka och nästa Datorns uppbyggnad och assembler Webföreläsningar Se labinstruktion
Denna vecka och nästa: Individuell Pythonprogrammering Tillfällig paus i speeddatingen (lugn, den återkommer i javadelen) 2-timmarspass i halvklass
När? Det beror på om du går i A eller B. Kolla schemat noga! Var? Det beror på vilken bokstav ditt efternamn börjar på. Se labinstruktion. Kan du byta? Ja, om du byter med någon så att gruppantalen inte ändras
Individuella labbar denna vecka Pythonuppgifter. Inget nytt material. Krav för godkänt: Var där och jobba effektivt. Var beredd att redovisa repetitionsfrågor. Du får själv välja vilka uppgifter du ska jobba med. Alla hjälpmedel och samarbete tillåtet Ingen möjlig inteckning för högre betyg Tips: Använd detta som förberedelse till individuella provet.
Individuellt prov 9/10 Fredag 9 oktober kl 1015-1230 resp 1245-1500 (OBS) Sker i labsal i halvklass: kolla schemat noga! Programmeringen slutar 15 minuter innan sluttiden. Därefter vidtar examination. Uppgifterna avslöjas inte innan provet Sitt stilla och tyst under hela tiden, tills alla i rummet är examinerade
Individuellt prov 9/10 Uppgifterna är av samma typ som den individuella labben Individuell, tyst programmering. Ingen hjälp från lärare. Vi examinerar bara. STStreorna är inte där. Samma hjälpmedel som på labbarna tillåtna (Internet, böcker, anteckningar etc). Egen dator tillåten. Får återanvända egen kod. Får förstås inte prata med någon annan eller skriva av framgooglad kod.
Individuellt prov 9/10 Förbered: Kolla att du kan logga in och öppna words.txt Kodhygien ett krav: lämpliga variabelnamn och koduppdelning. Redovisa testfall. Kommentarer inte ett krav. Inteckningar mot högre betyg: dubbla inteckningar möjliga. Grad bestäms av hur många uppgifter du löser. Nästanlösningar, ofullständiga tester etc kan göra inteckningen enkel.
Problemlösning i Python
Ett problem 4. Som vokaler i engelska språket räknar vi i denna uppgift bokstäverna aeuio, och som konsonanter alla andra bokstäver utom y (y fungerar ibland som konsonant och ibland som vokal och därför struntar vi i den just nu). Skriv ett program som räknar ut hur många engelska ord har precis lika många konsonanter som vokaler. En lista av engelska ord Binns i Bilen words.txt.
Allra först: Övertyga dig om att du begripit problemet genom att formulera några konkreta exempel hi - lika boy - lika hue - olika ally - olika joakim - lika Joakim - stora bokstäver förekommer inte
Lätt eller svårt? När jag ser ett problem funderar jag först om det är så lätt att jag kan lösa det omedelbart, därför att: + Det är så lätt att jag inser lösningen bums, eller + Jag kan snabbt leta upp en funktion i något bibliotek, eller + Jag har löst detta tidigare. I annat fall, dela upp i delproblem: Om jag löser delarna kan jag kombinera ihop en lösning till det urprungliga. Strategi: Önsketänkande!
Ursprungsproblemet Kan jag inte lösa bums. Men det sönderfaller i två delar: 1. Läs in alla orden från filen till en datastruktur som jag kan jobba med 2. Räkna ut hur många ord i den strukturen som har lika många vokaler som konsonanter
Delproblem 1 Har gjort det förut. Kopierar jag kod från någon lab, tex def getwords(): fil = open( words.txt ) text = fil.read() words = text.split() return words
Delproblem 2 Räkna ut hur många ord i en lista som har lika många vokaler som konsonanter Signatur: count_eq_cw(wordlist) -> int funktionsnamn, parametertyp(er), resultattyp Exempel: [ hi, ally, boy ] -> 2 [ joakim, y, hue ] -> 2
Kan jag inte lösa bums. Vilket delproblem skulle kunna hjälpa mig? Önskar: en funktion som avgör, för ett visst ord, om det har lika många vokaler som konsonanter. I så fall är det bara att gå igenom listan och räkna upp en räknare för varje sådant ord.
Delproblem 3 Avgör om ett ord har lika många vokaler som konsonanter has_eq_cw(word) -> boolean hi -> True hue -> False boy -> True
Kan jag inte lösa bums. Vilka delproblem skulle kunna hjälpa mig? Önskar: funktioner som räknar ut antalet vokaler och antalet konsonanter. I så fall behöver jag bara jämföra om antalen är lika.
Delproblem 4,5 Räkna antalet vokaler i ett ord Räkna antalet konsonanter i ett ord count_vowel(word) -> int count_cons(word) -> int
Kan jag inte lösa bums. Vi börjar med vokalerna. Vilket delproblem skulle kunna hjälpa mig? Önskar: en funktion som avgör om ett tecken är en vokal. I så fall behöver jag bara gå igenom ordet och räkna upp en räknare för varje vokal.
is_vowel(letter) -> boolean is_cons(letter) -> boolean
Delproblem 6 Avgör om ett tecken är en vokal En vokal är något av tecknen aeuio. Lätt: använd konstruktionen tecken in aeuio
Delproblem 7 Avgör om ett tecken är en konsonant En konsonant är något som inte är en vokal och inte heller tecknet y. Lätt: använda lösningen till delproblem 6 kombinerat med en jämförelse om tecken är y.
Hurra! Nu finns inga svåra delproblem kvar. Ännu inte rört tangentbordet. Problemuppdelning innan själva programmeringen. Till stor del oberoende av programmeringsspråk. Använd papper och penna.
Syntes Nu är det dags att att börja programmera. Bottom up : börja med de minsta delproblemen. För vart och ett gör en funktion. Varje funktion testas för sig. Strategi: Uppfyll önskningarna!
Gör samma sak! Testa!!
Testa!!
Testa!!
Sammanfattning Allra först: kolla att du förstått. Gör exempel. Börja med en problemuppdelning Gör klart vilka funktioner som behövs. Bestäm parametrar och returvärden. Koda dem bottom up Testa i varje steg