Räkna med programmering

{{ 'ml-heading-theory' | message }}

I Python finns ett brett utbud av matematiska funktioner. En del kan dock inte användas direkt utan måste importeras, alltså hämtas in, först. På den här sidan kommer du träna på olika sorters beräkningar, avrundningar och att importera funktioner.

import math

print(math.pi)

x = 19.7531
print(math.sqrt(x))
print(round(x,1))

en_lista = [-7, 2, 19, 3]
print(max(en_lista))
print(sum(en_lista))
print(len(en_lista))
Kan du lista ut vad kodraderna ovan gör? Ändra värdena i x och en_lista för att se hur resultatet påverkas. Vad gör tror du ettan på rad 77 gör? Vad händer om första raden tas bort?
Teori

Operatorer för heltalsdivision

I programmering är det ofta användbart att använda heltalsdivision, alltså division där man delar upp resultatet i en heltalskvot och en rest. Om man t.ex. delar 77 med 33 får man heltalskvoten 22 och resten 11 eftersom det går 22 hela 33:or i 77 och så blir 11 över.

Teori

Kvot

För att beräkna kvoten vid heltalsdivision använder man operatorn // mellan täljaren och nämnaren. Om man t.ex. skriver 32 // 5 får man resultatet 6 eftersom det finns 66 hela 55:or i 32.32.

Teori

Rest

För att beräkna resten man får vid heltalsdivision använder man modulo-operatorn. I Python skrivs den som ett procenttecken mellan täljaren och nämnaren, t.ex. 32 % 5, vilket ger resultatet 2 eftersom det blir 22 över om man delar 3232 med 5.5.
Uppgift

Skriv ett program för att beräkna heltalskvoten och resten för följande divisioner: 2312,3001103och87178291199115249. \dfrac{23}{12}, \quad \dfrac{3001}{103} \quad \text{och} \quad \dfrac{87178291199}{115249}.

Lösning

För att beräkna heltalskvoten använder vi operatorn // mellan täljaren och nämnaren, alltså 23 // 12. På samma sätt använder vi operatorn % för att beräkna resten och skriver 23 % 12. Vi lägger även till några extra utskrifter så att vi vet vad det är som skrivs ut.

