Göm meny

Pythonuppgift 2.3

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

  • slå upp och ändra värde i lista med hjälp av index
  • bearbeta listor och strängar med hjälp av loopar

Godkänt

För att få godkänt krävs 85 poäng.

Uppgift 2.3.1 (5p)

Skriv en funktion replace_periods_with_newlines(string_value) som använder en loop för att gå igenom en sträng och byta ut alla .-tecken (punkter) mot radbrytningar. Resulterande sträng returneras av funktionen.

Använd ej den inbyggda funktionen str.replace(), utan använd en loop som stegar igenom strängen.

Tips!

I Python kan man inte byta ut enskilda tecken i en sträng. Hur kan du då få en nästintill identisk sträng med hjälp av en loop?

När du stöter på en punkt, spara undan radbryttecknet \n istället.

Tips 2

Minns hur man kan hantera sekvenser i uppgift 2.2.1.

Anropet replace_periods_with_newlines("hej.hur mår du.jag mår bra!") ska alltså returnera strängen "hej\nhur mår du\njag mår bra!". Observera att om du skriver ut strängen så kommer alla förekomster av "\n" att skrivas ut som faktiska radbryt.

Uppgift 2.3.2 (10p)

Skriv funktionen replace_char_in_string(original_string, search_character, replacement) som ska gå igenom strängen original_string och byta ut alla förekomster av tecknet search_character mot tecknet replacement. Använd en loop för att göra detta, inte str.replace().

Anropet replace_char_in_string("bob", "b", "l") ska alltså returnera strängen "lol".

Tips Börja med en tom sträng och lägg tecken för tecken från original_string till den tomma strängen, förrutom när search_character påträffas, lägg då istället till replacement.

Uppgift 2.3.3 (20p)

Skriv en funktion reverse_string***(string_value) som tar en sträng och returnerar den sträng med tecknen i omvänd ordning som i string_value. Funktionen ska använda en loop för att skapa baklängessträngen som returneras.

  • a) Funktionen reverse_string_while(string_value) använder en while-loop.
  • b) Funktionen reverse_string_for(string_value) använder en for-loop.

Anropet reverse_string("python är kul") ska alltså returnera strängen "luk rä nohtyp".

Tips Var ska man börja för att enkelt kunna skapa den nya strängen? Hur gör man detta för respektive loop?

Uppgift 2.3.4 (5p)

Skriv funktionen get_five_first(value_list) som tar in en lista som alltid kommer vara längre än 5 element. Funktionen ska returnera en lista som bara innehåller de fem första elementen i value_list. Använd en loop och inte “slice”-notationen som introducerades i Laboration 1.

Anropet get_five_first([5, "hej", "hopp", "who", "are", "you"]) ska alltså returnera listan [5, "hej", "hopp", "who", "are"].

Uppgift 2.3.5 (10p)

Skriv funktionen get_nfirst(value_list, n) som tar in en lista, value_list som alltid är längre än heltalsargumentet n. Funktionen ska returnera en lista som innehåller de n första elementen i listan value_list. Du får återigen inte använda “slice” för att lösa uppgiften.

Anropet get_nfirst([5, "hej", "hopp", "who", "are", "you"], 3) ska alltså returnera listan [5, "hej", "hopp"].

Uppgift 2.3.6 (10p)

Skriv funktionen get_all_less_than(values, cutoff) som returnerar en lista med alla värden från listargumentet values som är mindre än cutoff. Alla värden i values och värdet i cutoff är flyttal.

Anropet get_all_less_than([4.5, 0.1, 40.3, 20.0], 3.1) ska alltså returnera listan [0.1].

Uppgift 2.3.7 (5p)

Skriv funktionen get_all_even(values) som returnerar en lista med alla jämna värden från listargumentet values.

Anropet get_all_even([4, 0, 3, 2]) ska alltså returnera listan [4, 0, 2].

Uppgift 2.3.8 (5p)

Skriv funktionen get_all_divisible(values, divisor) som returnerar en lista med alla värden från listargumentet values som är delbara med divisor.

Anropet get_all_divisible([4, 10, 7, 8], 4) ska alltså returnera listan [4, 8].

Uppgift 2.3.9 (5p)

Skriv funktionen multiply_for_each(values, multiplier) som ändrar och returnerar values med alla värden multiplicerade med multiplier.

OBS! I denna uppgift är det viktigt att du ändrar på listan values och inte skapar en ny lista som du lägger värdena i.

Anropet multiply_for_each([3, 7.1, 3, 1.0], 3) ska alltså ändra på listan som den får in och returnera den, dvs [9, 21.3, 9, 3.0].

Uppgift 2.3.10 (15p)

Skriv funktionen insert_at_asc_place(values, new_value) som returnerar en lista med new_value insatt i values så att listan fortfarande är ordnad i storleksordning. Listan values kommer alltid in sorterad. list.sort() ska ej användas.

Anropet insert_at_asc_place([3, 7, 8, 11], 7.9) ska alltså returnera listan [3, 7, 7.9, 8, 11].

Kuriosa Om man vill använda en mer effektiv algoritm kan man använda en så kallad binärsökning. Då undersöker man värdet i mitten av listan och kan plocka bort halva listan för varje sökning.

Uppgift 2.3.11 (10p)

Skriv funktionen sort_asc(values) som returnerar en sorterad version av listan values. Du får inte använda någon redan existerande sorteringsalgoritm.

Anropet sort_asc([3, 9, 7, 1, 11]) ska alltså returnera listan [1, 3, 7, 9, 11].

Tips Du får dock använda din egenskrivna funktion insert_at_asc_place


Sidansvarig: Johan Falkenjack
Senast uppdaterad: 2023-09-14