Göm meny

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! För tips på hur du testar din kod, se sidan Testa kod.

Du kan bara köra automaträttning av en specifik pythonuppgift en gång var 8:de minut.

Information om hur du använder rättningsskriptet hittar du på sidan Rättningsskript. Information om inlämning hittar du på sidan Inlämningar.

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 +.

new_list1 = []
new_list2 = []
ord = "då"

new_list1.append("hej")
new_list1.append(ord)

new_list2 = new_list2 + ["hej"]
new_list2 = new_list2 + [ord]

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 words.

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: 2019-07-08