Du blir bedt om å lage et program som samler informasjon om eierne av sykler i et register. Dette programmet skal lagre informasjon fra bruker om navn og adresse for eierne av spesifikke sykler, og man skal kunne søke etter eierinformasjon ut fra rammenummer. Skriv programmet etter pseudokoden under.
rammenr = WBK0132K, VE01562512D, S5A001234, WN17632Z, TA78317B, ME7265T
sykler = {}
rammenr = ['WBK0132K', 'VE01562512D', 'S5A001234', 'WN17632Z', 'TA78317B', 'ME7265T']
for ramme in rammenr:
navn = str(input('Eier: '))
adr = str(input('Adresse: '))
sykler[ramme] = navn, adr
# print(sykler)
Bruk koden fra del 1 som utgangspunkt for koden din i denne oppgaven. Det vi si at du kan referere til variabler, funksjoner osv som ble definert i koden din fra del 1. Skriv programmet ditt etter pseudokoden under.
Definer funksjonen "sok_register", som skal ta inn argumentet "ramme" og gjøre følgende:
Søke i dictionaryen "sykler" etter rammenummeret som blir gitt som argument
Definer funksjonen "main" som skal:
Funksjonen "main" skal kalles hvis brukeren ønsker å søke på flere rammenummer.
def sok_register(ramme):
navn = sykler.get(ramme)[0] ## Henter informasjonen om eieren av som er gitt som argument
adresse = sykler.get(ramme)[1]
return navn, adresse
def main():
valg = str(input('Rammenr: '))
res_navn, res_adr = sok_register(valg)
print('Eieren av ramme nr', valg, 'er:', res_navn,', med adresse:', res_adr)
flere = 'ja'
while flere.lower() == 'ja':
main()
flere = str(input('Vil du søke etter en ny sykkel? (ja/nei)'))
I koden under er det to feil i "main()" som gjør at resultatet av kjøringen ikke blir riktig. Forklar hva feilene er og hvorfor de gjør at kjøringen blir feil. (5p)
Dette programmet bruker en dictionary over planeter med deres respektive avstand (i millioner km) til Sola. Programmet skal ved hjelp av funksjoner:
Hente de fire planetene som er lengst fra sola i en egen liste
Print listen over de nærmeste planetene til konsoll
planeter = {'uranus': 2871,'venus':108,'jupiter':778,'jorda':149,'mars':227,'merkur':57,'neptun':4497,'saturn':1427}
# Hent og sorter avstandene
def get_dist(planeter):
avst = []
for key,value in planeter.items(): # Iterer over keys og values i dictionaryen
avst.append(value)
avstSort = sorted(avst) # Sorter verdiene
# Bruk den sorterte lista for å finne de fire nærmeste og fire lengst unna
kortAvst = avstSort[:4]
langAvst = avstSort[4:]
return kortAvst,langAvst
# Ut fra listener med avstander, hent navnet på planetene som er nærmest og lengst unna
def get_names(kortAvst,langAvst):
kortAvstNavn = []
langAvstNavn = []
for key,value in planeter.items(): # Iterer over keys og values i dictionaryen
if value in kortAvst: # Sjekk om value'en eksisterer i listen over de korteste avst
kortAvstNavn.append(key) # Legg key'en til listen
else:
langAvstNavn.append(key) # Alle verdier som ikke er i lista over de korteste avst skal legges i denne lista.
return kortAvstNavn, langAvstNavn
def main():
korteAvst, lengstAvst = get_dist() # Hent sorterte lister avstander fra dict'en "planeter"
kortAvst, langAvst = get_names(lengstAvst,korteAvst) # Ut fra listene over, hent navnen
# Print de to listene med navn på planetene til konsoll
print('Planetene nærmest sola er: ',kortAvst)
print('Planetene lengst fra sola er: ',langAvst)
main() # Kall main for å kjøre programmet
Den første feilen er at kallet til get_dist i main-funksjonen ikke gir noe parameter til funksjonen når den kalles. Det riktige kallet skal være "get_dist(planeter)", og feilen gjør at programmet stopper ved denne kodelinjen. Den andre feilen er at rekkefølgen på argumentene er feil i kallet til get_names() i main. Det gjør at verdiene som lagres i variablene kortAvst og langAvst blir feil, da verdien som gis til variablene kommer fra rekkefølgen på parametrene returneres i i get_names()-funksjonen. Riktig kall skal være "get_names(kort,lang)"
planeter = {'uranus': 2871,'venus':108,'jupiter':778,'jorda':149,'mars':227,'merkur':57,'neptun':4497,'saturn':1427}
# Hent og sorter avstandene
def get_dist(planeter):
avst = []
for key,value in planeter.items(): # Iterer over keys og values i dictionaryen
avst.append(value)
avstSort = sorted(avst) # Sorter verdiene
# Bruk den sorterte lista for å finne de fire nærmeste og fire lengst unna
kortAvst = avstSort[:4]
langAvst = avstSort[4:]
return kortAvst,langAvst
# Ut fra listener med avstander, hent navnet på planetene som er nærmest og lengst unna
def get_names(kortAvst,langAvst):
kortAvstNavn = []
langAvstNavn = []
for key,value in planeter.items(): # Iterer over keys og values i dictionaryen
if value in kortAvst: # Sjekk om value'en eksisterer i listen over de korteste avst
kortAvstNavn.append(key) # Legg key'en til listen
else:
langAvstNavn.append(key) # Alle verdier som ikke er i lista over de korteste avst skal legges i denne lista.
return kortAvstNavn, langAvstNavn
def main():
korteAvst, lengstAvst = get_dist(planeter) # Hent sorterte lister avstander fra dict'en "planeter"
kortAvst, langAvst = get_names(korteAvst,lengstAvst) # Ut fra listene over, hent navnen
# Print de to listene med navn på planetene til konsoll
print('Planetene nærmest sola er: ',kortAvst)
print('Planetene lengst fra sola er: ',langAvst)
main() # Kall main for å kjøre programmet
Hva er resultatet av kjøringen av koden under gitt x? Forklar kort hva koden gjør.
x = ['p','g','e','j','p','s','p','v','e','p','r','m','k','t','a','b','k','t','e']
bak = " "
for i in range(0,len(x),2):
bak += x[i]
print(bak)
Resultatet av koden er: "Pepperkake". Koden lagrer først listen over bokstaver som en variabel x. Så opprettes en tom tekst-variabel "bak". En for-løkke går så gjennom hvert 2. element i listen x og legger det til variabelen "bak". Så printes "bak" ut.
Dette programmet skal gi brukeren informasjon om hvorvidt en bil holdt en gjennomsnittsfart som var høyere enn tillatt (80 km/t) på en strekning på 3500 meter.
Programmet skal gjøre følgende:
Lag en funksjon "speedFromTime" som tar inn to argumenter: distanse og tid. Funksjonen skal beregne og returnere hastighet (m/s) ut fra antall sekunder og distanse. Hastighet = distanse/tid.
Lag en funksjon "speedCheck" som tar inn hastighet som argument. Denne skal sjekke om hastigheten var over 80 km/t eller ikke, og returnere True eller False basert på resultatet. Husk at du må gjøre om resultatet fra speedFromTime fra m/s til km/t.
Lag en funksjon "main" som:
1) Henter inn informasjon fra bruker om registreringsnummer og tiden (antall sekunder) den gjeldende bilen brukte på å kjøre strekningen.
2) Kaller funksjonen "speedFromTime"
3) Kaller funksjonen "speedCheck"
4) Hvis hastigheten var over 80 km/t skal det skrives en setning til bruker om registreringsnummer og hastighet
Så lenge bruker ønsker å skrive inn ny informasjon skal "main" kalles
# Definerer funksjonen speedFromTime for å beregne hastighet i m/s
def speedFromTime(distanse, tid):
hastighet = distanse/tid
return hastighet
# Definerer funksjonen speedCheck for sjekk av hastigheten
def speedCheck(hastighet):
if hastighet * 3.6 > 80:
resultat = True
else:
resultat = False
return resultat
# Definerer funksjonen main som tar inn informasjon fra bruker.
def main():
regnr = str(input('Registeringsnummer: '))
tid = int(input('Tid (sekunder): '))
hastighet = speedFromTime(3500, tid)
over = speedCheck(hastighet)
if over:
print('OVER FARSTGRENSEN! Bil med registreringsnummer', regnr, 'kjørte i,', hastighet*3.6,'km/t.') # Arne Gjettet
else:
print('Bil med registreringsnummer', regnr, 'kjørte i ', hastighet*3.6,'km/t.')
# Kontroller om bruker vil sjekke flere hastigheter
fortsett = 'J'
while fortsett.upper() == 'J':
main()
fortsett = str(input('Flere sjekker? J/N'))
Dette programmet skal generere en liste på 100 tilfeldige tall mellom 3-1000. Print lista ut til konsoll. Lag en funksjon som sjekker om tallene i lista er primtall (altså kun er delelig med 1 og seg selv), og legger primtallene i en ny liste. Print ut lista over primtall til konsoll.
Her er en funksjon som sjekker om tall i en liste er primtall:
def is_prime(n):
for i in range(3, n):
if n % i == 0:
return False
return True
## Oppgave 3.2 svar
import random
# Genererer liste på 100 unike tilfeldige tall mellom 3 og 1000
tilfeldige = random.sample(range(3,1000), 100)
print('100 tilfeldige tall: ',tilfeldige)
# Funksjon som sjekker som et tall er primtall
def is_prime(n):
for i in range(3, n):
if n % i == 0:
return False
return True
# Funksjon som sjekker om tallene i ei liste er primtall, og legger primtallene i en ny lis
def get_listePrimtall(liste):
primListe = []
for tall in liste:
if is_prime(tall):
primListe.append(tall)
return primListe
# kaller funksjonen listePrim og skriver resultatet til konsoll
primtall = get_listePrimtall(tilfeldige)
print('Primtallene i listen over er: ', primtall)
Stave navn baklengs
Lag en funksjon som tar inn et navn. Funksjonen skal snu rekkefølgen på bokstavene i navnet, og returnere navnet stavet baklengs. La brukeren skrive inn et navn som skal sendes til funksjonen.
def baklengsNavn(navn):
return navn[::-1]
navn = str(input('Skriv inn et navn: '))
navnBaklengs = baklengsNavn(navn)
print(navn.lower(),'baklengs er: ', navnBaklengs.lower())
Denne delen av programmet skal bruke koden fra del 1. Nå skal du skrive en funksjon som lar brukeren skrive inn navnet fra del 1 i koden baklengs, og så sjekker om rekkefølgen på bokstavene er riktig sammenlignet med resultatet fra funksjonen fra del 1. Hvis hele navnet blir stavet riktig baklengs skal det printes ut en beskjed om det til bruker, men hvis navnet er feil stavet så skal han/hun få mulighet til å prøve på nytt.
def baklengsNavn(navn):
return navn[::-1]
def gjettBaklengs(navn):
riktig = False
while not riktig:
gjettNavn = input('Hva blir navnet du skrev inn baklengs?')
if gjettNavn.lower() == baklengsNavn(navn).lower():
riktig = True
print('Riktig!')
else:
print('Feil! Prøv igjen:')
riktig = False
def main():
navn = input('Skriv inn et navn: ')
gjettBaklengs(navn)
main()