print("Kvot:", 23 // 12, "Rest:", 23 % 12)

  • Visa resultat

>
Kvot: 1 Rest: 11

Genom att kopiera denna rad och byta ut värdena kan vi återanvända koden och göra samma sak för de två andra divisionerna.

print("Kvot:", 23 // 12, "Rest:", 23 % 12)
print("Kvot:", 3001 // 103, "Rest:", 3001 % 103)
print("Kvot:", 87178291199 // 115249, "Rest:", 87178291199 % 115249)

  • Visa resultat

>
Kvot: 1 Rest: 11
Kvot: 29 Rest: 14
Kvot: 756434 Rest: 29133

Visa lösning Visa lösning
Teori

Inbyggda funktioner

I Python finns många inbyggda funktioner som kan vara användbara. Dessa kan t.ex. användas för att göra olika matematiska beräkningar.

Teori

Funktioner för tal

  • abs()
    Beräknar absolutbeloppet av argumentet. Skriver man t.ex. abs(-35) beräknas -35|\text{-}35| och man får det positiva talet 35 som resultat.
  • int() och float()
    Konverterar värden till datatypen heltal respektive flyttal. Dessa kan man bland annat använda för att konvertera strängar till värden man kan räkna med. T.ex. får man heltalet 23 om man skriver int('23'). Det är viktigt att tänka på att int() struntar i eventuella decimaldelar av ett tal, så int(2.94) ger resultatet 2.
Teori

Funktioner för listor

  • sum()
    Används för att beräkna summan av ett antal värden i en lista. Exempelvis ger sum([1, 2, 3]) resultatet 6.
  • len()
    Använder man detta kommando på en lista svarar det listans längd, alltså antalet element i listan. T.ex. får man resultatet 3 om man skriver len([1, 2, 3]).
  • min() och max()
    Används för att hitta det minsta respektive största värdet i en lista. I listan [1, 2, 3] får man exempelvis ut 1 om man skriver min([1, 2, 3]) och 3 om man skriver max([1, 2, 3]).
Teori

Modul

En modul kan också kallas "bibliotek" eller "paket". Det är kod man kan läsa in i sitt program för att få tillgång till fler funktioner. I Python finns t.ex. modulen math, som innehåller matematiska funktioner, och matplotlib, med funktioner för att rita grafer och diagram. För att importera, dvs. läsa in, en modul skriver man import överst i programmet.

import math

Funktioner från modulen kan sedan användas var som helst i programmet genom att skriva modulens namn följt av en punkt och funktionens namn.

import math
print(math.sqrt(9))

  • Visa resultat

>
3.0

Teori

math - modul

Modulen math används till mer avancerade matematiska beräkningar i Python.

Teori

Kommandon i math

  • pi, e
    De matematiska konstanterna π\pi och ee.
  • sqrt()
    Funktionen x,\sqrt{x}, dvs. kvadratrotsfunktionen.
  • exp()
    Funktionen ex,e^x, dvs. konstanten ee upphöjt till något tal.
  • log()
    Funktionen ln(x),\ln(x), dvs. den naturliga logaritmen. Basen kan ändras med ett andra argument. log(100, 10) ger t.ex. tiologaritmen av 100.100.
  • radians()
    Omvandlar en vinkel från enheten grader till radianer.
  • degrees()
    Omvandlar en vinkel från enheten radianer till grader.
  • sin(), cos(), tan()
    De trigonometriska funktionerna sinus, cosinus och tangens Vinkeln måste anges i enheten radianer.
  • asin(), acos(), atan()
    Arcusfunktionerna arcussinus, arcuscosinus och arcustangens. Resultatet är en vinkel angiven i radianer.
Uppgift


I trigonometrin får man lära sig att sin(90)=1\sin(90^\circ) = 1 och att arccos(-1)=180.\arccos(\text{-}1) = 180^\circ. Pythons funktioner sin() och acos() räknar dock inte vinklar i enheten grader, utan i radianer. Det är viktigt att tänka på detta när man skriver program, så att man inte får helt fel värden.

import math
vinkel1 = 90
sinus = math.sin(vinkel1)
print(sinus)
>
0.8939966636005579
import math
cosinus = -1
vinkel2 = math.acos(cosinus)
print(vinkel2)
>
3.141592653589793

Antag att alla vinklar ska vara i grader och använd omvandlingsfunktionerna degrees() och radians() så att sinus blir 11 och vinkel2 blir 180180 i beräkningarna ovan.

Lösning

Grader och radianer är olika enheter att mäta vinklar i, på samma sätt som t.ex. ett avstånd kan mätas i både cm och tum. För att beräkningarna ska fungera som förväntat måste vi ta hänsyn till de olika enheterna. Grader omvandlas till radianer med radians(), och den första vinkeln kan därför skrivas om på det här sättet.

import math
vinkel1 = math.radians(90)
sinus = math.sin(vinkel1)
print(sinus)

  • Visa resultat

>
1.0

Nu får vi rätt sinusvärde. Den andra vinkeln att omvandla är resultatet av beräkningen math.acos(cosinus), eftersom funktionen acos() svarar med vinklar i radianer. För att omvandla radianer till grader används degrees().

import math
cosinus = -1
vinkel2 = math.degrees(math.acos(cosinus))
print(vinkel2)

  • Visa resultat

>
180.0

Visa lösning Visa lösning
Teori

round()

För att avrunda värden i Python använder man kommandot round() och skriver det tal man vill avrunda innanför parenteserna.

print(round(2.75))

  • Visa resultat

>
3

Som standard avrundas värdet till ett heltal, men genom att lägga till ett extra argument kan man välja hur man avrundar. Argumentet anger hur många steg från decimaltecknet avrundningen sker, där positiva tal anger steg till höger och negativa tal anger steg till vänster. T.ex. avrundar man till hundradelar om argumentet är 22 och till tiotal om det är -1.\text{-}1.

print(round(1786.1314, 2))
print(round(1786.1314, -1))

  • Visa resultat

>
1786.13
1790.0

På grund av hur man har valt att avrundning ska fungera i Python och hur decimaltal lagras kan man inte lita på att avrundningen exakt kommer att följa de avrundningsregler man är van vid. Oftast stämmer det, men man får t.ex. resultatet 2 om man skriver round(2.5). För att alltid avrunda uppåt eller nedåt använder man funktionen ceil respektive floor från modulen math.

import math
print(math.ceil(3.14159))
print(math.floor(2.71828))

  • Visa resultat

>
4
2

Uppgifter

Nivå 1
1.1
{{ 'ml-btn-focusmode-tooltip' | message }} settings_overscan

Skriv kod för att utföra följande beräkningar. Anta att modulen math redan är importerad.

a

Beräkna 29.2 \cdot \sqrt{9}.

b

Beräkna resten när man gör en heltalsdivision mellan 123456123456 och 75.75.

c

Avrunda 17\frac{1}{7} till 33 decimaler.

1.2
{{ 'ml-btn-focusmode-tooltip' | message }} settings_overscan

Vad gör kodraderna?

a

math.sqrt(5)

b

round(math.pi, 5)

c

math.log(sum([6, 7, 8, 9]), 10)

1.3
{{ 'ml-btn-focusmode-tooltip' | message }} settings_overscan

Skriv ett program som tar ett tal xx och skriver ut roten ur det, avrundat till en decimal.

1.4
{{ 'ml-btn-focusmode-tooltip' | message }} settings_overscan

Skriv ett program som skriver ut det största av 10x10^x och lg(x)\lg(x) för ett positivt tal x.x. Testa programmet för x=2x = 2 och x=0.1.x = 0.1.

1.5
{{ 'ml-btn-focusmode-tooltip' | message }} settings_overscan

Gert har skrivit ett program för att beräkna omkretsen av en kvadrat givet att man känner till dess area.

area = 75
sida = sqrt(area)
omkrets = 4 * sida
print(omkrets)

Hans program fungerar dock inte. Undersök varför och skriv om programmet så det fungerar.

1.6
{{ 'ml-btn-focusmode-tooltip' | message }} settings_overscan

Ett kringresande tivoli tar 2020 kr för varje åk i berg- och dalbanan. Gör ett program som beräknar och skriver ut antal gånger du kan åka genom att använda variabeln pengar, som är ett helt antal kronor. Skriv även ut hur mycket pengar som sedan finns kvar.

Nivå 2
2.1
{{ 'ml-btn-focusmode-tooltip' | message }} settings_overscan

Skriv ett program som tar en lista med ett udda antal element och skrivet ut värdet i mitten. Testa programmet på listorna [9, -38, 15, 2, -1] och ['hej', 'på', 'dig'].

2.2
{{ 'ml-btn-focusmode-tooltip' | message }} settings_overscan

Gör ett program som använder variabeln alder (ålder i antal år) och skriver ut hur många miljoner sekunder man levt, avrundat till närmsta heltal. T.ex. ska alder = 16 ge resultatet nedan.

>
Du har levt i 505 miljoner sekunder!
2.3
{{ 'ml-btn-focusmode-tooltip' | message }} settings_overscan

Skriv ett program som, givet en täljare och en nämnare, skriver ut heltalsdivisionens kvot och rest men utan att använda // eller %.

2.4
{{ 'ml-btn-focusmode-tooltip' | message }} settings_overscan

Programmet nedan är tänkt att lagra ett stort antal sekunder i variabeln n samt dela upp tiden på ett sådant sätt att man kan skriva ut hur många år, dygn, timmar, minuter och sekunder det motsvarar. Ersätt varje -tecken med antingen % eller // så att programmet fungerar som det ska.

n = 4367841237

s = n ☐ 60
m = (n ☐ 60) ☐ 60
t = (n ☐ 3600) ☐ 24
d = (n ☐ (3600*24)) ☐ 365
y = n ☐ (3600*24*365)
print(n,'sekunder är',y,'år,',d,'dygn,',t,'timmar,',m,'minuter och',s,'sekunder.')
Nivå 3
3.1
{{ 'ml-btn-focusmode-tooltip' | message }} settings_overscan

Skriv ett program som bestämmer längden på den längsta sidan i en triangel, givet koordinaterna för triangelns hörn. Använd programmet för att bestämma den längsta sidan i följande triangel.

3.2
{{ 'ml-btn-focusmode-tooltip' | message }} settings_overscan

Hannibal har hittat kod på nätet som tar ett positivt heltal x och skriver ut de n första och sista siffrorna i talet.

import math
x = 634748103
n = 3

A = x % 10**n
p = math.ceil(math.log(x, 10))
B = x // 10**(p - n)
print(A)
print(B)

  • Visa resultat

>
103
634

Han ser att koden fungerar, men förstår inte varför. Förklara för Hannibal vad som händer på raderna 5-7 och varför detta producerar de första och sista nn siffrorna.

Test
{{ 'mldesktop-selftest-notests' | message }} {{ article.displayTitle }}!
{{ tests.error }}

{{ 'ml-heading-exercise' | message }} {{ focusmode.exercise.exerciseName }}

keyboard_backspace
{{ section.title }} keyboard_backspace {{ 'ml-btn-previous' | message }} {{ 'ml-btn-previous-exercise' | message }} {{ 'ml-btn-next-exercise' | message }} keyboard_backspace {{ 'ml-btn-next-exercise' | message }}