Python som lommeregner

Til underviseren

Denne del af kurset er ikke bygget op med øvelser, men er rettet mod underviseren. Dette skyldes at det er ret omstændigt at skulle lave et undervisningsmateriale, der giver eleven indblik i matematikkens regler.

Dette afsnit om Python som lommeregner er altså designet til at give dig som underviser et indblik i syntaksen.

Som inspiration kan nævnes, at personligt anvender Python til beregninger og funktionsplot, da det det altid er ved hånden

De 4 regningsarter

For at bruge de fire almindelige regningsarter anvender vi tegnene: +, -, * og /

Eksempler

>>> 5+4
9
>>> 6-2
4
>>> 5*2
10
>>> 6/3
2.0

Læg mærke til at Python svarer tilbage med et decimaltal når man dividerer, og at der anvendes punktum til at adskille heltallet fra decimalen. Står der kun et 0 efter punktummet betyder det at tallet er et heltal

Grundlæggende viden

I/O - input/output

Pythons kommandolinie består af input og output. Når kommandofortolkeren starter op angiver man sit input ved de 3 "større end" tegn (>>>). Python viser output (resultatet) i linien under.

>>> 7 ← input
7 ← output

Decimaler

I Python anvender man . (punktum) som seperator mellem heltallet og decimalen. Det skyldes at , fungerer som seperator mellem udtryk. Dvs. 3.14, 2.75 osv.

Er decimalværdien .0 betyder det, at det er et heltal.

Python anvender enten heltal (intergers) eller float (decimaltal).

Så længe vi anvender +, - og *, så vil output være i heltal, når vi anvender heltal som input.

Ved division vil Python altid konvertere tallene til float, hvilker er årsagen til det lidt kryptiske .0 når resultatet er et heltal.

Genbrug resultat

Vi kan indsætte det forrige output (resultat) ved hjælp af _ (underscore ). Underscore kommer ved at anvende tastekombinationen Shift + -.

>>> 7
7
>>> _+2
9

Paranteser

Paranteser anvendes efter matematikkens regler:

$$ \frac{ 1 }{ 2*8 } $$
>>> 1/(2*8)
0.0625

Negative værdier

Negative værdier angives ved at sætte - foran værdien. Det skal ikke i parantes selvom det er første værdi i regnestykket (som ved Texas lommeregneren)

>>> -2*7
-14
>>> 7/-4
-1.75

Absolutte tal

Hvis man vil sikre sig et positivt resultat anvendes abs()

>>> abs(-7)
7

Variabler

En af de smarte ting man kan gøre er at bruge variabler. Forestil dig, at du skal udregne arealet af et rektangel, hvor formlen er \( højde \cdot bredde \).

Her kan du vælge at indtaste \( højde \) og \( bredde \) som variabler på følgende måde og udregne arealet:

>>> højde = 3
>>> bredde = 5
>>> højde * bredde
15

Det kan være rigtigt smart, hvis man skal udregne en masse regnestykker hvor noget bliver ved med at være ens. Hvis vi senere skal udregne et rektangel, hvor højden er den sammen, men bredden er 7, skal vi kun ændre variablen for bredden. Det gør vi ved at indtaste en ny bredde (ændre variablen)

>>> bredde = 7
>>> højde * bredde
21

Kan man ikke huske variablen, så finder man værdien ved at skrive den, f.eks:

>>> højde
3
>>> bredde
7

Variabler kan være beregnet både ved hjælp af værdier og ved hjælp af variabler, f.eks:

>>> areal = bredde*højde
>>> areal
21

pi

En variabel vi anvender ofte er pi (_). Den variabel får vi adgang til igennem funktionen math, som først skal importeres.

Det gør vi på følgende måde:

>>> from math import pi

Herefter kan vi vise hvad _ er og regne med det:

>>> from math import pi
>>> pi
3.141592653589793
>>> 3*pi
9.42477796076938

Brøker

Der er to forskellige måder vi kan regne med brøker.

  1. Udregning til værdi i decimaltal
  2. Udregning til værdi med brøker (eksakt)

Resultat i decimaltal

