Øving 2 - Operatorer, input, output og betingelser

VIKTIG!

Minst 5 av 6 oppgaver må løses for å få godkjent øvingen. Dersom ikke annet er oppgitt skal koden for hver programmeringsoppgave bestå av èn celle med hele programkoder.

Celler med "In [ ]:" foran er kode-celler som kan kjøre kode. Ellers er cellene tekstbokser. En celle (både tekst og kode) kjøres hvis du markerer den og trykker SHIFT+ENTER. Se guide for utfyllende informasjon om hvordan man bruker jupyter notebooks.

Last ned øvingen fra jupyter til din pc som .pdf-fil (se guide) og last den opp i Blackboard for å levere den.

Oppgave 1

Skriv følgende regnestykker som python-kode og print ut resultatene. Bruk a), b) osv som variabelnavn. (feks a = 1+2(-3))

a) 1+2(−3)

b) ((3+5*2)+1)/2

c) −3^2+5*3−7

d) (−4)-3+5*(3−7/2)

e) 4*((5+3)/2+7)

In [ ]:
## Oppgave 1 svar

a = 1+2*-3
b = (3+5*2+1)/2
c = -3**2+5*3-7
d = -4*-3+5*(3-7**2)
e = 4*((5+3)/(2+7))

print('a = ', a)
print('b = ', b)
print('c = ', c)
print('d = ', d)
print('e = ', e)

Oppgave 2

Finn feilen(e) i programmet under og rett det opp så brukeren får skrevet ut riktig karakter ut fra poengsummen som skrives inn.

In [ ]:
## Oppgave 2 svar

poeng = int(input('Skriv poengsum (0-60) her: '))

if poeng < 10:
    kar = 'F'
    print('Karakteren for', poeng, 'poeng er', kar)
elif poeng >= 10 and poeng < 20:
    kar = 'E'
    print('Karakteren for', poeng, 'poeng er', kar)
elif poeng >= 20 and poeng < 30:
    kar = 'D'
    print('Karakteren for', poeng, 'poeng er', kar)
elif poeng >= 30 and poeng < 40:
    kar = 'C'
    print('Karakteren for', poeng, 'poeng er', kar)
elif poeng >= 40 and poeng < 50:
    kar = 'B'
    print('Karakteren for', poeng, 'poeng er', kar)
elif poeng >= 50 and poeng < 60:
    kar = 'A'
    print('Karakteren for', poeng, 'poeng er', kar)
else:
    print('Ugyldig poengsum.')
    

Oppgave 3

a)

Gjett tallet! Programmet under er et program som lagrer et hemmelig tall mellom 1-100 i en variabel og spør brukeren om å gjette tallet. Det som mangler i programmet er betingelsen(e) for å gi beskjed om tallet som ble gjettet var for høyt eller for lavt. Hvis brukeren gjetter feil skal han/hun få beskjed om å prøve på nytt. Skriv den manglende koden slik at programmet fungerer.

In [ ]:
## Oppgave 3a svar

import random

hemmeligTall = random.randint(0,100) # Hent et tilfeldig tall

gjettet = 0 # Initier variabelen for gjettet tall
antGjett = 0 # Initier counter for antall forsøk

while gjettet != hemmeligTall:
    
    gjettet = int(input('Gjett det hemmelige tallet (1-100): ')) # Ta inn en gjetting fra bruker
    antGjett += 1 # Øk antall forsøk med 1 for hver runde
    
    ### Skriv din kode under denne linjen ###

    if gjettet < hemmeligTall:
        print('Tallet du gjettet var for lavt! Prøv igjen...')
    elif gjettet > hemmeligTall:
        print('Tallet du gjettet var for høyt! Prøv igjen...')
        
    ### Skriv din kode over denne linjen ###

print('Du gjettet riktig! Det hemmelige tallet var', hemmeligTall, '. Du brukte', antGjett, 'forsøk.')

b)

Nedenfor følger en kodesnutt hvor brukeren bes om å gi to tall innenfor et lovlig verdiområde, som forklart av ledeteksten - altså mellom 40-50 eller mellom 70-90. Om ikke begge tallene har fått lovlig verdi, skal koden i else-blokken utføres.

Dessverre er det feil i koden som gjør at den ikke fungerer slik den skal. Din oppgave er å rette opp i disse feilene.

In [ ]:
## Oppgave 3b svar

print("Gi a og b, begge heltall i intervall <40,50> eller <70,90>:" )

a = int(input("Verdi for a: "))
b = int(input("Verdi for b: "))

#and (40 > b < 50 or (b > 70 and b < 90))
    
if ((a > 40 and a < 50) or (a > 70 and a < 90)) and ((b > 40 and b < 50) or (b > 70 and b < 90)):
    print("Tallene er begge innenfor gyldige intervall.")
else:
    print("Minst ett av tallene er utenfor et gyldig intervall.")

c)

Hva blir printet til konsoll av programmet under hvis x = -5 ? Her er det meningen at du ikke skal kjøre koden for å se resultatet, men finne ut av oppgaven ved å se gjennom koden.

if -4 <= x or x >= 2:

print(x**3)

elif x == (5-10):

print(x+x)

elif 25/x < 4 and x >=0:

print(x+5)

elif x <= 25/7 or x == 0:

print(x)

else:

print(x-5)

Oppgave 3c svar

x = -10, siden x == 5-10 er sann.

Oppgave 4

Et busselskap ønsker å automatisk beregne pris på billetter ut fra aldersinformasjon hentet inn fra kunden. Priser for standard billetter:

By - Sjø: 150,-

Sjø - Fjell: 250,-

