K103: Grundlegende Rechenoperationen

In diesem Blog lernst Du die grundlegenden Rechenoperationen in Python kennen.

Inhaltsverzeichnis

Dieser Blog wird vom IAIP gratis zur Verfügung gestellt. Der Blog ist ein  Bestandteil des Kurses K103 «Programmieren mit Turtle Graphics» und gehört zur Lektion 4, Themenblock 1 (L4T1).

Der Kurs führt dich durch die einzelnen Blogs, enthält Zusatzmaterialien, Videos, viele Aufgaben mit Lösungen und Quizze zur Lernkontrolle. Der Kurs hat eine Kursgebühr von CHF 50.- Mit dem Einschreiben zum Kurs hilfst du mit, dass solche Blogs auch zukünftig noch gratis zur Verfügung gestellt werden können.

Rechenoperationen

Um das zu schaffen, was gewisse Computer in einer einzelnen Sekunde schaffen, müsste jeder einzelne Mensch gleichzeitig rund 200 Zahlen addieren. Denn es gibt Computer, welche in einer Sekunde über 1’000’000’000’000 (1 Billion) Zahlen zusammenzählen.

Kurzum: Computer sind Rechenmaschinen. Sie können unglaublich schnell rechnen. Und damit wollen wir uns nun beschäftigen.

Rechnen beginnt bei den vier Grundrechenarten der Mathematik (Addition, Subtraktion, Multiplikation, Division). Nachfolgend findest du eine tabellarische Übersicht der Operatoren für die Grundrechenarten der Mathematik  Diese bilden gewissermassen die Basis für das Rechnen mit Python.

Die Nomenklatur, also die verwendeten Symbole, sind etwas anders wie in der Mathematik üblich. Man hat sich aber schnell daran gewöhnt – und sie sind in allen berühmteren Programmiersprachen gleich.

Merke dir: 
das «Mal» – Zeichen ist ein * und das «Geteilt durch» – Zeichen ist ein /

SymbolBeschreibungBeispielMathe
+Addition 
(Plus-Rechnen)
3 + 4  = 73 + 4  = 7
Subtraktion 
(Minus-Rechnen)
10 – 2 = 810 – 2 = 8
*Multiplikation 
(Mal-Rechnen)
10 * 2 = 2010 · 2 = 20
/Division 
(Geteilt durch-Rechnen)
8 / 2 = 48 : 2 = 4
Beim Programmieren kannst du nun anstelle einzelner Zahlen auch ganze Ausdrücke (Additionen, Subtraktionen, etc.) verwenden. Python rechnet diese dann immer gleich automatisch für dich aus.
from turtle import *

forward(50 + 70)   # geht 120 geradeaus
left(360/4)        # dreht um 90 Grad nach links
forward(2*50)      # geht 100 geradeaus
# .....

Hinweis für Fortgeschrittene:

Daneben gibt es noch einige weitere Operatoren:

SymbolBeschreibungBeispielMathe
%Modulo
(Rest einer Division)
9 % 2 = 19 : 2 = 4
Rest 1
//Ganzzahl einer Division
(Pendent zu Modulo)
9 // 2 = 4siehe %
**Potenzrechnen
(Hochrechnen)
2 ** 3 = 823 = 8

Aneinandereihen von Operatoren

Man kann natürlich auch mehrere Operationen hintereinander ausführen. Es gelten dieselben Regeln wie sonst in der Mathematik. Insbesondere gilt die «Punkt vor Strich Regel», d.h. sofern keine Klammern gesetzt sind, haben Multiplikationen und Divisionen immer den Vorrang vor Additionen und Subtraktionen.

from turtle import *

forward(2*50 + 70)   # geht 170 geradeaus
forward(2*(50+70))   # geht 240 geradeaus

# .....

Im Zweifelsfall empfiehlt es sich aber, lieber einmal eine Klammer zu viel zu setzen. Klammern setzten ist nämlich kein Problem in Python.

Hinweis für Fortgeschrittene:

In Python sind die einzelnen Operatoren wie üblich sog. linksassoziative Operatoren. D.h. bei Aneinanderreihung desselben Operators wird von links nach rechts ausgewertet.

  • 3 · 4 · 5  wird berechnet als (3 · 4) · 5
  • 10 – 3 – 2 wird berechnet als: (10 – 3) – 2

