Mehrzeilige Zeichenfolgenliterale in Python
Mit »'''« beginnende Zeichenfolgenliterale
Ein Zeichenfolgenliteral darf auch mit »'''« beginnen. Es muß dann auch mit »'''« enden.
Solch ein Zeichenfolgenliteral darf dann Zeilenenden enthalten, also mehrere Zeilen umfassen. Es darf auch ein einfaches Apostroph »'« oder eine Folge zweier Apostrophe »''« enthalten. Genauso darf es beliebig viele Anführungszeichen »"« enthalten.
- Konsoleninteraktion
print( '''Alpha'
Gamma''Epsilon
Zeta''' )Alpha'
Gamma''Epsilon
Zeta
Ohne »'''« könnte dieselbe Zeichenfolge aber auch als »"Alpha'\nGamma''Epsilon\nZeta"« geschrieben werden, wie »repr« zeigt.
- Protokoll
print( repr( '''Alpha'
Gamma''Epsilon
Zeta''' ))"Alpha'\nGamma''Epsilon\nZeta"
print( "Alpha'\nGamma''Epsilon\nZeta" )
Alpha'
Gamma''Epsilon
Zeta- Ein weiteres Beispiel
'''
FINISHED FILES ARE THE RESULT OF
YEARS OF SCIENTIFIC STUDY COMBINED
WITH THE EXPERIENCE OF MANY YEARS.
'''.count( 'F' )
Mit »"""« beginnende Zeichenfolgenliterale
Ein Zeichenfolgenliteral darf auch mit »"""« beginnen. Es muß dann auch mit »"""« enden.
Solch ein Zeichenfolgenliteral darf dann Zeilenenden enthalten, also mehrere Zeilen umfassen. Es darf auch ein einfaches Anführungszeichen »"« oder eine Folge zweier Anführungszeichen »""« enthalten. Genauso darf es beliebig viele Apostrophe »'« enthalten.
- Konsoleninteraktion
print( """Alpha"
Gamma""Epsilon
Zeta""" )Alpha"
Gamma""Epsilon
Zeta
Zum Kopieren fremder Texte (zum Beispiel von Webseiten) sollte immer »r« (wie in »r'''…« oder »r"""…«) verwendet werden!
Zeichenfolgen mit mehr als zwei aufeinanderfolgenden Anführungszeichen oder Apostrophen ⃗
Zeichenfolgen mit vielen aufeinanderfolgenden Apostrophen »'« können in einfachen Anführungszeichen geschrieben werden.
- Konsoleninteraktion
print( "'''''''''" )
'''''''''
Zeichenfolgen mit vielen aufeinanderfolgenden Anführungszeichen »'« können in einfachen Apostrophen geschrieben werden.
- Konsoleninteraktion
print( '"""""""""' )
"""""""""
Zeichenfolgen mit vielen aufeinanderfolgenden Apostrophen »'« und Anführungszeichen »"« können durch Zeichenfolgenverbindungen geschrieben werden. Dabei können Teilfolgen, die keine Anführungszeichen enthalten, in Anführungszeichen eingeschlossen werden und Teilfolgen, die keine Apostrophe enthalten, in Apostrophe eingeschlossen werden.
- Konsoleninteraktion
print( "'''''''''" + '""""""""' )
'''''''''""""""""
Zeichenfolgenliterale werden ja auch ohne Pluszeichen verbunden, so daß auch die folgenden Schreibweise möglich ist.
- Konsoleninteraktion
print( "'''''''''"'""""""""' )
'''''''''""""""""
Solche Ausdrücke sind schwer zu lesen, kommen aber in der Praxis auch nur selten vor.
Übungsfragen ⃗
? Übungsfrage
Im folgenden Beispiel kann man drei Textzeilen sehen, die jeweils durch ein Zeilenende getrennt sind. Leider sind sie im Quelltext nicht übersichtlich zu erkennen, da zwei von ihnen in derselben Zeile wie die Begrenzer (Apostrophe) stehen.
- Anweisung
a = '''Anton
Berta
Cäsar'''
Im folgenden Beispiel kann man drei Textzeilen sehen, die übersichtlich frei von den begrenzenden Apostrophen sind. Jedoch befindet sich nun vor der ersten und hinter der letzten Zeile jeweils ein unerwünschtes Zeilenendzeichen. Was muß an das Ende der Anweisung noch angefügt werden, um zu erreichen, daß der Name »a« an die Zeichenfolge des Zeichenliterals ohne diese beiden Zeilenendzeichen gebunden wird?
- Anweisung
a = '''
Anton
Berta
Cäsar
'''
Übungsaufgaben °
/ Zeilentrennungen reparieren °
Die folgende komprimierte Quelle »quelle« enthält einen Text, der wie ein Gedicht in Versen (Zeilen) geschrieben wurde, deren Ende jeweils mit einem Schrägstrich »/« gekennzeichnet wurde. Gleichzeitig enthält er aber auch willkürliche Zeilenenden (beispielsweise hinter »Laß,«), die im Originaltext nicht enthalten sind.
Verwenden Sie Python, um aus der komprimierten Quelle wieder den Orginaltext zu machen.
- Quelle
quelle='''
Schaff, das Tagwerk meiner Hände,/Hohes Glück, daß ich's vollende!/Laß,
o laß mich nicht ermatten!/Nein, es sind nicht leere Träume:/Jetzt nur
Stangen, diese Bäume/Geben einst noch Frucht und Schatten.
'''[ 1: -1 ]- gewünschtes Ergebnis (Originaltext „Hoffnung“ von Goethe)
Schaff, das Tagwerk meiner Hände,
Hohes Glück, daß ich's vollende!
Laß, o laß mich nicht ermatten!
Nein, es sind nicht leere Träume:
Jetzt nur Stangen, diese Bäume
Geben einst noch Frucht und Schatten.
/ „srt“ °
Das Dateiformat „srt“ (en.wikipedia.org/wiki/SubRip) für Untertitel zu einem Video besteht aus Blöcken, die eine laufende Nummer, eine Zeitangabe, einen Text und eine Leerzeile enthalten. Zur Vereinfachung nehmen wir hier an, daß der Text stets nur eine Zeile umfaßt, so daß jeder Block stets insgesamt vier Zeilen umfaßt.
Wie findet man srt-Dateien mit Google ?
Drücken Sie die Textzeilen aus! (Das heißt: Es soll ein Ausdruck geschrieben werden, dessen Wert eine Zeichenfolge ist, die nur aus den Textzeilen besteht. Statt dessen darf zu diesem Zweck aber auch eine Abfolge mehrerer Anweisungen geschrieben werden, deren letzte dann das die Textzeilen ausgibtc.)
- Ein Text im Format »srt«
beispiel_srt = '''
1
00:00:01,000 --> 00:00:02,000
Dieser Text
2
00:00:02,000 --> 00:00:03,000
ist nur ein Beispiel,
3
00:00:03,000 --> 00:00:05,000
das extra fuer diesen Kurs
4
00:00:03,000 --> 00:00:05,000
erstellt wurde.
'''- Die gewünschte Zeichenfolge
Dieser Text
ist nur ein Beispiel,
das extra fuer diesen Kurs
erstellt wurde.
/ „srt“ 2 °
Tatsächlich erlaubt das srt-Format auch mehrzeilige Textblöcke in einer srt-Datei. Können Sie auch unter diesen erschwerten Bedinungen eine Lösung zur Extraktion des Textes finden?
- Ein Text im Format »srt«
beispiel_srt = '''
1
00:00:01,000 --> 00:00:02,000
Dieser Text
2
00:00:02,000 --> 00:00:03,000
ist nur ein Beispiel,
das extra fuer diesen Kurs
3
00:00:03,000 --> 00:00:05,000
erstellt wurde.
'''- Die gewünschte Zeichenfolge
Dieser Text
ist nur ein Beispiel,
das extra fuer diesen Kurs
erstellt wurde.
/ mbox °
Nachrichten werden oft im mbox-Format gesammelt (de.wikipedia.org/wiki/Mbox, tools.ietf.org/html/rfc4155, qmail.org./man/man5/mbox.html). Dabei werden die einzelnen Nachrichten oft durch eine Leerzeile getrennt, der das Wort »From« und ein Leerzeichen folgt.
Schreiben Sie eine Folge von Anweisungen, an deren Ende ein solche Nachrichtensammlung ausgegeben wird, die nur die Nachrichten von »Mueller« enthält.
- Eine Nachrichtensammlung im mbox-Format
mbox = '''
From tmp Tue Sep 19 13:56:36 2006
From: Mueller
Subject: Laub
Bitte sammeln Sie das
Laub wieder ein!
From tmp Wed Sep 20 20:56:36 2006
From: Gembora
Subject: Lennartz
Noch keine Neuigkeiten von Lennartz.
From tmp Wed Sep 20 21:56:36 2006
From: Schulte
Subject: Termin
Leider muss unser Termin verschoben werden.
Bitte rufen Sie mich an!
From tmp Fri Sep 22 21:56:36 2006
From: Mueller
Subject: Besichtigung
Das Bauamt plant die Begehung jetzt für KW41.
Bosch hat sich noch nicht entschieden.
From tmp Sat Sep 23 11:56:36 2006
From: Kastner
Subject: Re: Verpackung
Der Concierge-Service wird die Sachen wie von
Ihnen gewuenscht verpacken und zustellen.
'''- Das gewünschte Ergebnis
From tmp Tue Sep 19 13:56:36 2006
From: Mueller
Subject: Laub
Bitte sammeln Sie das
Laub wieder ein!
From tmp Fri Sep 22 21:56:36 2006
From: Mueller
Subject: Besichtigung
Das Bauamt plant die Begehung jetzt für KW41.
Bosch hat sich noch nicht entschieden.
/ Übungsaufgabe °
Schreiben Sie einen Ausdruck für eine Liste (der Typ muß nicht unbedingt ›list‹ sein!), die jede Sprache aus der Liste ›q‹ nur noch genau einmal enthält.
Zusatzaufgabe Die Liste soll alphabetisch sortiert sein.
Das genaue Format, in dem die Liste erscheint (einzeilig/mehrzeilig, Abgrenzung der einzelnen Einträge u.s.w.) ist hierbei egal !
- Quelle
q='''
Russisch
English
English
English
Französisch
Englisch
Hochchinesisch
Englisch
Englisch
Griechisch
Englisch
Japanisch
Englisch
Arabisch
Englisch
Italienisch
Englisch
Latein
Englisch
Russisch
Englisch
Französisch
Englisch
Deutsch
Englisch
Hebräisch
Englisch
Japanisch
Englisch
Spanisch
Englisch
Italienisch
Englisch
Russisch
Englisch
Portugiesisch
Englisch
Französisch
Englisch
Türkisch
Englisch
Polnisch
Englisch
Japanisch
Englisch
Berlinisch
Englisch
Italienisch
Englisch
Holländisch
'''
/ Übungsaufgabe °
Schreiben Sie einen Ausdruck für eine Auflistung (der Typ muß nicht unbedingt ›list‹ sein!), die jede Sprache aus der Liste ›q‹ genau einmal enthält und zwar zusammen mit der Häufigkeit ihres Vorkommens in jener Liste.
Zusatzaufgabe Statt der absoluten Häufigkeit soll die prozentuale Häufigkeit erscheinen.
Das genaue Format, in dem die Auflistung erscheint (einzeilig/mehrzeilig, Abgrenzung der einzelnen Einträge u.s.w.) ist hierbei egal !