Die Subtraktion in Python (Die Subtraktion in Python), Lektion, Seite 723879
https://www.purl.org/stefan_ram/pub/subtraktion_python (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Python-Kurs

Die Subtraktion »…-…« in Python 

Einführendes Beispiel

In Python  kann auch eine Differenz  in der gewohnten Schreibweise als Ausdruck verwendet werden.

Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
1 - 1
0
auf deutsch:
● „Eins minus Eins“

Syntax

Das folgende vereinfachte Syntaxdiagramm zeigt die bisher vorgestellten Operatoren mit Produktionsregeln, die in Reihenfolge abnehmender Priorität angeordnet sind.

Syntaxdiagramm (vereinfacht)

Ausdruck

.---------.
--->| Literal |--->
'---------'

Ausdruck

.-. .----------. .-.
--->( ( )--->| Ausdruck |--->( ) )--->
'-' '----------' '-'

Ausdruck

.----------. .--. .----------.
--->| Ausdruck |--->( ** )--->| Ausdruck |--->
'----------' '--' '----------'

Ausdruck

.-. .----------.
---.--->( + )---.--->| Ausdruck |--->
| '-' | '----------'
| .-. |
'--->( - )---'
'-'

Ausdruck

.----------. .-. .----------.
--->| Ausdruck |---.--->( * )---.--->| Ausdruck |--->
'----------' | '-' | '----------'
| .-. |
'--->( / )---'
'-'

Ausdruck

.----------. .-. .----------.
--->| Ausdruck |---.--->( + )---.--->| Ausdruck |--->
'----------' | '-' | '----------'
| .-. |
'--->( - )---'
'-'

Syntax, Typanforderungen, Typsemantik, Assoziativität und Priorität sind bei diesem binären Operator wie bei der Addition, nur daß hier keine Zeichenketten  erlaubt sind und man den linken Operanden als Minuenden  und den rechten als Subtrahenden  bezeichnet. Die Semantik (der Wert) ist hingegen die der Subtraktion (Differenz).

Man beachte, daß wir jetzt zwischen einem unären und einem binären Minus-Operator unterscheiden müssen.

Assoziativitätsrichtung

Wir haben die Assoziativitätsrichung von Operatoren bisher immer den Syntaxdiagrammen entnommen (bei der Beantwortung von Übungsfragen). Diese Vorgehensweise liefert in Zweifelsfällen auch die genauesten Antworten.

Man kann die Assoziativitätsrichung aber auch als extra Information festhalten: Bis auf den rechtsassoziativen  Potenzoperator »**« sind alle bisher vorgestellten binären Operatoren linksassoziativ. Das heißt:

Die Assoziativität kann man bei der Subtraktion deutlicher erkennen als bei der Addition, weil das Ergebnis einer Abfolge zweier Subtraktionen von der Art der Zusammenfassung von Operanden abhängt.

Auswertung
8 - 2 - 3
3

Addition und Subtraktionen haben die gleiche  Priorität. Daher wird bei einer Kombination beider Operatoren, in der sie einen Operanden teilen, ebenfalls gemäß der Assoziativität dieser beiden Operatoren von links nach rechts zusammengefaßt.

Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
8 - 4 + 4
8

Priorität

Wir haben die Priorität von Operatoren bisher immer den Syntaxdiagrammen entnommen (bei der Beantwortung von Übungsfragen). Diese Vorgehensweise liefert in Zweifelsfällen auch die genauesten Antworten.

Man kann die Prioriät von Operatoren aber auch als extra Information festhalten. Die bisher vorgestellten Operatoren haben Prioritäten gemäß der folgenden Tabelle: Ein weiter oben stehender Operator hat eine höhere Priorität.

Eigenschaften

S P A (S = Stelligkeit ("Aritaet"), P = Position, A = Assoziativitaet)

() 1 Z Eingeklammerter Ausdruck
** 2 I R Potenzieren
+ - 1 P Unaere vorangestellte Operatoren (Vorzeichen)
* / 2 I L "Punktrechnung": Multiplikation, Division
+ - 2 I L "Strichrechnung": Addition, Subtraktion

Steht ein Operand zwischen Operatoren unterschiedlicher  Priorität, so gehört er zu dem Operator mit der höheren  Priorität.

Steht ein Operand zwischen Operatoren gleicher  Priorität, so haben beiden Operatoren die gleiche Assoziativitätsrichtung, welche dann die Interpretation des Ausdrucks festlegt (siehe oben).

Man sagt ja auch: „Punktrechnung geht vor Strichrechnung.“ – „Punktrechnung“ umfaßt die Operatoren mit Punkten (die Multiplikation ‹ · › und die Division ‹ : ›) und „Strichrechnung“ die Operatoren mit Strichen (die Addition ‹ + › und die Subtraktion ‹  ›).

