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. Försök dock att lösa alla uppgifter då inte alla fel upptäcks av rättningsskriptet men om ni har lite marginal kan ni kanske bli godkända även om assistenten som rättar hittar något sådant fel.
Uppgifter
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: 0001-01-01