Skripte in diesem Kurs (Skripte in diesem Kurs), Lektion, Seite 724238
https://www.purl.org/stefan_ram/pub/skripte_python (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Python-Kurs

Skripte

Eine Folge von Texten, deren jeder eine Anweisung oder eine Leerzeile sein kann, nennen wir ein Skript  oder ein Programm  (siehe The Python Language Reference, Release 3.7.0a1, Abschnitt “9.2 File input ”).

Bisher haben wir in diesem Kurs vorwiegend einzeilige Programme  geschrieben. Für die Eingabe und Ausführung solch einzeiliger Programme ist die Konsole gut geeignet gewesen.

Oft schreibt man in Python  aber mehrzeilige Programme. Für die Eingabe und Ausführung solch mehrzeiliger Programme ist der Editor besser geeignet.

Damit man sich an die Arbeit mit dem Editor gewöhnt, sollten ab jetzt alle  mehrzeiligen Programme mit dem Editor geschrieben und gestartet werden.

In diesem Kurs werden Skripte häufig unter dem Etikett »main.py« gelistet. Darunter findet sich dann ein Protokoll der Ausgabe bei ihrer Ausführung.

Solche Skripte können nicht immer in die Konsole  oder das Dialogfenster  kopiert werden, im allgemeinen sind sie dafür gedacht, in ein Skriptfenster  eingegeben zu werden.

main.py

from math import cos

print( "cos( 0 )= ", cos( 0 ))

print( "1/0 = ", 1/0 )

print( "cos( 0 )= ", cos( 0 ))

Protokoll

cos( 0 )= 1.0

FehlerWegenDivisonDurchNull

Fehlermeldungen erscheinen im Protokoll oft verkürzt und eingefärbt. Manchmal werden sie hier auch noch übersetzt.

Fehlermeldungen, die erscheinen, nachdem die Programmausführung zunächst schon begonnen wurde, sind Laufzeitfehler.

Laufzeitfehler führen normalerweise zum Abbruch  der Programmausführung.

Unterschiede zur Konsole

Auswertungsanweisungen in Quelldateien

Der Werte des äußersten Ausdruck eine Auswertungsanweisung wird bei der Ausführung eines Skripts nicht  ausgegeben, daher muß zur Ausgabe immer ›print‹ (oder etwas Ähnliches) verwendet werden.

Zeichenfolgen als Kommentare