Fjell - By: 50,-

Aldersrabatter:

0-2: Gratis

2-16: -50 %

16-65: Standard pris

65+: -70 %

Skriv pseudokoden under om til et python-program.

In [ ]:
## Dette programmet tar inn informasjon fra bruker om alder, rabattrettighet ut fra alder og reiserute, og
## beregner pris på billett.

# Spør bruker om reisestrekning: 
# 1 = By-Sjø
# 2 = Sjø - Fjell
# 3 = Fjell - By
# Initier variabel "pris" til 0
# Spør bruker om alder
# Skriv oppgitt alder ut til bruker
# Oppdater "pris": beregn rabattert pris ut fra alder og rute
# Skriv ut standard pris, rabatt og sluttpris til bruker
# Hvis bruker ikke får rabatt skal ikke rabatt-setningen skrives ut, men en setning som sier "Ingen rabatt." 
In [ ]:
## Oppgave 4 svar

pris = 0

reise1 = 150
reise2 = 250
reise3 = 50
    
reise = int(input("Hvor skal du reise? Skriv 1 for By - Sjø, 2 for Sjø - Fjell eller 3 for Fjell - By: "))

if reise == 1:
    pris = reise1
    
elif reise == 2:
    pris = reise2
        
elif reise == 3:
    pris = reise3
    
else:
    print('Velg et tall mellom 1-3: ')

alder = int(input("Hva er alderen på den reisende? "))

print("Du oppga en alder på ", alder, "år.")

if alder < 2:
    sluttpris = 0
elif alder > 2 and alder <= 16:
    sluttpris = pris/2
elif alder > 16 and alder <= 65:
    sluttpris = pris
else:
    sluttpris = pris - (pris*0.7)
    
rabatt = pris-sluttpris

print("Standardprisen for strekning", reise, "er ", pris, "kr.")

if rabatt == 0:
    print('Oppgitt alder gir ingen rabatt.')
else:
    print("Rabatten er på", rabatt, "kr.")
print('Prisen for reisen blir', sluttpris, 'kr.')
    

Oppgave 5

True/false og betingelser - oddetall og partall.

Programmet under tar inn et tall mellom 1-1000 fra bruker. Skriv den manglende koden slik at programmet fungerer:

a) Finn ut om tallet er et oddetall eller et partall

b) Lag en boolsk variabel som er True hvis tallet er et partall, og False hvis tallet er et oddetall.

c) Ved True skal en counter for partall økes med 1.

d) Skriv en setning til bruker med beskjed om tallet var et partall eller et oddetall.

Til slutt skrives det til konsoll hvor mange tall brukeren skrev inn, og hvor mange av tallene om var partall.

In [3]:
## Oppgave 5 svar


antPar = 0 # Initierer antall partall-counter
forsok = 0 # Initierer counter for antall forsøk
ny = 'J' # Initierer kontrollstruktur for ny input

partall = False # Initierer bool for partall

while ny.lower() == 'j':
    
    tall = int(input('Skriv et tall mellom 1-1000:' )) # Ta inn et tall fra bruker
    
    ### Skriv din kode under denne linjen ###

    if tall % 2 == 0:
        partall = True
        forsok += 1
        
        print('Tallet ', tall, 'er et partall.')
    else:
        forsok +=1
        partall = False
        print('Tallet ', tall, 'er ikke et partall.')
    
    if partall:
        antPar += 1
        
    ### Skriv din kode over denne linjen ###
        
    ny = str(input('Vil du skrive inn et nytt tall? (J/N): ')) # Sjekker om programmet skal avsluttes eller startes på nytt
    
print('Du skrev inn ', forsok, 'tall, og', antPar, 'av dem var partall.') # Beskjed til bruker om antall forsøk og antall partall

Oppgave 6

Stein-saks-papir!

Skriv et program som tar inn et tilfeldig tall mellom 1-3 (1 = stein, 2 = saks, 3 = papir) fra random-biblioteket, og enten stein('st'), saks('sa') eller papir('p') fra bruker. Sammenlign valgene og sjekk hvem som vant ut fra følgende regler:

Stein vs saks: stein vinner

Stein vs papir: papir vinner

Papir vs saks: saks vinner

Ved samme valg er det uavgjort.

Bruk if-elif-else for å skrive programmet. Skriv resultatet ut til konsoll.

In [6]:
## Oppgave 6 svar

import random

pc = random.randint(0,3)

if pc == 1:
    pc = 'st'
elif pc == 2:
    pc = 'sa'
else:
    pc = 'p'

bruker = str(input('Stein (st), saks (sa) eller papir (p)? '))

if bruker == pc:
    resultat = 'Uavgjort!'
elif bruker == 'st' and pc == 'sa':
    resultat = 'du vant!'
elif bruker == 'sa' and pc == 'p':
    resultat = 'du vant!'
elif bruker == 'p' and pc == 'st':
    resultat = 'du vant!'
    
elif bruker == 'sa' and pc == 'st':
    resultat = 'pc vant!'
elif bruker == 'p' and pc == 'sa':
    resultat = 'pc vant!'
elif bruker == 'st' and pc == 'p':
    resultat = 'pc vant!'
    
if pc == 'p':
    pcValg = 'papir'
elif pc == 'st':
    pcValg == 'stein'
else:
    pcValg = 'saks'

if bruker == 'p':
    bValg = 'papir'
elif bruker == 'st':
    bValg = 'stein'
else:
    bValg = 'saks'
    
print('PC valgte:', pcValg, ', og du valgte: ', bValg,'. Resultat: ', resultat)

Spørsmål og kommentarer