TDT4110 IT Grunnkurs Høst 2017 Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap Python Auditorieøving 2 Vennligst fyll ut følgende informasjon i BLOKKBOKSTAVER Navn: Brukernavn: Studieprogramkode: Godkjent av: Side 1 av 9
1 Teori 1. Hvor mange bit består en IPv6-adresse av? a) 32 b) 64 c) 128 d) 256 2. Hva er 171 dec i det heksadesimale tallsystemet? a) 67 hex b) AB hex c) AA hex d) 9F hex 3. Hvem har det overordnede ansvaret for tildelingen av domenenavn på toppnivå? a) Hver enkelt nasjon b) Internettleverandører c) ICANN d) The American Network Association 4. Hva er hensikten med paritetsbit i digitale signaler? a) Gjøre meldingen raskere å overføre b) Kryptere signaler så overføringen av data blir sikrere c) Bidra til å detekere feil i digitale signaler d) Fortelle hvor meldingen skal sendes 5. Hvorfor kan et WiFi-nettverk påvirke en Bluetooth-forbindelse? a) WiFi-nettverk har så sterkt signal b) Ved samtidig bruk av WiFi og Bluetooth dannes et fenomen som kalles "stående bølger" c) Bluetooth og WiFi bruker samme metode for koding d) Bluetooth og WiFi bruker samme frekvensbånd 6. Hva står forkortelsen VPN for? a) Virtual Protocol Node b) Virtual Privacy Node c) Virtual Private Network d) Volatile Performance Network Deloppgave 1 2 3 4 5 6 Svar Side 2 av 9
2 Kodeforståelse a) Hvilke verdier har a og b når vi har utført setningen: a, b = secret(11,3) Forklar med en setning hva funksjonen i Kodesnutt 1 gjør. Kodesnutt 1 def secret(a, b): r = 0 while a >= b: a = a - b r = r + 1 s = a return r, s a = b = Forklaring: b) Hva blir verdien til answer etter at Kodesnutt 2 er utført? Forklar med en setning hva funksjonen gjør (eller prøver på). Kodesnutt 2 def enigma(mange_ord): nye_ord = [] for ord in mange_ord: if 'bra' == ord: nye_ord.append('bedre') elif 'stor' == ord: nye_ord.append('større') elif 'liten' == ord: nye_ord.append('mindre') else: nye_ord.append(ord+'ere') return nye_ord flere_ord= ['hard','bra','rask','sterk'] answer = enigma(flere_ord) Side 3 av 9
answer = Forklaring: c) Hva blir skrevet ut til skjerm når du kjører koden som vist under? Kodesnutt 3 def mystery (x, y): z = '' for i in range(0, len(x)): if (i%2==1): z+=x[i] else: z+=y[i] return z A = 'SUNEAILSUN' B = 'JALTNCSAES' D = mystery(a,b) print (D) Side 4 av 9
3 Lister og matriser a) Lag en funksjon listmaker(n) som tar inn et heltall n, og returnerer en liste av lengde n, der hvert element er 0. >>> print(listmaker(3)) [0,0,0] b) Lag en funksjon boardmaker(n) som tar inn et heltall n, og returnerer en n n-matrise med 0-er. Her er det viktig at elementene er uavhengige av hverandre med hensyn på fremtidige endringer i brettet. Med andre ord vil ikke return [[0]*n]*n være en tilfredsstillende løsning. >>> print(boardmaker(3)) [[0, 0, 0], [0, 0, 0], [0, 0, 0]] c) Lag en funksjon printboard(board) som tar inn en matrise board, og skriver ut matrisen på en fin måte (som vist nedenfor). Denne funksjonen skal ikke returnere noe. >>> printboard([[0, 0, 0], [0, 0, 0], [0, 0, 0]]) [0, 0, 0] [0, 0, 0] [0, 0, 0] Side 5 av 9
d) Lag en funksjon fillboard(board) som tar inn en matrise board, og fyller matrisen slik at annethvert element er 0, og annethvert element er X (sjakkmønstret). Deretter returneres matrisen. Du kan anta at matrisen du får inn som parameter er en n n-matrise der hvert element er 0. Eksepmler på kjøring: >>> print(fillboard([[0, 0, 0], [0, 0, 0], [0, 0, 0]])) [0, X, 0] [X, 0, X] [0, X, 0] Side 6 av 9
e) Nå må du lese nøye og holde tungen rett i munn. Lag en funksjon validdirections(board), som tar inn en matrise, og returnerer en liste. Matrisen du får inn er på formen n*m, og inneholder én (og bare én) stjerne. Resten av matrisen er vilkårlige karakterer eller tall. Listen som returneres, skal inneholde hvilke retninger stjernen kan flyttes ( N, S, E, W ). Et flytt for stjernen er ikke gyldig dersom det går utenfor matrisen. >>> print(validdirections([1, 's', 2, 4], [6, 0, 'b', 2], ['*', 5, 5, 5])) ['N', 'E'] >>> print(validdirections([1, 'x', 2, 4], [6, 'a', '*', 2], [8, 5, 5, 5])) ['N', 'S', 'E', 'W'] >>> print(validdirections([1, 0, 2, '*'], [6, 0, 0, 2], [8, 5, 'f', 5])) ['S', 'W'] Side 7 av 9
4 Strenger a) Lag en funksjon checkprefix(...) som tar inn et prefiks (streng) og en ordliste (liste med strenger). Funksjonen skal returnere en liste med alle ord i ordliste som starter på prefiks. >>> checkprefix('en', ['en', 'enhjoerning', 'kan', 'neppe', 'bli', 'entrepenoer', 'i', 'denne', 'ensidige', 'verden']) ['en', 'enhjoerning', 'entrepenoer', 'ensidige'] b) Lag en funksjon checksuffix(...) som tar inn et suffiks (streng) og en ordliste (liste med strenger). Funksjonen skal returnere en liste med de tre siste ordene i ordliste som slutter på suffikset. >>> checksuffix('som', ['en', 'morsom', 'gutt', 'ser', 'paa', 'en', 'ensom', 'og', 'arbeidsom', 'jente', 'som', 'gjoer', 'auditorieoeving']) ['ensom', 'arbeidsom', 'som'] Side 8 av 9
c) Politiet arbeider mye basert på vitneobservasjoner. I dette tilfellet har en selvkjørt bil stukket av fra en ulykke, men vitnene sliter litt med å huske nøyaktig registreringsnummer. I en vitneobservasjon vil derfor et felt med «?» bety at vitnet var usikker på det aktuelle sifferet/tegnet i registreringsnummeret. Skriv en funksjon som tar inn to strenger, et vitneobservert registreringsnummer og et faktisk registreringsnummer. Funksjonen skal sjekke om det vitneobserverte registreringsnummeret kan stemme overens med det faktiske registreringsnummeret. Funksjonen skal returnere True dersom det er full overensstemmelse eller hvis avvik kun gjelder «?». Hvis det derimot finnes avvik utover «?» i vitneobservasjonen, skal funksjonen returnere False. Eksempler på kjøring: >>> match('vf12345','vf12355') False >>> match('v?1234?','vf12355') False >>> match('vf???55','vf12355') True >>> match('???????','vf12355') True Side 9 av 9