Da der Wert des äußersten Ausdrucks einer Auswertungsanweisung nicht stillschweigend ausgegeben wird, kann eine Auswertungsanweisung als Kommentar  verwendet werden (dessen Ausführung keine Änderung bewirkt). Insbesondere mehrzeilige Zeichenfolgenliterale (»"""«) werden dafür verwendet.

main.py

from math import cos

print( "cos( 0 )= ", cos( 0 ))

"""Es folgt hier ein Versuch,
durch 0 zu dividieren!"""

print( "1/0 = ", 1/0 )

Hier wird das Zeichenfolgenliteral zwar ausgewertet, aber der Wert wird alsdann verworfen, so daß er effektiv keine Rolle spielt.

Einlesen von Eingaben

Wenn Eingaben mit »input« in einem Skript eingelesen werden, das von IDLE  ausgeführt wird, so müssen diese vom Benutzer des Programmes im Shell -Fenster eingegeben werden. Dabei ist es manchmal nötig, den Fensterinhalt des Shell -Fensters nach oben zu verschieben, damit dessen Ende angezeigt wird. Dann ist es manchmal noch nötig in diese letzt Zeile zu klicken, bevor dann dort ein Text eingegeben werden kann.

Deutlich erleichtert wird die Eingabe aber, wenn »input« mit einem Argument aufgerufen wird, weil dann die dazugehörige Zeile der Shell  automatisch angezeigt wird und eine Eingabe dann ohne weiteres möglich ist.

Daher sollte »input« immer mit einem Argument aufgerufen werden.

»_«

»_« ist in Skripten ein normaler gewöhnlicher Bezeichner, und wird nicht  automatisch umdefiniert wie in der Konsole.

»__file__«

Bei der Ausführung eines Skriptes ist der Name »__file__« an den Pfad der Skriptdatei gebunden.

main.py

print( __file__ )

# zum Beispiel:
# C:\Users\example\AppData\Local\Programs\Python\Python37\tmp.py

In der Konsole ist »__file__« in der Regel nicht an etwas gebunden.

Vorteile von Quelldateien

Programme und Programmstücke können in Form von Quelldateien (also einem als Datei abgespeichertem Python -Skript) übersichtlich abgelegt, wiederverwendet und weitergegeben werden.

Quelltext, der einmal als Datei abgespeichert wurde, geht nicht bei einem unerwünschten Schließen des Konsolenfensters verloren.

Es ist schwierig, mehrere hintereinander in die Konsole eingegebene Zeilen bei Bedarf erneut ausführen zu lassen. Hingegen kann ein mehrzeiliges Skript, das in einer Quelldatei steht, leicht erneut gestartet werden.

Importe in Quelldateien

Alle für eine Quelldatei nötigen import-Anweisungen müssen auch in jener Quelldatei stehen. Vorher eventuell in der Konsole eingegebene Import-Anweisungen gelten nicht.

Ausgaben unter IDLE

Ausgaben ohne »file=« und Ausgaben mit »file=stdout« („Standardausgabe“) erscheinen in Blau, mit »file=stderr« („Fehlerausgabe“) in Rot.

main.py

from sys import stdout, stderr

print( "Hallo!" ) # Blau
print( "Hallo!", file=stdout ) # Blau
print( "Hallo!", file=stderr ) # Rot

Wenn ein Skript mehrfach  gestartet wird, erscheinen die Ausgaben aller Läufe des Skripts hintereinander  im Ausgabefenster. Dies kann bei längeren Ausgaben unübersichtlich  werden, da die Ausgabe verschiedener Skripte miteinander verwechselt  werden können. In solchen Fällen kann es hilfreich sein, das Ausgabefenster vor dem Start eines Skriptes zu schließen, da dann beim Start eines Skripts ein neues, fast leeres Ausgabefenster geöffnet wird.

Beispiel Ein Skript zur Berechnung einer Summe

Das folgende Skript liest zwei Zahlen ein und gibt ihre Summe aus.

main.py

zahl0 = int( input( 'Erste Zahl? ' ))

zahl1 = int( input( 'Zweite Zahl? ' ))

print( 'Die Summe ist gleich ', zahl0 + zahl1, '.', sep='' )

Protokoll
Erste  Zahl? 40
Zweite Zahl? 50
Die Summe ist gleich 90.

Debuggen

Es stellt sich heraus, daß es zum Debuggen hilfreich ist, eher mehrere kurze Zeilen als eine lange zu haben und Zwischenergebnisse an Namen zu binden.

Beispiel Ein Python -Trainer

Der folgende Python -Trainer stellt Fragen zur Python -Programmierung und zeigt dann nach Drücken der Eingabetaste die erwartete Antwort an.

main.py
input( 'Womit wird eingelesen?'       ); print( 'Mit "input".'                   )
input( 'Womit wird ausgegeben?' ); print( 'Mit "print".' )
input( 'Was bedeutet "ausgeben"?' ); print( 'Auf den Bildschirm schreiben' )
input( 'Was bedeutet "zurueckgeben"?' ); print( 'Als Wert des Aufrufs festlegen' )
Protokoll
Womit wird eingelesen?
Protokoll
Womit wird eingelesen?
Mit "input".
Womit wird ausgegeben?

Beispiel Ein Skript für Hörübungen

Als Beispiel für ein Skript folgt hier ein Programm zum Verbessern des Erkennens von Intervallen  von Tönen.

Das Programm spielt zwei Töne hintereinander in Reihenfolge aufsteigender  Frequenz vor, die zusammen entweder eine Quinte oder eine große Terz bilden. Der Benutzer soll nach dem Hören entscheiden, ob er eine Quinte oder eine große Terz gehört hat, und kann das Programm alsdann durch Eingabe von »q« oder »t« fortsetzen, woraufhin ihm angezeigt wird, ob tatsächlich eine Quinte oder eine große Terz erklang.

main.py

from winsound import Beep
from random import random

wenn = lambda wenn, dann, sonst:( sonst, dann )[ wenn ]

quintverhaeltnis = 3/2
terzverhaeltnis = 5/4

ist_quinte = int( random() * 2 ) # 1 = Quinte, 0 = keine Quinte (also eine Terz)

frequenzverhaeltnis = wenn( ist_quinte, quintverhaeltnis, terzverhaeltnis )
erste_frequenz_in_Hz = int( random() * 1000 + 110 )
zweite_frequenz_in_Hz = int( erste_frequenz_in_Hz * frequenzverhaeltnis )
dauer_in_millisekunden = 400
Beep( erste_frequenz_in_Hz, dauer_in_millisekunden )
Beep( zweite_frequenz_in_Hz, dauer_in_millisekunden )

isteingabe = input( "War dies eine Quinte (q) oder eine grosse Terz (t)? " )
print( 'Es war eine', wenn( ist_quinte, 'Quinte.', 'Terz.' ))
solleingabe = wenn( ist_quinte, 'q', 't' )
ist_richtig = isteingabe == solleingabe
print( 'Ihre Antwort war', wenn( ist_richtig, 'richtig.', 'falsch.' ))

Protokoll

War dies eine Quinte (q) oder eine grosse Terz (t)? q

Es war eine Terz.

Ihre Antwort war falsch

Protokoll

War dies eine Quinte (q) oder eine grosse Terz (t)? q

Es war eine Quinte.

Ihre Antwort war richtig.

Der Leser kann dieses Programm verändern, indem er andere Intervalle (beispielsweise „große oder kleine Terz?“ statt „Quinte oder große Terz?“) einbaut oder die Intervalle aufwärts statt abwärts vorspielen läßt (oder die Richtung jedesmal zufällig festlegen läßt).

Stilregel

ℛ Stilregel Das Schreiben mehrerer Anweisungen in eine Zeile  soll vermieden  werden.

ℛ Stilregel Das Schreiben eines überflüssigen Semikolons  am Ende einer Zeile soll vermieden  werden.

Stilregeln in diesem Kurs gelten für Code, der bibliotheksfähig  sein soll, also für Code, der in einer Datei gespeichert wird. Um in der Konsole mit Ad-hoc-Code  etwas auszuprobieren  oder vorzuführen, ist das Schreiben mehrerer Anweisungen in eine Zeile manchmal praktisch oder in bestimmten Fällen sogar notwendig.

Die Schreibweise mit einer Auswertungsanweisung pro Zeile gilt in Python  als besserer Stil  verglichen mit der Verwendung eines Semikolons »;« und mehreren Auswertungsanweisungen pro Zeile.

Gilt als schlechter Stil
print( 'A' ); print( 'B' )
Gilt nicht als schlechter Stil
print( 'A' )
print( 'B' )

Wenn eine Auswertungsanweisung alleine in einer Zeile steht, ist es nicht nötig, ein Semikolon »;« zu verwenden.

Gilt als schlechter Stil
print( 'A' );
Gilt nicht als schlechter Stil
print( 'A' )

Dateizugriffe

Die eingebaut Funktion »open« ergibt ein iterables Objekt mit den einzelnen Zeilen.

tmp.txt
The afternoon sun was warm on the five workmen there, busy upon doors
and window-frames and wainscoting. A scent of pine-wood from a tentlike
pile of planks outside the open door mingled itself with the scent of
the elder-bushes which were spreading their summer snow close to
the open window opposite; the slanting sunbeams shone through the
transparent shavings that flew before the steady plane, and lit up the
fine grain of the oak panelling which stood propped against the wall.
On a heap of those soft shavings a rough, grey shepherd dog had
made himself a pleasant bed, and was lying with his nose between his
fore-paws, occasionally wrinkling his brows to cast a glance at the
tallest of the five workmen, who was carving a shield in the centre of
a wooden mantelpiece. It was to this workman that the strong barytone
belonged which was heard above the sound of plane and hammer singing--
Konsolenprotokoll

from pprint import pprint

has_workmen = lambda line: "workmen" in line

line_supplier = open( "tmp.txt" ) # nach "./" zeigt IDLE Dateinamen an! (Geduld!)

workmen_line_source = filter( has_workmen, line_supplier )

workmen_line_collection = tuple( workmen_line_source )

pprint( workmen_line_collection )

('The afternoon sun was warm on the five workmen there, busy upon doors\n',
'tallest of the five workmen, who was carving a shield in the centre of\n')
Count lines

line_count = sum( map( lambda line: 1, open( "tmp.txt" )))

print( line_count )

Konsolenprotokoll

from re import *
from pprint import pprint

pprint( tuple( map( lambda line: sub( "workmen", "craftsmen", line ), open( "tmp.txt" ))))

('The afternoon sun was warm on the five craftsmen there, busy upon doors\n',
'and window-frames and wainscoting. A scent of pine-wood from a tentlike\n',
'pile of planks outside the open door mingled itself with the scent of\n',
'the elder-bushes which were spreading their summer snow close to\n',
'the open window opposite; the slanting sunbeams shone through the\n',
'transparent shavings that flew before the steady plane, and lit up the\n',
'fine grain of the oak panelling which stood propped against the wall.\n',
'On a heap of those soft shavings a rough, grey shepherd dog had\n',
'made himself a pleasant bed, and was lying with his nose between his\n',
'fore-paws, occasionally wrinkling his brows to cast a glance at the\n',
'tallest of the five craftsmen, who was carving a shield in the centre of\n',
'a wooden mantelpiece. It was to this workman that the strong barytone\n',
'belonged which was heard above the sound of plane and hammer singing--\n')
Konsolenprotokoll

from functools import reduce
from operator import add

text = reduce( add, open( "tmp.txt" ))

print( text )

The afternoon sun was warm on the five workmen there, busy upon doors
and window-frames and wainscoting. A scent of pine-wood from a tentlike
pile of planks outside the open door mingled itself with the scent of
the elder-bushes which were spreading their summer snow close to
the open window opposite; the slanting sunbeams shone through the
transparent shavings that flew before the steady plane, and lit up the
fine grain of the oak panelling which stood propped against the wall.
On a heap of those soft shavings a rough, grey shepherd dog had
made himself a pleasant bed, and was lying with his nose between his
fore-paws, occasionally wrinkling his brows to cast a glance at the
tallest of the five workmen, who was carving a shield in the centre of
a wooden mantelpiece. It was to this workman that the strong barytone
belonged which was heard above the sound of plane and hammer singing--

Der Stapelbericht ⃗

Der Stapelbericht beschreibt, welche Eingabe gerade verarbeitet wird.

main.py

from traceback import print_stack

print_stack()

Ausgabe

File "main.py", line 2, in <module>

traceback.print_stack()

Modulnamen ⃗

Das aktuelle Modul heißt auch bei der Ausführung eines Skripts weiterhin »__main__«, wie in der Konsole.

Es folgt eine Übersicht über einige leicht verwechselbare Modulnamen.

Standardnamen

builtins Standardname, muss aber importiert werden

__main__ Standardname des ausgeführte Moduls (Skripts)

Spezielle Namen

__builtins___ unter einigen Python-Implementationen (CPython) ohne Import verfuegbar

main Existiert nur, falls solche ein Modul (oder Skript) angelegt wurde

Importe aus dem eigenen Skript ⃗

Ein Skript kann auch gleichzeitig als ein Modul  angesehen werden. Entsprechend können wir Namen aus dem eigenen Skript importieren!

main.py
a = 5
from main import a
print( a )
Protokoll
5
5

Hier wird »a« zwei Mal ausgegeben, weil das ganze Skript beim der ersten Ausführung der from-Anweisung ausgeführt wird. Dabei wird die from-Anweisung dann ein zweites Mal ausgeführt, was aber dann nicht mehr zu einer erneuten Ausführung des Skriptes führt.

Ein Modul muß beim Import ausgeführt werden, da erst dadurch die Namen an ihre Werte gebunden werden. Erst durch die Ausführung der Bindungsanweisung »a = 5« wird der Name »a« an den Wert «5» gebunden.

Es gibt normalerweise keinen Grund für solch eine from-Anweisung, aber sie zeigt uns eben, daß ein Skript auch als Modul angesehen werden kann.

Wird ein Modul importiert, so ist »__name__« an den Namen des Moduls gebunden. Wird ein Skript ausgeführt, ist »__name__« an den Namen »__main__« gebunden. So kann man beispielsweise in ein- und derselben Datei erkennen, ob sie gerade importiert oder als Skript ausgeführt wird.

main.py

import main

print( __name__ )

main.py

main

__main__

Übungsfragen

?   Übungsfrage

Welche Ausgabe bewirkt die Ausführung des folgenden Skripts?

main.py

_ = 7

print( _ )

?   Übungsfrage

Welche Ausgabe bewirkt die Ausführung des folgenden Skripts? (Der Kosinus von Null ist Eins.)

main.py

from math import cos

print( 2 )

3

print( cos( 0 ))

cos( 0 )

Übungsaufgaben

/   Übungsaufgabe

Schreiben Sie ein Skript, das eine Zahl einliest und deren Quadrat ausgibt.

Es sollten Namen für Zwischenergebnisse definiert und nicht zu viele Aufrufe ineinander verschachtelt werden.

Das Quadrat  einer gegebenen Zahl erhält man, indem man die Zahl «1» zweimal  mit der gegebenen Zahl multipliziert.

/   Reserveaufgabe ⃗

Schreiben Sie ein Skript, das eine Zahl einliest und deren Kehrwert ausgibt.

Es sollten Namen für Zwischenergebnisse definiert und nicht zu viele Aufrufe ineinander verschachtelt werden.

Den Kehrwert  einer Zahl erhält man, indem man die Zahl «1» durch jene Zahl teilt.

/   Reserveaufgabe ⃗

Schreiben Sie ein Skript, das zwei Zahlen einliest und deren Summe ausgibt.

Es sollten Namen  für Zwischenergebnisse definiert und nicht zu viele Aufrufe ineinander verschachtelt werden.

/   Übungsaufgabe ⃗

Legen Sie ein Skript namens »usercustomize.py« im Verzeichnis «getusersitepackages()» mit dem folgenden Inhalt an. (Hierzu muß das Verzeichnis gegebenenfalls erst einmal angelegt werden.)

«getusersitepackages()»/usercustomize.py
print( 'Berlin' )

Starten Sie dann Ihr Programm und beobachten Sie die Ausgabe von »Berlin«.

Löschen Sie die Datei nun wieder.

/   Unterstreichen

Schreiben Sie ein Skript, das eine Zeichenfolge einliest und diese unterstrichen wieder ausgibt.

Beispiel des Programmablaufs
Zeichenfolge? alpha
alpha
-----
Beispiel des Programmablaufs
Zeichenfolge? Desoxyribonukleinsaeure
Desoxyribonukleinsaeure
-----------------------

/   Übungsaufgabe ⃗

Schreiben Sie ein Skript, das eine Zeichenfolge einliest und diese eingerahmt wieder ausgibt.

Beispiel des Programmablaufs
Zeichenfolge? alpha
.-------.
| alpha |
'-------'
Beispiel des Programmablaufs
Zeichenfolge? Desoxyribonukleinsaeure
.-------------------------.
| Desoxyribonukleinsaeure |
'-------------------------'

Anhang Variante des obigen Skripts

Das folgende Programm gibt eine Variante wieder, bei der die Variablennamen kürzer und durch Kommentare erläutert sind.

main.py

from winsound import Beep
from random import random
from math import isclose

# V0 Verhältnis des tieferen Tons einer Quinte zum höheren
# V1 Verhältnis des tieferen Tons einer Terz zum höheren
# F0 erste Frequenz des Intervalls in Hz
# F1 erste Frequenz des Intervalls in Hz
# Q ist es eine Quinte? 1 = Quinte, 0 = keine Quinte (d.h.: Terz)
# R zu verwendendes Frequenzverhaeltnis
# II Ist-Eingabe (Eingabe)
# IS Soll-Eingabe (richtige Antwort)
# C War die Antwort richtig?

V0 = 2/3
V1 = 4/5

F0 = int( random() * 1000 + 110 )
Q = int( random() * 2 )
R = Q * V0 +( 1-Q )* V1
F1 = int( F0 * R )

Beep( F0, 400 )
Beep( F1, 400 )

II = input( "War dies eine Quinte (q) oder eine grosse Terz (t)? " )
print( 'Es war eine', Q * 'Quinte.' +( 1-Q )* 'Terz.' )
IS = Q * 'q' +( 1-Q )* 't'
C = II == IS
print( 'Ihre Antwort war', C * 'richtig.' +( 1-C )* 'falsch' )

Anhang Präludium, BWV 846 

Die Wiedergabe des Präludiums mit Hilfe von »Beep« klingt nicht besonders gut. Es ist nicht genau klar, warum.

main.py

# based on code by "gm__".
# J. S. Bach - Präludium BWV 846 (Original in C Dur)
# duration: 1:58 minutes
from time import sleep as s
from winsound import Beep as b

b(392,191)
b(494,198)
b(587,180)
b(784,179)
b(988,186)
b(587,185)
b(784,184)
b(988,177)
s(0.001374)
b(392,208)
b(494,179)
b(587,176)
b(784,180)
b(988,177)
b(587,177)
b(784,187)
b(988,181)
s(0.000381)
b(392,176)
b(440,193)
b(660,182)
b(880,183)
b(1047,183)
b(660,178)
b(880,184)
b(1047,181)
s(0.001690)
b(392,206)
b(440,205)
b(660,182)
b(880,180)
b(1047,187)
b(660,185)
b(880,188)
b(1047,187)
s(0.003452)
b(370,200)
b(440,200)
b(587,179)
b(880,186)
b(1047,187)
b(587,188)
b(880,189)
b(1047,184)
s(0.003140)
b(370,194)
b(440,187)
b(587,181)
b(880,178)
b(1047,185)
b(587,178)
b(880,177)
b(1047,188)
s(0.002649)
b(392,209)
b(494,206)
b(587,186)
b(784,183)
b(988,180)
b(587,186)
b(784,183)
b(988,183)
s(0.010631)
b(392,192)
b(494,194)
b(587,186)
b(784,185)
b(988,185)
b(587,182)
b(784,180)
b(988,181)
s(0.005442)
b(392,212)
b(494,208)
b(660,182)
b(988,180)
b(1320,186)
b(660,184)
b(988,179)
b(1320,187)
s(0.007269)
b(392,226)
b(494,202)
b(660,187)
b(988,182)
b(1320,184)
b(660,179)
b(988,190)
b(1320,187)
s(0.002452)
b(392,229)
b(440,190)
b(554,181)
b(660,189)
b(880,185)
b(554,181)
b(660,185)
b(880,188)
s(0.007138)
b(392,210)
b(440,206)
b(554,188)
b(660,185)
b(880,181)
b(554,184)
b(660,190)
b(880,180)
s(0.009927)
b(370,208)
b(440,204)
b(587,191)
b(880,186)
b(1175,184)
b(587,186)
b(880,184)
b(1175,190)
s(0.006591)
b(370,199)
b(440,199)
b(587,189)
b(880,187)
b(1175,183)
b(587,190)
b(880,190)
b(1175,185)
s(0.011220)
b(370,193)
b(392,206)
b(494,181)
b(587,187)
b(784,183)
b(494,191)
b(587,188)
b(784,189)
s(0.004748)
b(370,197)
b(392,200)
b(494,185)
b(587,192)
b(784,185)
b(494,185)
b(587,183)
b(784,190)
s(0.021366)
b(330,219)
b(392,196)
b(494,183)
b(587,182)
b(784,182)
b(494,191)
b(587,192)
b(784,184)
s(0.003144)
b(330,189)
b(392,194)
b(494,191)
b(587,190)
b(784,189)
b(494,183)
b(587,187)
b(784,185)
s(0.020051)
b(220,207)
b(330,199)
b(440,189)
b(554,190)
b(784,184)
b(440,189)
b(554,194)
b(784,191)
s(0.028114)
b(220,201)
b(330,209)
b(440,188)
b(554,195)
b(784,184)
b(440,190)
b(554,184)
b(784,188)
s(0.029809)
b(293,227)
b(370,192)
b(440,192)
b(587,188)
b(740,186)
b(440,191)
b(587,191)
b(740,189)
s(0.015669)
b(293,221)
b(370,214)
b(440,191)
b(587,192)
b(740,191)
b(440,188)
b(587,186)
b(740,193)
s(0.019541)
b(293,207)
b(349,201)
b(494,193)
b(587,191)
b(831,188)
b(494,190)
b(587,185)
b(831,193)
s(0.022523)
b(293,225)
b(349,198)
b(494,192)
b(587,195)
b(831,196)
b(494,192)
b(587,194)
b(831,185)
s(0.025643)
b(261,212)
b(330,199)
b(440,187)
b(660,186)
b(880,196)
b(440,195)
b(660,194)
b(880,187)
s(0.013077)
b(261,190)
b(330,213)
b(440,192)
b(660,191)
b(880,191)
b(440,189)
b(660,191)
b(880,192)
s(0.006350)
b(261,225)
b(311,209)
b(440,197)
b(523,196)
b(740,195)
b(440,190)
b(523,197)
b(740,188)
s(0.002840)
b(261,221)
b(311,217)
b(440,187)
b(523,197)
b(740,194)
b(440,190)
b(523,188)
b(740,193)
s(0.010174)
b(247,234)
b(293,209)
b(392,188)
b(587,193)
b(784,191)
b(392,193)
b(587,197)
b(784,193)
s(0.017742)
b(247,221)
b(293,204)
b(392,187)
b(587,196)
b(784,189)
b(392,195)
b(587,198)
b(784,193)
s(0.035872)
b(247,212)
b(261,210)
b(330,192)
b(392,199)
b(523,195)
b(330,190)
b(392,192)
b(523,190)
s(0.036867)
b(247,229)
b(261,196)
b(330,189)
b(392,196)
b(523,190)
b(330,199)
b(392,199)
b(523,196)
s(0.036948)
b(220,199)
b(261,207)
b(330,196)
b(392,191)
b(523,190)
b(330,191)
b(392,196)
b(523,193)
s(0.016865)
b(220,225)
b(261,218)
b(330,195)
b(392,196)
b(523,199)
b(330,200)
b(392,191)
b(523,197)
s(0.021891)
b(146,199)
b(220,201)
b(293,195)
b(370,196)
b(523,193)
b(293,196)
b(370,192)
b(523,194)
s(0.006195)
b(146,206)
b(220,212)
b(293,201)
b(370,200)
b(523,199)
b(293,198)
b(370,195)
b(523,201)
s(0.013161)
b(196,212)
b(247,206)
b(293,202)
b(392,191)
b(494,192)
b(293,197)
b(392,196)
b(494,192)
s(0.015321)
b(196,213)
b(247,196)
b(293,202)
b(392,192)
b(494,192)
b(293,192)
b(392,195)
b(494,202)
s(0.024235)
b(196,242)
b(293,214)
b(349,201)
b(392,200)
b(494,196)
b(349,195)
b(392,192)
b(494,198)
s(0.059580)
b(196,208)
b(293,205)
b(349,200)
b(392,203)
b(494,197)
b(349,203)
b(392,192)
b(494,203)
s(0.038499)
b(130,229)
b(261,199)
b(330,197)
b(392,192)
b(494,197)
b(330,193)
b(392,200)
b(494,203)
s(0.004254)
b(130,234)
b(261,220)
b(330,199)
b(392,201)
b(494,195)
b(330,201)
b(392,202)
b(494,202)
s(0.002088)
b(138,234)
b(196,204)
b(330,200)
b(392,205)
b(466,194)
b(330,197)
b(392,195)
b(466,205)
s(0.042655)
b(138,241)
b(196,215)
b(330,196)
b(392,196)
b(466,197)
b(330,200)
b(392,205)
b(466,195)
s(0.063546)
b(155,203)
b(261,208)
b(370,206)
b(392,204)
b(440,205)
b(370,197)
b(392,200)
b(440,195)
s(0.054046)
b(155,215)
b(261,222)
b(370,195)
b(392,198)
b(440,197)
b(370,198)
b(392,197)
b(440,202)
s(0.065163)
b(146,216)
b(261,220)
b(293,203)
b(370,206)
b(440,201)
b(293,206)
b(370,203)
b(440,197)
s(0.047853)
b(146,223)
b(261,220)
b(293,203)
b(370,202)
b(440,199)
b(293,201)
b(370,200)
b(440,196)
s(0.061075)
b(146,202)
b(247,215)
b(293,197)
b(392,198)
b(494,198)
b(293,204)
b(392,202)
b(494,204)
s(0.054672)
b(146,235)
b(247,221)
b(293,204)
b(392,199)
b(494,208)
b(293,207)
b(392,201)
b(494,209)
s(0.014825)
b(146,235)
b(220,217)
b(293,205)
b(392,198)
b(523,201)
b(293,200)
b(392,202)
b(523,208)
s(0.057952)
b(146,249)
b(220,212)
b(293,208)
b(392,201)
b(523,202)
b(293,204)
b(392,202)
b(523,207)
s(0.062013)
b(146,242)
b(220,204)
b(293,201)
b(370,206)
b(523,209)
b(293,203)
b(370,204)
b(523,200)
s(0.076951)
b(146,226)
b(220,217)
b(293,207)
b(370,200)
b(523,199)
b(293,200)
b(370,199)
b(523,203)
s(0.026545)
b(146,214)
b(233,205)
b(330,207)
b(392,208)
b(554,201)
b(330,207)
b(392,207)
b(554,207)
s(0.047871)
b(146,227)
b(233,223)
b(330,205)
b(392,211)
b(554,208)
b(330,206)
b(392,208)
b(554,208)
s(0.033341)
b(146,207)
b(247,214)
b(293,201)
b(392,204)
b(587,209)
b(293,203)
b(392,204)
b(587,206)
s(0.000835)
b(146,230)
b(247,226)
b(293,205)
b(392,205)
b(587,211)
b(293,212)
b(392,208)
b(587,213)
s(0.004962)
b(146,249)
b(220,213)
b(293,204)
b(392,201)
b(523,208)
b(293,206)
b(392,201)
b(523,201)
s(0.043018)
b(146,256)
b(220,224)
b(293,209)
b(392,211)
b(523,212)
b(293,208)
b(392,209)
b(523,203)
s(0.076145)
b(146,236)
b(220,222)
b(293,212)
b(370,210)
b(523,206)
b(293,202)
b(370,205)
b(523,206)
s(0.022652)
b(146,229)
b(220,215)
b(293,211)
b(370,210)
b(523,213)
b(293,205)
b(370,209)
b(523,213)
s(0.077384)
b(98,224)
b(196,235)
b(293,218)
b(349,219)
b(494,222)
b(293,221)
b(349,217)
b(494,225)
s(0.026711)
b(98,258)
b(196,235)
b(293,232)
b(349,232)
b(494,229)
b(293,240)
b(349,243)
b(494,237)
s(0.031485)
b(98,267)
b(196,254)
b(261,251)
b(330,257)
b(392,248)
b(523,258)
b(392,261)
b(330,257)
s(0.007500)
b(392,296)
b(330,289)
b(261,275)
b(330,285)
b(261,284)
b(220,295)
b(261,296)
b(220,301)
s(0.102542)
b(98,309)
b(185,324)
b(587,318)
b(740,323)
b(880,334)
b(1047,344)
b(880,347)
b(740,355)
s(0.044651)
b(880,384)
b(740,381)
b(587,379)
b(740,389)
b(440,423)
b(523,465)
b(494,505)
b(440,530)
s(0.25)
b(392,1936)

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 stefanram724238 stefan_ram:724238 Skripte in diesem Kurs Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd724238, slrprddef724238, 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/skripte_python