In »3 + 8./2« ist die »8.« also ein Operand der Division  und nicht der Addition, da die Division höhere Priorität  als die Addition hat.

Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
3 + 8/2
7.0

Um eine spezielle gewünschte Zusammenfassung  zu erreichen, können Ausdruckklammern  verwendet werden.

Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
( 2 + 4 )/2
3.0

Vorzeichen  haben eine höhere Priorität als die Addition:

Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
-3 + 9
6

Soll sich ein Vorzeichen auf eine ganze Summe beziehen, so kann die Summe eingeklammert werden.

Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
-( 3 + 9 )
-12

In der folgenden Tabelle haben die Operatoren eine höhere Priorität, die weiter oben stehen.

Formatierung

Leerzeichen können verwendet werden, um Ausdrücke übersichtlich zu schreiben.

Beispiele

2+4/2

2 + 4/2

2 + 4 / 2

Beispiele

(2+4)/2

( 2 + 4 )/ 2

( 2 + 4 ) / 2

Häufig wird Leerraum um binäre  Operatoren herum eingesetzt, aber nicht zwischen unären  Operatoren und ihren Operanden.

Zur Verdeutlichung der Priorität kann auch ein Quotient mit Numeralia als Operanden ohne Leerzeichen geschrieben werden, wenn er in einem Ausdruck als Operand einer Addition vorkommt.

Auszug aus PEP 8 (Stand 2018) (gekürzt)
If operators with different priorities are used, consider adding whitespace around the operators with the lowest priority(ies). Use your own judgment; however, never use more than one space, and always have the same amount of whitespace on both sides of a binary operator.
Yes:

i + 1

x*2 - 1

x*x + y*y

(a+b) * (a-b)

No:

i+1

x * 2 - 1

x * x + y * y

(a + b) * (a - b)

Auswertung des Operatorausdrucks »3 + 8/2« (Semantik) ⃗

Wir behandeln nun noch die Auswertung des Ausdrucks »3 + 8/2«.

Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
3 + 8/2

Bei der Auswertung dieses Ausdrucks werden zunächst die beiden Operanden »3« und »8/2« ausgewertet. Die Auswertung von »3« ergibt «3» . Die Auswertung von »8/2« ist selber wieder eine Auswertung eines Operatorausdrucks!

Auswertung des Operatorausdrucks »8/2«

Zunächst werden die Operanden und der Operator zum internen Ausdruck „«8» ‹/› «2»“ internalisiert.

Solch eine Kombination einer Operation mit internen Werten für alle Operandenstellen der Operation wird auch als Inkarnation  bezeichnet.

Nur Inkarnationen von Operatoren können sofort ausgewertet werden.

Erste Inkarnation
«8» ‹/› «2»

Die Auswertung dieser Inkarnation ergibt den internen Wert «4.0».

Ausführung der zweiten Inkarnation

Nachdem nun die Operandenwerte «3» und «4.0» für die Addition ermittelt wurden, kann die Addition [+] als „«3» ‹/› «4.0»“ inkarniert werden.

Zweite Inkarnation
«3» ‹/› «4.0»

Die Ausführung der zweiten und letzten Inkarnation ergibt dann das Endergebnis «7.0».

Man beachte: Die Division wurde zuerst  berechnet, obwohl sie im Quelltext auf die Addition folgt.

Die Informationsabhängigkeit  legt fest, daß die Division zuerst ausgeführt werden muß, denn das Ergebnis der Division wird zur Ausführung der Addition benötigt.

Übungsaufgaben *

/   Rechnungen *

Berechnen Sie mit Python, wieviel Millimeter 20 Zentimeter sind (mathematisches Ergebnis: ‹ 200 ›).

Berechnen Sie mit Python, wieviel Euro 25 Cent sind (mathematisches Ergebnis: ‹ 0,25 ›).

Berechnen Sie mit Python, den Rechnungsbetrag mit Mehrwertsteuer bei einem Warenwert von 20 Euro.

/   Rechnungen (1) *

Ein Läufer benötigt 50 Minuten und 20 Sekunden für eine Strecke von 12 Kilometern. Berechnen Sie seine durchschnittliche Geschwindigkeit in km/h und m/s.

Zusatzaufgaben *

/   Zusatzaufgabe *

Die Kreiszahl ‹ π › ist gleich ‹ 4·( 1 − 1/3 + 1/5 − 1/7 + 1/9 − 1/11 + 1/13 − 1/15 + … ) ›.

Schreiben Sie ein Programm, welches unter Verwendung dieser Gleichheit eine Näherung für ‹ π › ausgibt. Dabei dürfen nur die bisher im Kurs vorgestellten Sprachmittel verwendet werden.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723879 stefan_ram:723879 Die Subtraktion in Python Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723879, slrprddef723879, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/subtraktion_python