Dette er den letteste måde. Her regner vi bare brøkerne somom de var divisionsstykker. Lad os kigge på nogle eksempler:

  1. \( \frac 3 4 \)
  2. \( \frac 3 4 + 4 \)
  3. \( \frac 3 4 + \frac 4 5 \)
  4. \( \frac 2 3 \cdot \frac 3 4 \)
  5. \( 2\frac 1 2 + \frac 3 4 \)
>>>3/4
0.75	
>>> 3/4 + 4
4.75
>>> 3/4 + 4/5
1.55
>>> 2/3*3/4
0.5
>>> (2+1/2)+3/4
3.25

VIGTIGT!: Læg mærke til, at jeg sætter den blandede brøk i en parantes, før jeg regner videre med den

Resultat i brøk

Python kan også regne med brøker, men det kræver at vi importere funktionen. Man importere brøkfunktionen ved at skrive:

	>>> from fractions import Fraction

Funktionen hedder Fractions(a,b)), hvor a er tælleren og b er nævneren.

Brøken \( \frac 3 7 \) bliver altså til: Fractions(3,7)

Her er vist hvordan vi udregner regnestykkerne ovenfor:

>>> from fractions import Fraction
>>> Fraction(3,4)
Fraction(3, 4)
>>> Fraction(3,4) + 4
Fraction(19, 4)
>>> Fraction(3,4)+Fraction(4,5)
Fraction(31, 20)
>>> Fraction(2,3)*Fraction(3,4)
Fraction(1, 2)
>>> (2+Fraction(1,2))+Fraction(3,4)
Fraction(13, 4)

Læg mærke til at jeg stadig skal samle den blandende brøk i en parantes.

uægte brøk til blandet brøk

For at finde heltalsdelen og restdelen i et divisionsstykke anvendes funktionerne floor division og modulus:

Funktion tegn Beskrivelse
floor division // Finder heltallet efter division
modulus % Finder restproduktet

Lad os kigge på sidste resultat ovenfor: Fraction(13/4), hvilket er brøken \( \frac {13} {4} \). Herunder udregner jeg først heltallet, og derefter restproduktet.

>>> 13//4
3
>>> 13%4
1

\( \frac{ 13 }{ 4 } \) kan altså omskrives til \( 3 \frac 1 4 \), hvor 3 er heltallet og 1 er restproduktet (tælleren). Nævneren er den oprindelige nævner.

Tilnærmet brøk

Forestil dig, at du gerne vil have et tal omskrivet til en brøk. Det kan f.eks. være \( 0.125 \).

Den hurtige ville være bare at omskrive det til tusindedele, altså: \( \frac{ 125 }{ 1000 } \)

Men hvad hvis den brøk kan forkortes til noget smartere? Det kan vi undersøge med Python.

>>>from fractions import Fraction
>>> Fraction(0.125)
Fraction(1, 8)

\( 0.125 \) kan altså omskrives til \( \frac{ 1 }{ 8 } \)

Potens og rødder

Potenser

Potenser kan regnes ud på 2 måder. For potenstallet \( a^b \) kan man altså sige:

  • \( pow(a,b) \) Min anbefaling
  • \( a**b \)
>>> pow(8,2)
64
>>> 8**2
64

Rødder

For at regne med rødder skal man bruge følgende omskrivning:

$$ \sqrt[b]{a} = a^{\frac{ 1 }{ b }}$$

Dvs. at \( \sqrt[3]{27} \) bliver til:

>>> pow(27,1/3)
3.0
>>> 27**(1/3)
3.0

Læg mærke til, at \( \frac{ 1 }{ 3 } \) skal være i parantes, hvis man anvender ** metoden. Ellers vil Python fortolke regnestykket som \( \frac{ 27^1 }{ 3 } = 9\)

>>> 27**1/3
9.0

Den sikre metode er pow(a,b))

Afrunding

Man afrunder tal ved hjælp af funktionen round(a,b), hvor a er tallet og b er antallet af decimaler. det gøres på følgende måde:

>>> from math import pi
>>> pi
3.141592653589793
>>> round(pi,2)
3.14
>>> round(pi,4)
3.1416

afrunding til nærmeste hele tal

Man kan også runde op og ned til nærmeste hele tal. Ligesom pi ligger disse i math-modulet. Det gøres ved hjælp af:

  • ceil() - op til nærmeste hele tal
  • floor() - ned til nærmeste hele tal