Der Potenzoperator ist ein rechtsassoziativer Operator. Hier wird der Ausdruck von rechts nach links ausgewertet. Das ist aber nicht aussergewöhnlich. In der Mathematik ist die Rechtsassoziativität bei der Potenzierung üblich.

Ergänzende Funktionen

Mit den gezeigten Operatoren lassen sich die Grundrechenarten der Mathematik ausführen. Manchmal braucht es aber noch ein bisschen mehr. Deshalb enthält Python schon in der Standardversion eine Reihe ergänzender mathematischer Funktionen.

Besonders hervorzuheben sind:

FunktionBeschreibung
abs()absoluter Betrag (d.h. Komma fällt weg)
max()grösster Wert aus einer Liste von Werten
min()kleinster Wert aus einer Liste von Werten
round()Runden einer Zahl auf eine bestimmte Anzahl Stellen
int()Umwandeln einer Kommazahl in eine Ganzzahl

Um auszutesten, wie die Funktionen gehen, kann man die einzelnen Anweisungen auch einfach in der Shell eingeben. Die Shell führt Python Anweisungen aus und ist in diesem Sinne auch gleich ein kleiner Taschenrechner.

Bei der Funktion round() benötigt man einen ergänzenden Parameter, welcher die Anzahl Kommastellen angibt, auf welche die Zahl gerundet werden soll. Der Befehl round(Zahl, 3) rundet somit die Zahl auf 3 Kommastellen. Lässt man diesen Parameter weg, dann rundet die Funktion einfach automatisch auf 0 Stellen.

Hinweis für Fortgeschrittene:

Eine Alternative zum Herstellen einer Ganzzahl bietet die Funktion int(). Diese Funktion rundet streng genommen nicht, sondern wandelt die Kommazahl (Gleitkommazahl vom Datentyp float) in eine Ganzzahl (Datentyp int) um. Die Funktion round() hat die Aufgabe zu runden. Ihre Aufgabe ist es nicht, etwas umzuwandeln. Sie liefert in jedem Fall wieder eine (Gleit-) Kommazahl, selbst wenn man auf 0 Kommastellen runden soll. Ersichtlich ist dies in obiger Ausgabe (3.45 auf 0 Stellen gerundet ergibt 3.0). Im Unterschied hierzu wandelt die Funktion int() eine Kommazahl zur Ganzzahl um. Sie kümmert sich nicht um Rundungsregeln, sondern schneidet einfach alles hinter dem Komma ab.

Sind zwei mögliche Rundungsergebnisse gleich weit entfernt, so rundet die Funktion round() von Null weg.

  • round(2.5) ergibt 3.0
    Die Werte 3 und 2 sind je 0.5 von 2.5 entfernt.
  • round(2.4) ergibt 2.0
    Der Wert 2 ist nur 0.4 entfernt, gegenüber 0.6 für 3.
  • round(-1.5) ergibt -2.0
    Die Werte -2 und -1 sind je 0.5 von -1.5 entfernt.
  • round(-1.4) ergibt -1.0
    Der Wert -1 ist nur 0.4 entfernt, gegenüber 0.6 für -2.

Mathematikbibliotheken

Python stellte darüber hinaus eine Menge an Standardbibliotheken zur Verfügung, welche nützliche Funktionen enthalten. Rund um das Thema «Rechnen mit Python» zählen dazu vor allem:

  • Modul math
  • Modul statistics
  • Modul random

Eine Vorstellung dieser Bibliotheken sprengt den Rahmen des Kurses. Du findest die Bibliotheken bei Bedarf dokumentiert unter:

  • math: https://docs.python.org/3/library/math.html
  • statistics: https://docs.python.org/3/library/statistics.html
  • random: https://docs.python.org/3/library/random.html

Damit du die Befehle dieser Standardbibliotheken dann auch nutzen kannst, muss man die Bibliotheken am Anfang des Programms importieren. Genau so, wie wir auch die Befehle von Turtle Graphics importiert haben. Hierzu ein kleines Beispiel:

from turtle import *
from random import *

forward(randint(100,200))

exitonclick()

In Zeile 2 wird die Bibliothek mit dem Namen random importiert. Diese Bibliothek enthält Anweisungen zum Erzeugen einer Zufallszahl. Eine dieser Anweisungen ist randint(). Sie hat folgende Syntax.

