Test deg selv - uke 35

Løsningsforslag

Informasjon om test-deg-selv

Dette er oppgaver som er ment som mengdetrening i programmering. Det legges ut løsningsforslag etter at vi har gått gjennom og løst oppgavene i webinaret. Se Blackboard for mer informasjon om tidspunkt for dette.

Oppgavene er strukturert på samme måte som i øvingene: Det er tre kategorier: 1(grunnleggende), 2(forventet), 3(avansert). Kategori 1 og 3 har én oppgave hver, imens kategori 2 har fire oppgaver. Oppgavene i kategori 2 er det forventet at man klarer å løse.

Står du fast? Prøv å google problemet, eller spør om tips eller hjelp på Slack :)

Temaene disse ukene er:

  • Variabler
  • Datatyper
  • Print

TIPS!

For å fjerne den automatiske numereringen av markdown-celler (som gjør at cellene får en ekstra nummerering fra 1-10):

Trykk på knappen som er den nest ytterste til venstre på verktøylinja. Da kommer det en meny opp på venstre side i ruta, der det står "Contents". Trykk på tannhjulet, og kryss ut "Automatically number headings" og trykk OK.

1) Variabler

1.1

Hva er feil eller dårlig med variabelnavnene under? Gi en kort forklaring og gi dem til bedre variabelnavn.

a) Et tall = 123

b) 3variabelen = 3

c) Variabel1 = "teksten skal hit"

d) detførstetallet = "1"

e) %AvTallet = 15

f) SummenAvRegnestykketEr = 16

1.1 Svar

Oppgave a) «Et tall», er ugyldig fordi det ikke er lov med mellomrom i variabelnavn. Her kunne man heller brukt bare «tall» eller «EtTall», hvis det er beskrivende og unikt i programmet du skal lage. Generelt er slike vanlige ord ikke så lurt å bruke, da man lett kan glemme hva variabelen er siden navnet er lite beskrivende.

Oppgave b) «3variabelen» er ugyldig fordi man ikke kan bruke tall som første tegn i et variabelnavn. Hvis man vil ha en variabel som kun er et tall, slik som her, kan man for eksempel kalle den for «Treer» eller noe som beskriver hvilken funksjon den har i koden, for eksempel «konstant» eller «multiplikator».

Oppgave c) er et gyldig navn, men det er lite beskrivende og kan derfor være vanskelig å huske funksjonen til i koden. Oppgave d) er også et gyldig navn, men det er vanlig å skille de ulike ordene med enten å bruke Kamel-metoden (DetFørsteTallet), eller bruke understrek mellom ordene (det_første_tallet).

Oppgave e) er ugyldig på grunn av to ting: man ikke kan bruke andre tegn enn understrek og bokstaver som første tegn i et variabelnavn, og man kan ikke bruke spesialtegn noe sted i et variabelnavn.

Oppgave f) er et gyldig navn, men det burde forkortes siden det vil ta lang tid å skrive og man kan lett feilstave det. Det er praktisk å bruke korte, beskrivende navn, og her kunne det holdt å bare kalle variabelen for «summen» (vi kan ikke bruke «sum») siden det er et reservert ord i python.

2) Datatyper

2.1

Skriv et program som skriver "5 ganger 10 er 50" til konsoll ved å bruke variabler for tallene 5, 10 og 50.

In [39]:
## 1.2 Skriv kode her

fem = 5
ti = 10
femti = fem * ti

print(str(fem)+' ganger '+str(ti)+' er '+str(femti))

2.2

Skriv et program som bruker variablene under (erstatt variabelnavnene med mer passende navn) til å skrive forslag til e-post adresser til konsoll.

Kriterier:

  • Epostadressene skal bestå av fornavn og etternavn, separert med punktum, etterfulgt av @ og et valgfritt domene, for eksempel "test.testesen@bedrift.no".

  • Epostadressene som skrives ut skal være uten mellomrom.

  • Variabelen som inneholder "domene" skal ikke inneholde "@".

  • Epostadressen skal lagres i en egen variabel, og denne nye variabelen skal printes ut

var1 = fornavn

var2 = etternavn

var3 = domene

In [18]:
## 2.1 Skriv kode her

fornavn = 'Elise'
etternavn = 'Vonstad'
domene = 'ntnu.no'

epost = fornavn+'.'+etternavn+'@'+domene

print(epost.lower())

2.3

a) Hvorfor blir ikke regnestykket under regnet ut når print-setningen kjøres?

print("4 + 6")

b) Skriv et program som lagrer tallet 42 i en variabel, og skriver "Svaret på alt er 42" til konsoll ved å bruke variabelen med tallet 42.

c) Hvorfor blir to forskjellige tall printet når koden under kjøres?

a = 3.4

b = 20.5

total = a * b

print(total)

print(int(total))

In [1]:
### Skriv kode her

# a) Regnestykket blir ikke regnet ut fordi innholdet i print-setningen er definert som tekst. 
#    Da blir tallene bare skrevet ut til konsoll uten at regnestykket kjøres.

# b)

alt = 42
print('Svaret på alt er',alt)

# c) I den første print-setningen skrives "total" ut slik den er regnet ut i variabelen. 
#    I den andre print-setningen blir "total" definert som et heltall (int), og da brukes ikke desimalene i tallet.
Svaret på alt er 42

2.4

Hva er feil med print-setningen under? Rett den opp og print den ut.

print('Jeg leser sannsynligvis' + antall + bøker i løpet av sydenturen, ca + int('2') ' i uka.'

In [3]:
# "Antall" var ikke definert som variabel. Det mangler skiller mellom de to siste elementene (int('2')) 'i uka'). 
# "bøker i løpet av sydenturen" er ikke definert som tekst. "ca" er ikke definert som variabel, men ska være en del 
# av teksten. Det mangler slutt-parentes på print-setningen. "int('2')" prøver å definere teksten "2" som et heltall, 
# og når print-setningen skiller elementene med et plusstegn må alle elementene være definert som tekst. "Antall" må 
# også defineres som tekst. 

### Skriv kode her

antall = 4

print('Jeg leser sannsynligvis ' + str(antall) + ' bøker i løpet av sydenturen ca 2 i uka.')
Jeg leser sannsynligvis 4 bøker i løpet av sydenturen ca 2 i uka.

3) Sammensatte datatyper

3.1

Skriv et program som lager romkoder i en kontorbygning ved å bruke informasjonen under. Romkoden er satt sammen slik: (etasjenummer)(romtype-forkortelse)(romnummer), for eksempel 03K03, som betyr etasje nr 3, K for Kontor og 03 for kontor nr 3.

Mulige verdier i variablene:

Etg: 1-6

Romtype: Kontor, møterom, lager, samtalerom

Romnummer: 1-25

Skriv ut tre eksempler på romnummer, kalt rom1, rom2 og rom3 ved å lage tre variabler som har verdier fra listen over.

In [38]:
## 2.2 Skriv kode her
etg1 = 2
romt1 = 'K'
romnr1 = 20

rom1 = str(etg1)+romt1+str(romnr1)
print('Rom 1:',rom1)

etg2 = 6
romt2 = 'L'
romnr2 = 1

rom2 = str(etg2)+romt2+str(romnr2)
print('Rom 2:',rom2)

etg3 = 1
romt3 = 'M'
romnr3 = 4

rom3 = str(etg3)+romt3+str(romnr3)
print('Rom 3:',rom3)