Herunder laver jeg afrundinger af pi.

>>> from math import pi, ceil, floor
>>> pi
3.141592653589793
>>> ceil(pi)
4
>>> floor(pi)
3

Læg mærke til at jeg kan importere flere funktioner fra samme pakke ved at adskille dem med , (komma))

Trigonometri

Her støder vi på noget, som i folkeskolesammenhæng er lidt bøvlet. Det skyldes at Python regner med radianer og ikke grader. Så for at kunne anvende Pythons geometrifunktioner skal vi først konvertere grader til radianer.

Python bliver brugt til avanceret matematik, og der anvender man radianer hvor cirklens omkredes er lig med \( 2 \pi \) og ikke 360°.

Her vil vi også gøre det lidt anderledes, og så importere hele math modulet, og så kalde funktionerne.

Hvorfor ikke importere direkte

Ovenfor har vi importeret pi, ceil, floor direkte fra math.

Vi kunne også sagtens gøre det samme her, det bliver bare hurtigt uoverskueligt, da der er en del funktioner (8 i alt) der skal importeres til trigonometri, nemlig:

  • cos() og acos()
  • sin() og asin()
  • tan() og atan()
  • degrees() - fra radianer til grader
  • radians() - fra grader til radianer

Det ville give en sætning der lød:

		from math import cos, acos, sin, asin, tan, atan, degrees, radians
	

Når vi har importeret math er funktionerne

Importer math

import math

Grad til radian

Grad til radian Radian til grad
\( math.radians() \) \( math.degrees() \)

Eksempel: konverter 90° og 45°

>>> math.radians(90)
1.5707963267948966
>>> math.radians(45)
0.7853981633974483

Eksempel: konverter 0.45 rad og 0.789 rad til grader

>>> math.degrees(0.45)
25.783100780887047
>>> math.degrees(0.789)
45.206370035821955

trigonometriske funktioner

funktion Python funktion Python
\( sin() \) \( math.sin() \) \( sin()^{-1} \) \( math.asin() \)
\( cos() \) \( math.cos() \) \( cos()^{-1} \) \( math.acos() \)
\( tan() \) \( math.tan() \) \( tan()^{-1} \) \( math.atan() \)

I praksis

I en retvinklet trekant gælder følgende:

_

Vi prøver at beregne vinkel a en 3-4-5 trekant (phytagoræsik triple), altså hvor:

  • a = 3
  • b = 4
  • c = 5

Ved hjælp af sinus

>>> import math
>>> math.asin(3/5) ← beregnet ved hjælp af asin
0.6435011087932844 ← resultat i radianer
>>> math.degrees(_)← omdanner radianer til grader ( _ henter forrige output)
36.86989764584402 ← resultat i radianer

Ved hjælp af cosinus

>>> math.acos(4/5)
0.6435011087932843
>>> math.degrees(_)
36.86989764584401

Ved hjælp af tangens

>>> math.atan(3/4)
0.6435011087932844
>>> math.degrees(_)
36.86989764584402

Vinkel A er altså 36,9°

En pædagogisk vinkel

En af de ting der er svært for nogle elever er at forstå hvordan man anvender formlerne, men ved hjælp af Python kan man læse metodikken, mens man udregner:

  1. find konstanterne a,b,c
  2. Find ud af hvad sinus-, cosinus- eller tangensværdien er
  3. find længden af vinkelbuen ved hjælp af den inverse funktion (asin, acos, atan)
>>> import math
>>> a = 3
>>> b = 4
>>> c = 5
>>> sin_A = a/c
>>> vinkel_rad = math.asin(sin_A)
>>> vinkel_grad = math.degrees(vinkel_rad)
>>> vinkel_grad
36.86989764584402
>>> round(_,2)
36.87
Hvad der programmeres Forklaring
>>> a = 3
>>> b = 4
>>> c = 5
Variabler sættes
>>> sin_A = a/c Beregn værdien af sin(A)
>>> vinkel_rad = math.asin(sin_A) Find længden af vinkelbuen i radianer
>>> vinkel_grad = math.degrees(vinkel_rad) Konverter radianer til grader
>>> vinkel_grad
36.86989764584402
Udskriv vinklen
>>> round(_,2)
36.87
Forkort den til 2 decimaler