====== Strings (Zeichenketten) ======
Ein String (Zeichenkette) ist eine Folge von "Buchstaben".
So lange nur ASCII-Zeichen verwendet werden, geht alles problemlos, ein Buchstabe ist immer ein Byte. Werden Umlaute wie ä,ö,ü oder andere Zeichen wie z.B. 😀 verwendet, wird die Sache etwas komplizierter und es muss auf das Encoding geachtet werden, wofür eigentlich fast immer UFT-8 verwendet werden sollte.
===== String Operationen =====
Zusammenfügen mit '+':
a = "Hello "
b = "world!"
c = a+b
print(c)
Einzelne Zeichen als Strings der Länge 1 auslesen:
a = "abcde"
print(a[0])
print(a[4])
Länge eines Strings (in Anzahl Bytes):
a = "abc"
print(len(a))
b = "öh"
print(len(b)) # ergibt 2 (früher erhielt man 3 weil das 'ö' zwei Bytes belegt und len die Anzahl Bytes gezählt hat).
String mit Zahl multiplizieren:
print("na"*31 + " she's got the look!")
Substrings:
a="hello world!"
print(a[3:5]) # Von und mit viertem bis ohne sechstem Byte
print(a[6:]) # Von siebtem Bytes bis Schluss
print(a[:5]) # Von Anfang bis ohne sechstem Byte
Loop:
for b in "Hello World":
print(b)
====== Aufgaben ======
===== Text Quadrate =====
Das Programm hat als Eingabe einen String. Damit sollen folgendes Text-Quadrat produziert werden:
P Y T H O N
Y T H O N P
T H O N P Y
H O N P Y T
O N P Y T H
N P Y T H O
import sys
t = "PYTHON"
for i in range(len(t)):
for j in range(len(t)):
sys.stdout.write(t[(i+j)%len(t)]+" ")
print
a = "QUADRAT"
for i in range(len(a)):
wort = ""
for b in a:
wort += b+" "
print(wort)
a = a[-1]+a[:-1]
a = "PYTHON"
l = len(a)
a+=a
for i in range(l):
print(a[i:i+l])
**Challenge** Produzieren Sie folgende Ausgabe
P Y T H O N
Y T H O N O
T H O N O H
H O N O H T
O N O H T Y
N O H T Y P
import sys
t = "PYTHON"
for i in range(len(t)):
for j in range(len(t)):
p = i+j
if (p>=len(t)):
p = len(t)-p-2
sys.stdout.write(t[p]+" ")
print
Die Idee
a = "PYTHON"
w = a + a[-2::-1] # Wort plus Wort rückwärts ohne letzten Buchstaben
for i in range(len(a)):
wort = ""
for j in range(len(a)):
wort += w[i+j] + " " # Alle Buchstaben auf einer Diagonalen haben die gleiche Summe i+j
print(wort)
===== Raster =====
Gegeben sind zwei Zahlen $x$ (Breite) und $y$ Höhe. Produzieren Sie dann folgende Ausgabe, Beispiel für x=6 und y=3
+---+---+---+---+---+---+
| | | | | | |
+---+---+---+---+---+---+
| | | | | | |
+---+---+---+---+---+---+
| | | | | | |
+---+---+---+---+---+---+
x = 6
y = 3
h = "+---"*x + "+"
v = "| "*x + "|"
for i in range(y):
print(h)
print(v)
print(h)
===== ASCII-Art =====
Gegeben ist die Grösse des folgenden "Quadrats", wobei $x$ für Anzahl Schrägstriche oberhalb vom X steht. Produzieren Sie damit folgende Ausgabe (für $x=2$):
+-----+
|\ /|
| \ / |
| X |
| / \ |
|/ \|
+-----+
Für $x=3$:
+-------+
|\ /|
| \ / |
| \ / |
| X |
| / \ |
| / \ |
|/ \|
+-------+
Hinweis: Ein Backslash '\' wird in einem String mit "\\" geschrieben. Der Grund ist, weil z.B. "\n" für einen Zeilenumbruch oder "\"" für den String mit einem Anführungszeichen steht.
x = 3
h = "+" + "-"*(x*2+1) + "+"
print(h)
for i in range(1,2*x+2):
l = "|"
for j in range(1,2*x+2):
if (i==x+1 and j==i):
l+="X"
else:
if (j==i):
l+= "\\"
elif(2*x+2-j==i):
l+= "/"
else:
l+=" "
l+="|"
print(l)
print(h)