random.randint(a, b)

randint() erzeugt eine Zufallszahl zwischen (und inklusive) den in der Klammer angegebenen Ganzzahlen. randint(100, 200) erzeugt somit eine Zufallszahl im Bereich 100, 101, 102, …, 199, 200. Du wirst bei den Aufgaben der kommenden Lektionen oftmals mit Zufallszahlen arbeiten, weshalb wir hier diese Anweisung speziell erwähnt haben. Allerdings werden wir die Bibliothek jeweils leicht anders importieren und schreiben import random anstelle von from random import 
from turtle import *
import random

forward(random.randint(100,200))

exitonclick()

Diese leicht veränderte Importanweisung führt dann dazu, dass wir der Anweisung randint() jeweils noch den Namen der Bibliothek voranhängen müssen. Siehe Zeile 4 im Programm.

Hinweis für Fortgeschrittene:

Nachfolgend die wichtigsten Funktionen und Konstanten in der Übersicht.

Trigonometrie (Bibliothek: math)

piKonstantepi3.1415926
sin()Sinussin(pi/2)1.0
cos()Cosinuscos(pi/2)0
tan()Tangenstan(pi)0
asin()Arkussinus
(Umkehrfunktion sin)
asin(1)1.57079..
acos()Arkuscosinus (Umkehrfunktion cos)acos(0)1.57079…
atan()Arkustangens (Umkehrfunktion tan)atan(0)0
radians()Umwandlung von Grad in Bogenmass (Radian)radians(60)1.04719755..
degrees()Umwandlung vom Bogenmass in Graddegrees(0.785)44.97718..

Achtung: Winkelangaben sind hier jeweils im Bogenmass. Zur Berechnung von sin(60°) nimmt man sin(radians(60))

Exponential und Logarithmusfunktionen (Bibliothek: math)

eEulersche Zahl (Konstante)e2.71828..
exp()Exponentialfunktion ex exp(2)7.389…
log()Logarithmuslog(7.4)2.00148..
pow()Hochrechnen (Power)pow(2,3)8
log10()Logarithmus zur Basis 10log10(100)2
sqrt()Wurzelsqrt(16)4

Lage- & Streuungsparameter (Bibliothek: statistics)

mean()Berechnung des (arith.) Mittelwertsmean([2,2,4,9])4.25
median()Berechnung des Mediansmedian([2,2,4,9])3
mode()Berechnen des Modusmode([2,2,4,9])2
stdev()Ermitteln der Standardabweichungstdev([2,2,4,9])3.3040..
variance()Ermitteln der Varianzvariance([2,2,4,9])10.9166…

Generierung von Zufallszahlen (Bibliothek: random)

randint(a, b)Zufallszahl a <= Zahl <= b als Ganzzahl (*)
randint(3,40) -> 13 (Ganzzahl zwischen 3 bis und mit 40 )
randrange(a, b, s)Zufallszahl a <= Zahl < b mit Schritt s als Ganzzahl
randrange(0, 101, 2) -> 26 (Gerade Ganzzahl zwischen 0 bis und mit 100)
random()Zufallszahl 0 <= Zahl < 1 als Gleitkommazahl
random()  -> 3.18001… (Gleitkommazahl zwischen 0 und 1, aber ohne 1.
uniform(a, b)Zufallszahl  a <= Zahl <= b als Gleitkommazahl (*)
uniform(2.5, 10.0)  -> 3.18001… (Gleitkomazahl zwischen 0 und 20)

   (*) Beinhaltet obere Grenze

Zufällige Auswahl bei Listen (Bibliothek: random)

choice(Liste)Einzelnes Element aus einer List
sample(Liste, Anzahl)Mehrere Element aus einer List (ohne Replacement)
shuffle(Liste)Elemente der Liste mischen

Beispiele:
Liste = [«BMW», «Audi», «Volvo», ”Porsche”, “Ferrari”, “Renault”]

choice(Liste)                   BMW

sample(Liste,2)              Volvo, Audi

shuffle (Liste)                  [«Volvo», “Renault”, “Ferrari”, «BMW», «Audi», ”Porsche”]

Initialisierung des Generators (Seed)

seed(a)Initialisieren mit Zahl a