| Handledarvänlighet (Om något saknas: ingen redovisning) | |
|---|---|
Färsk utskrift |
|
Godkänd
spec (eller G/S i labblistan) |
|
Granskningsprotokoll
och granskaren |
|
Granskare:_________________________________
Studiestatus ________ |
|
| Användarvänlighet | |
Informativa utskrifter |
Enkel inmatning |
| Programmerarvänlighet | |
Vettiga namn |
Kommentarer |
Konsekvent språk |
Konsekvent typografi |
Felhantering |
|
| Strukturering | |
Lämplig uppdelning
i klasser |
Lämplig uppdelning
av metoder och funktioner |
Temporära variabler
så lokalt som möjligt |
Återanvändbara
funktioner/metoder/klasser |
In- och utdata till
metoder och funktioner |
Flexibelt/utbyggbart
program |
Ingen kodupprepning |
Ingen hårdkodning |
| Följande punkter är nödvändiga (måste alltid åtgärdas) | |
Uppfyller kraven i lydelsen |
Detaljförståelse |
Kan fylla i kursenkäten
på webbsidan |
|
På unix kan man få lite snyggare utskrifter med programmet a2ps (kan kräva module add a2ps).
Granskningen kan underkännas om man inte ens försökt hitta fel i ett program med uppenbara fel.
Ge tal1 : 26
och tal2 : 54
29 31 37 41 43 47 53
Man ska inte behöva titta i en manual eller ännu värre själva programkoden för at förstå vad som händer. Att köra programmet måste vara självinstruerande.
Hej och välkommen till primtalsprogrammet. Programmet
skriver ut alla primtal i ett intervall du definierar.
Ange lägre gränsen i intervallet: 26
Ange högre gränsen i intervallet: 54
De primtal som finns mellan 26 och 54 är:
29 31 37 41 43 47 53
Det senare exemplet är mycket lättare att förstå när man kör programmet.
...
Vill du boka en biljett?ja
Varifrån åker du? Arlanda
Vart ska du åka? Kastrup
Vilken månad ska du åka? Mars
Vilken dag ska du åka? 25
Vill du boka returbiljett?ja
Vilken månad ska du tillbaka? April
Vilken dag ska du tillbaka? 5
Det går tyvärr inget flyg den 25 mars.
Försök igen
Vill du boka en biljett?ja
Varifrån åker du? Arlanda
Vart ska du åka? Kastrup
Vilken månad ska du åka? Mars
...
Förutom att vara väldigt sen med att kläcka ur sig att det inte finns något flyg den önskade resdagen så verkar det inte finnas något sätt att boka en mängd biljetter. Att boka en klassresa med det systemet skulle vara väldigt enerverande.
Nedanstående programkod är ganska svår att tyda
namn = 0 kalle=0 while kalle < len(pelle): if pelle[kalle] > namn: namn = pelle[kalle] kalle+=kalleHär följer samma kod med andra variabelnamn.
max = 0 i=0 while i < len(vektor): if vektor[i] > max: max = vektor[i] i+=1Man ser nu lättare vad koden gör, koden sparar undan det högsta värdet i vektorn till variablen max. Fortfarande är det inte optimalt bra namn på vektorn. Vad för slags värden innehåller den? Är det löner, skottstatistik eller vad?
Generellt brukar bra namn på funktioner och metoder oftast vara verb som beskriver vad de gör. Klaser och variabler är ofta substantiv som beskriver vad klassen/variabeln är.
Det ska sägas att det är väldigt svårt att komma på bra namn.
In och utdata till metoder och funktioner måste kommenteras. Det gäller både returvärden, parametrar och eventuella instansvariabler metoden använder sig av. Alltså om metoden använder sig av instansvariabler ska detta kommenteras.
class EnBraKlass(object): class EnTillBraKlass(object): def enMetodSomTarTreParametrar(x,y,z): ettHeltal = 12
Ange täljare: 1000
Ange nämnare: 0
Oj oj, nämnare får inte vara noll försök igen.
Ange nämnare: 10
1000 delat med 10 blir 100
def lasFranFil():
filnamn = input("Vad heter filen?")
in=open(filnamn,"r")
list =in.readLines()
vek=[]
for element in list:
if type(element)==type(0):
vek=vek+[element]
return vek
Koden ovan gör flera saker; frågar efter en fil, läser
in allt data från filen, gör om datat till heltal, stoppar in
heltalen i en heltalsvektor och returnerar denna. Det är bättre
att dela upp dessa uppgifter på flera metoder och funktioner så
att anropen blir:
filNamn = fragaFil() fildata = laesFranFil(filnamn) intresseantaTal = konvertera(fildata)Programmet blir mer flexibelt. Metoden frågaFil kan skrivas om till ett grafiskt GUI där man klickar på rätt fil. Metoden laesFranFil kan användas i andra sammanhang då man vill läsa från fil. Man kan skicka fildatat till en ny metod som kontrollerar data innan man anropar konvertera.
def lasFranFil(self,filnamn): self.infil =open(filnamn,"r") self.list = infil.readLines() return self.listNotera att metoden sätter om instansvariabel infil att peka på en ny fil som läser från fil. Övriga metoder och funktioner som använder infil kommer att påverkas. Även om programmet fungerar ändå (ingen annan metod använder infil) kan man få allvarliga problem om man försöker utöka programmet. Även list verkar vara deklarerade som instansvariabler helt i onödan då den returneras.
Specialicerade metoder och funktioner kan man använda i andra sammanhang jämför avsnittet om metoder och funktioner ovan
ANTALSPELARE = 4 PI = 3.14