Lösningsförslag till tenta 081024

Uppgift 1 (10p)
Lösningsförslag till tenta 081024
• Total antal poäng: 40
• Tillåtna hjälpmedel: Inga
• Betyg
– 3: [20,28)
– 4: [28,35)
– 5: [35,40]
a: Vilket värde har följande uttryck:
1<>2 and (1<0 or 6>=6) and True
True
b: Vilken utskrift ger följande program:
a=4
b=3
if (a+b)>7:
print ”Summan för stor”
elif (b-a)<0:
print ”Differensen för liten”
else:
print ”Allting fel”
Differensen för liten
c:Vilken utskrift ger följande program:
b=2
while b<10:
print ”B”,
b=b+4
B B
d: Vad händer när följande kod exekveras:
x=”Python ”*2+”är kul!”
x='Python Python är kul!‘
e:Vad händer när följande kod exekveras:
y=”H ”+chr(ord(’e’))+”j!”
y='H ej!
def min(x, y, z):
if (x<y):
return x
if (y<z):
return y
return z
a: I vilket/vilka fall gör
programmet fel?
z<x<y
b: Skriv en rättad version av
programmet som fungerar i
samtliga fall.
def min(x, y, z):
if (x<y) and (x<z):
return x
if (y<z):
return y
return z
Uppgift 2 (5p)
Någon har skrivit en funktion, min(x, y, z), som är tänkt att returnera det
minsta av talen x, y, och z. Antag att x,y, och z är olika.
Programmeraren kom fram till följande:
def min(x, y, z):
if (x<y):
return x
if (y<z):
return y
return z
Programmeraren har dock gjort lite fel. Uppgiften är att identifiera och
rätta felen.
a: I vilket/vilka fall gör programmet fel?
b: Skriv en rättad version av programmet som fungerar i samtliga fall.
Uppgift 3 (5p)
Vad blir utskriften av följande program?
def improve(lst):
lst[1:2]=[6]
return lst
lista=[1,3,5,4]
lista2=improve(lista)
lista2=[]
print lista
[1,6,5,4]
1
Uppgift 4 (5p)
Skriv en funktion, replaceSegment, som tar en sträng str, och
en annan sträng, replace, samt två heltal, start och stop.
Funktionen ska returnera en ny sträng, där alla förekomster
av delsträngen ”X” i den ursprungliga strängen, str, i
intervallet från och med index start till, men inte med index
stop, är utbytta mot strängen replace.
Inbyggda funktioner eller moduler som utför samma eller
liknande uppgifter får inte användas i denna uppgift. Det är
dock tillåtet att använda funktionen len.
Exempel:
>>> replaceSegment("HXej! X balXoo!", "hopp", 3, 7)
'HXej! hopp balXoo!'
def replaceSegment(str, replace, start, stop):
new=str[0:start]
for letter in str[start:stop]:
if letter=='X':
new=new+replace
else:
new=new+letter
new=new+str[stop:]
return new
Uppgift 5 (5p)
Betrakta följande kodsnutt:
def func(fil, m):
n=1
f=open(fil, “w”)
while n<m:
f.write(str(n)+”\n”)
n=n+1
f.close()
return n
n=1
f=open(fil, “w”)
while n<m:
f.write(str(n)+”\n”)
n=n+1
f.close()
print n
Identifiera lämpliga parametrar och lämpligt returvärde samt kapsla in
koden som en egen funktion. Modifiera koden så att skärmutskrifter
istället returneras från funktionen.
Uppgift 6 (5p)
Vi vill göra en klass som implementerar en
frysvarnare. En frysvarnare fungerar så att den
håller reda på om temperaturen varit under 0
grader. Frysvarnaren har tre metoder, increase,
decrease och wasFreezing. En termometer
kommer att anropa increase när temperaturen ökar
en grad och decrease när temperaturen minskar en
grad (vi ska inte implementera termometern i
denna uppgift). Den ursprungliga temperaturen
ska kunna sättas med initieraren till klassen.
Metoden wasFreezing ska returnera True om
temperaturen någon gång varit under 0 grader och
False i annat fall.
class Frysvarnare:
def __init__(self,temperatur):
self.temperatur=temperatur
self.hasFrozen=temperatur<0
def increase(self):
self.temperatur+=1
def decrease(self):
self.temperatur-=1
if (temperatur<0):
self.hasFrozen = True
def wasFreezing(self):
return self.hasFrozen
2
Uppgift 7 (5p)
Skriv en rekursiv funktion studs, som tar ett heltal, n,
som argument och skriver ut var tredje tal från n
ner till och med det första negativa talet och sedan
var tredje tal upp till n igen.
Exempel på körning:
>>> studs(10)
10 7 4 1 -2 1 4 7 10
>>> studs(10)
10 7 4 1 -2 1 4 7 10
def studs(n):
print n,
if n<0:
return
studs(n-3)
print n,
3