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!
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 strängar 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: 2024-01-10