====== 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)