# Bruk skj?nn i fordeling p? aspekt, evt p? tvers av deloppgaver # Begrenset trekk for misforst?else av oppgaver ved ellers god kode #3a) #7p #1p: se behov for if-setninger (PRO) #3p: riktig logikk (PRO) #1p: riktige returns (PRE) #2p: helt korrekt (PRE) def jages(dyreliste): if "katt" in dyreliste and "hund" in dyreliste: return True if "mus" in dyreliste and "katt" in dyreliste: return True return False assert jages(['mus','katt']) assert not jages(['mus','mus','hund']) #3b) #8p #3p: g?r riktig gjennom alle mappinger i jaging (PRO) #3p: finner ut om b?de key og value fra en mapping er i dyreliste (PRO) #2p: helt riktig (PRE) def utvidet_jages(dyreliste, jaging): for k in jaging.keys(): if k in dyreliste and jaging[k] in dyreliste: return True return False assert utvidet_jages(['ulv','mus','sau'], {'ulv':'sau'}) assert not utvidet_jages(['ulv','mus','hund'], {'ulv':'sau', 'katt':'mus'}) #3c) #8p #1p: itererer gjennom dyreliste (PRO) #2p: f?r til telling av dyr (PRO) #2p: finner dyret det er mest av (PRO) #1p: h?ndterer uavgjort riktig (PRE) #2p: helt riktig (PRE) def flertall(dyreliste): dyrebok = {} for dyr in dyreliste: if dyr in dyrebok.keys(): dyrebok[dyr] += 1 else: dyrebok[dyr] = 1 maks = -1 beste_dyr = "" for dyr in dyrebok: antall = dyrebok[dyr] if antall > maks: maks = antall beste_dyr = dyr elif antall == maks: beste_dyr = "uavgjort" return beste_dyr def flertall2(dyreliste): maks = 0 beste_dyr = 'uavgjort' for dyr in set(dyreliste): telling = dyreliste.count(dyr) if telling > maks: maks = telling beste_dyr = dyr elif telling == maks: beste_dyr = 'uavgjort' return beste_dyr assert flertall2(['ulv','sau','ulv']) == 'ulv' assert flertall2(['ulv','sau','sau','ulv']) == 'uavgjort' #5a) #5p #1p: g?r riktig gjennom alle tall i n?stet liste (PRE) #1p: holder oversikt over tall som er m?tt (PRO) #2p: bygger liste over tall som er felles (PRO) #1p: helt riktig (PRE) def felles(tall_lister): noterte = [] felles = [] for liste in tall_lister: for tall in liste: if tall in noterte: if tall not in felles: felles.append(tall) else: noterte.append(tall) return felles assert felles([ [1,10], [6,8], [2,3] ]) == [] assert set(felles([ [1,10], [5,6,10], [2,3,6] ])) == set([6,10]) #5b) #5p #2p: traverserer riktig gjennom n?stet liste for ? hente ut alle kombinasjoner av to indrelister (PRE) - 0p for dette aspektet dersom man kun traverserer som i 5a - "for indre in n?stet, for tall in indre" #2p: gitt to lister, finner ut om hvert tall i ¨Śn liste er st?rre enn alle i andre (PRO) - uavhengig av hvordan - min/max eller iterere all kombinasjoner #1p: helt riktig (PRE) def adskilt(tall_lister): for liste1 in tall_lister: for liste2 in tall_lister: liste1_alle_storre = True for tall1 in liste1: for tall2 in liste2: if not tall1 > tall2: liste1_alle_storre = False if liste1_alle_storre: return True return False def adskilt_v2(tall_lister): for liste1 in tall_lister: for liste2 in tall_lister: if min(liste1) > max(liste2): return True return False assert adskilt([ [1,10], [6,8], [2,3] ]) assert not adskilt([ [1,10], [6,8], [2,3,7] ]) print("ferdig")