Pythonuppgift 2.2
Skriv lösningarna till uppgifterna i en och samma fil och testa koden själv innan du använder rättningsskriptet. Att kunna testa sin kod är en viktig del av att programmera!
Att lära dig från uppgifterna
- syntax och användning av
while
-loopen - syntax och användning av
for
-loopen
Godkänt
För att få godkänt krävs 70 poäng.
Uppgift 2.2.1 (5p per deluppgift)
Skriv två funktioner vars uppgifter är att returnera en lista som innehåller
heltalen 0
-10
i ordning, dvs listan [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
.
- a) Funktionen
create_ten_list_while()
ska lösas med en while-loop. - b) Funktionen
create_ten_list_for()
ska lösas med en for-loop.
Tips 1
Skapa en tom lista med t.ex. new_list = []
som du sedan lägger
till värden till.
Tips 2
Hur använder man range för att få ut de värden man vill ha.
Tips 3
Lägg till innehåll till en lista antingen med metoden .append()
eller genom
att använda operatorn +
.
|
|
Ovanstående kod kommer att resultera i att både new_list1
och new_list2
innehåller ["hej", "då"]
. Exemplet visar också hur det ser ut när man lägger
till ett hårdkodat värde till en lista och hur det ser ut när man lägger till
ett värde från en variabel till en lista.
Uppgift 2.2.2 (5p per deluppgift)
Skriv funktionerna create_zero_to_number_list_while(number)
och
create_zero_to_number_list_for(number)
. Funktionerna ska ta in ett heltal som
argument (number
) och returnera en lista som innehåller siffrorna från 0 till
number
.
- a) Funktionen
create_zero_to_number_list_while(number)
ska lösas en while-loop. - b) Funktionen
create_zero_to_number_list_for(number)
ska lösas med en for-loop.
Anropet create_zero_to_number_list_while(3)
ska alltså returnera listan [0, 1, 2, 3]
.
Uppgift 2.2.3 (5p per deluppgift)
Skriv funktionerna create_number_to_number_list_while(start_number, end_number)
och create_number_to_number_list_for(start_number, end_number)
.
Funktionerna ska skapa och returnera en lista som innehåller siffror från
start_number
till och med end_number
. Både start_number
och end_number
är heltal. start_number
kommer också alltid att vara mindre än eller lika med
end_number
.
- a) Funktionen
create_number_to_number_list_while(number)
ska lösas med en while-loop. - b) Funktionen
create_number_to_number_list_for(number)
ska lösas med en for-loop.
Anropet create_number_to_number_list_***(5, 9)
ska alltså returnera listan
[5, 6, 7, 8, 9]
Uppgift 2.2.4 (5p per deluppgift)
Skriv funktionerna get_max_while(integer_list)
och
get_max_for(integer_list)
. Funktionerna returnera det högsta heltalet i listan
integer_list
som är en lista av heltal. Funktionen ska inte använda den
inbyggda funktionen max()
utan en loop som itererar över argumentet
integer_list
.
- a) Funktionen
get_max_while(integer_list)
ska lösas med en while-loop. - b) Funktionen
get_max_for(integer_list)
ska lösas med en for-loop.
Anropet get_max([9, 3, 6, 3, 100, 2, 30])
ska alltså returnera 100
.
Tips 1 Hur fungerade len()
och hur kan man använda det för
att loopa “rätt” antal gånger?
Tips 2 Finns det något annat sätt att skriva for
-loopen
för att slippa använda index och listan för varje element?
Uppgift 2.2.5 (5p)
Skriv funktionen get_min(integer_list)
som ska returnera det lägsta heltalet i
listan integer_list
som är en lista av heltal. Funktionen ska inte använda den
inbyggda funktionen min()
utan en loop som itererar över argumentet
integer_list
.
Anropet get_min([9, 3, 6, 3, 100, 2, 30]
ska alltså returnera 2
.
Uppgift 2.2.6 (5p per deluppgift)
Skriv funktionerna word_in_list_while(words, word)
och
word_in_list_for(words, word)
. Båda funktionerna får in en lista av strängar
(argumentet words
) samt en enskild sträng (argumentet word
). Funktionenrna
ska returnera True
om strängen word
finns i listan words
. False
ska
returneras om word
inte finns i listan word
.
Använd inte den inbyggda operatorn in
.
- a) Funktionen
word_in_list_while(words, word)
ska lösas med en while-loop. - b) Funktionen
word_in_list_for(words, word)
ska lösas med en for-loop.
Om man inte vill att loopen ska fortsätta när man väl hittat att ordet finns kan
man använda nyckelordet break
för att avbryta. Det går även bra att returnera
i loopen.
OBS! Förekomsten av in
i for
-loopskonstruktionen är inte den inbyggda
operatorn in
utan hänger ihop med nyckelordet for
. Operatorn in
används
för att kontrollera om ett värde finns i t.ex. en sekvens: 'a' in 'hejsan'
returnerar True
.
Uppgift 2.2.7 (5p per deluppgift)
Skriv funktionerna count_integers_while(value_list)
och
count_integers_for(value_list)
. Båda funktionerna ska returnera antalet
heltal i argumentet value_list
.
- a) Funktionen
count_integers_while(value_list)
ska lösas med en while-loop. - b) Funktionen
count_integers_for(value_list)
ska lösas med en for-loop.
Använd funktionen type()
som returnerar vilken datatypen hos ett värde. Till
exempel type(4)
returnerar int
, så jämförelsen type(4) == int
kommer att
vara True
(OBS! int
inte är omgiven av några citat-tecken).
Tips
Hur sparar du antalet heltal och vad händer när du hittar en?
Uppgift 2.2.8 (5p per deluppgift)
Skriv funktionerna average_while(values)
och average_for(values)
.
Funktionerna ska returnera genomsnittet av alla värden i argumentet values
som
kommer vara en lista av flyttal. Anropet average([10.0, 20.0, 6.3])
bör alltså
returnera 12.1
. Funktionen ska summera ihop värdena med en loop och sedan dela
summan med antalet värden i listan values
.
Den inbyggda funktionen sum()
ska inte användas.
- a) Funktionen
average_while(values)
använder en while-loop. - b) Funktionen
average_for(values)
använder en for-loop.
Uppgift 2.2.9 (10p)
Befolkningsproblemet: Befolkningen i två länder antas växa exponentiellt; i början på varje år ökar befolkningen i länderna med en viss procent av den nuvarande befolkningen.
Skriv funktionen population(pop_a, rate_a, pop_b, rate_b)
som får in
folkmängden för två länder A (pop_a
) och B (pop_b
) samt folkökningen i
procent (3.3
betyder 3,3%) för dessa (rate_a
resp. rate_b
). Folkmängden i
land A ska från början vara lägre än folkmängden i land B.
Funktionen ska returnera antalet hela år det tar innan folkmängden i land A är större än folkmängden i land B. Gör detta genom att i funktionen skriva en loop som för varje iteration räknar ut folkmängd för början på nästa år för vardera land. Låt loopen fortsätta tills folkmängden i land A är större än folkmängden i land B.
Förutsättningen att kunna hitta ett svar är att land A har en högre
tillväxtprocent än land B. Kontrollera detta i början av funktionen. Om det
kravet ej är uppfyllt ska funktionen returnera -1
.
Extra uppgift (ingår ej bland rättade uppgifter): Skriv en variant av
funktionen population()
där folkmängden i land A inte behöver vara lägre än
folkmängden i land B från början. Funktionen ska returnera antalet hela år det
tar innan landet med den från början lägre folkmängden har en har fler människor
än det andra landet. Skulle detta vara omöjligt ska -1
returneras.
Uppgift 2.2.10 (10p)
Födelsedagsproblemet: Skriv funktionen birthday(n)
, som beräknar
sannolikheten p(n), med hjälp av en loop, för att bland n personer
åtminstone två har samma födelsedag. Vi bortser från skottår.
Tips: Formeln för sannolikheten är $p(n)=1 - 365/365 \cdot 364/365 \cdot 363/365 \ldots (366-n)/365$. Hur kan man upprepa detta för ett givet $n$?
Uppgift 2.2.11 (5p)
Skriv funktionen sum_of_ints(value_list)
som tar in en lista med värden som
argument. Funktionen ska returnera summan av alla heltal som finns i listan.
Sidansvarig: Johan Falkenjack
Senast uppdaterad: 2024-01-10