Lösningsförslag till tenta 111028 Uppgift 1 (10p)

Lösningsförslag till tenta 111028
• Tillåtna hjälpmedel: Ordbok (språk)
• Totalt antal poäng: 40
• Skrivtid: 4 timmar
Uppgift 1 (10p)
a: Kommer följande program att terminera
(terminera=avsluta)?
j=0
k=3
Ja!
i=0
ett varv till
while i<len(range(j,k)):
ett varv till
k=k+1
if (j<k):
i=i+2
print 'ett varv till'
ett varv till
b: Vilken utskrift ger följande program:
c: Vilken utskrift ger följande program:
delay=5
jitter=3
compensation=True
if delay-jitter<2 and compensation:
print 'synchronization failure'
elif compensation and jitter<delay:
compensation=not compensation
if delay>jitter and not compensation:
print 'Jitter boundary'
else:
print 'Compensation performed'
s='A'
while len(s)<5:
s=s+chr(ord(s[-1])+1)
print s
'Jitter boundary'
ABCDE
d: Vad händer när följande kod exekveras:
value=range(1,5,2)[-2]+3+int('2'+str(0))
value tilldelas heltal 24
1
Uppgift 2 (5p)
Någon har skrivit en funktion twoOfThree(a,b,c) som är tänkt
att returnera True endast om exakt två av argumenten är
sanna. Programmeraren kom fram till följande lösning:
def twoOfThree(a,b,c):
if a and b:
return not c
elif a and c:
return not b
else:
return not a
Programmeraren har dock gjort lite fel. Skriv en korrigerad
version av programmet som utför uppgiften korrekt.
Uppgift 3 (5p)
Vad blir utskriften av följande program? (metoden index på
listor returnerar index för argumentet i listan (a.index(b)
ger index för b i listan a))
def filter(ls,e):
[3, 4, 5, 2]
ls = [ls.index(e)]
return ls
def extract(ls,k):
return ls+k
list=[3,4,5]
k=filter(list,5)
print extract(list,k)
Om (a=False) blir det fel
utom b=True=c
def twoOfThree(a,b,c):
if a and b:
return not c
elif a and c:
return not b
elif b and c:
return not a
Uppgift 4 (5p)
Skriv en funktion rFind(str,substr) som tar en sträng str och
en till sträng substr som parametrar. Funktionen ska
returnera en tupel som ska bestå dels av indexet för den
sista förekomsten av substrängen substr i strängen str och
dels det totala antalet förekomster av substr i strängen str.
Det är tillåtet att anta att strängen substr endast innehåller
ett tecken.
Körexempel: >>> rFind("Mississippi", "s")
(6, 4)
Inbygda funktioner eller metoder som utför liknande
uppgifter får inte användas. Det är dock tillåtet att använda
funktionerna len och range. Iteration kan ske på valfritt sätt
med for eller while.
2
def rFind(str,ch):
total=0
lastIndex=0
i=0
while i <len(str):
if ch==str[i]:
lastIndex=i
total+=1
i+=1
return lastIndex,total
def rFind(str,ch):
total=0
lastIndex=0
for i in range(len(str)):
if ch==str[i:i+len(ch)]:
lastIndex=i
total+=1
return lastIndex,total
def caps(n):
str=''
m=65
for x in range(m,m+n):
if chr(x)!=' ':
str=str+chr(x)
return str
Uppgift 5 (5p)
Betrakta följande kodsnutt:
m=65
for x in range(m, m+n):
print chr(x),
Identifiera lämpliga parametrar och kapsla in koden som en
egen funktion vid namn caps. Modifiera koden så att
funktionen returnerar en sträng innehållande de tecken som
nu skrivs ut på skärmen exkl. mellanslag (ta inte med
mellanslaget som ”print” lägger till i strängen som ni
returnerar).
Uppgift 6 (5p)
Vi vill göra en klass WaterLevel som implementerar
övervakning av en vattennivå. Aktuell vattennivå ska
kunna anges vid instansiering (skapandet) av objektet.
Vidare ska en metod, updateLevel(l) implementeras för att
uppdatera den aktuella nivån samt en metod getAlarm()
som returnerar -1 om nivån är under 0, 1 om nivån är över
100 och i annat fall 0.
Implementera klassen WaterLevel enligt ovan.
3
Uppgift 7 (5p)
class WaterLevel:
def __init__(self, nivaa):
self.vattennivaa=nivaa
def updateLevel(self, nivaa):
self.vattennivaa=nivaa
self.vattennivaa += nivaa
def getAlarm(self):
if self.vattennivaa<0:
return -1
elif self.vattennivaa>100:
return 1
return 0
Skriv en rekursiv funktion, multiplar(i,j), som returnerar en
lista av tal som är heltalsmultiplar av i. Listan ska innehålla
alla heltalsmultiplar av ifrån och med 1 till och med j.
(Tips: j är rekursionsvariabel)
Exempel:
>>> multiplar(3,5)
[3, 6, 9, 12, 15]
>>> multiplar(2,6)
[2, 4, 6, 8, 10, 12]
>>> multiplar(1,8)
[1, 2, 3, 4, 5, 6, 7, 8]
def multiplar(m,n):
if n<=0:
return []
return multiplar(m,n-1)+[m*n]
4