Verschachtelungen in Python (Verschachtelungen in Python), Spiel, Seite 724517
https://www.purl.org/stefan_ram/pub/verschachtelung_python (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Python-Kurs

Verschachtelungen in Python

Das bisherige Syntaxdiagram, demzufolge beide Operanden einer Potenzierung stets Literale sein müssen, war vereinfacht.

Tatsächlich, darf der rechte Operand  auch wieder eine Potenz sein.

Syntaxdiagramm

Potenz
.---------. .--. .---------.
--->| Literal |--->( ** )--->| Literal |--->
'---------' '--' '---------'

'·. |
'·. |
'·. |
'·. |
'·. |
'·. |
'·. |
Potenz
.---------. .--. .---------.
--->| Literal |--->( ** )--->| Potenz |--->
'---------' '--' '---------'

Das Potenzieren ist rechtsassoziativ.

Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
2 ** 2 ** 3
256

Ein Operand  kann nun als der Teil eines Operatorausdrucks definiert werden, der einem Nichtterminalsymbol  für einen Ausdruck im Syntaxdiagramm eines Operators entspricht.

Klammern

Tatsächlich ist es in einer Potenz auch erlaubt Primärausdruck an Stelle von Literalen zu verwenden.

Dadurch sind Ausdrücke wie »(2**3)**2« erlaubt.

Ein Literal als Operand kann immer durch einen Klammerausdruck ersetzt werden, der dann weiterhin ein Operand ist.

»8**2« → »(2**3)**2«

Wird in »8**2« die »8« aber durch »2**3« ohne Klammern  ersetzt, so ist »2**3« in »2**3**2« kein Operand  mehr.

»8**2« ↛ »2 ** 3**2« = »2 ** (3**2)«

Syntaxdiagramm

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

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

Potenz
.-----------------. .--. .-----------------.
--->| Primaerausdruck |--->( ** )--->| Primaerausdruck |--->
'-----------------' '--' '-----------------'

.-----------------. .--. .---------.
--->| Primaerausdruck |--->( ** )--->| Potenz |--->
'-----------------' '--' '---------'

Ausdruck

.-----------------.
--->| Primaerausdruck |--->
'-----------------'

.--------.
--->| Potenz |--->
'--------'

Vereinfachte Syntaxdiagramme

Das oben dargestellte Syntaxdiagramm gibt die Regelung der Assoziativitätsrichtung  des Potenzierens an, indem eine weitere Potenz nur auf der rechten Seite  des Operators »**« zulässig ist.

Solche detaillierten Syntaxdiagramme können aber eine Überforderung für Anfänger darstellen.

Deswegen werden wie im weiteren Verlauf des Kurses oft vereinfachte Syntaxdiagramme  verwenden, die nicht zwischen verschiedenen Arten von Ausdrücken unterscheiden.

Syntaxdiagramm (vereinfacht)

Ausdruck (Potenz)

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

Bei Verwendung solcher vereinfachter Syntaxdiagramme müssen dann noch zusätzlich  zum Syntaxdiagramm Regeln, wie die zur Assoziativitätsrichtung von Operatoren angegeben werden.

Regel
Der Potenzoperator »**« ist rechtsassoziativ.

Anmerkungen zum Potenzieren ⃗

Python  ist in der Lage, auch große ganzzahlige  Werte genau und schnell zu berechnen.

Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
4 ** 4 ** 4
13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096

Wenn man jedoch eine Berechnung verlangt, deren Ergebnisse extrem groß sind, kann die Berechnung so lange dauern (oder so viel Speicherplatz verlangen), daß sie praktisch nicht mehr durchführbar ist. (Die Berechnung kann unter manchen Umgebungen mit Strg-C abgebrochen werden.)

Protokoll
3 ** 3 ** 3 ** 3

Eine float-Potenzierung hat nur begrenzte Stellenzahl und Zahlengröße und kommt daher gegebenenfalls schnell entweder zu einem näherungsweisen Ergebnis oder einer Fehlermeldung.

Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
4 ** 4 ** 4.
1.3407807929942597e+154
Protokoll (gekürzt und übersetzt)
3 ** 3 ** 3 ** 3.
UeberlaufFehler: (34, 'Ergebnis zu gross')

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 stefanram724517 stefan_ram:724517 Verschachtelungen in Python Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd724517, slrprddef724517, 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/verschachtelung_python