lehrkraefte:blc:informatik:ffprg1-2020:stringvar

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.

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

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 

Lösungsvorschlag

Lösungsvorschlag

textquadrat.py
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
textquadrat2.py
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 

Lösungsvorschlag

Lösungsvorschlag

textquadrat2.py
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

textquadrat3.py
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)

Gegeben sind zwei Zahlen $x$ (Breite) und $y$ Höhe. Produzieren Sie dann folgende Ausgabe, Beispiel für x=6 und y=3

+---+---+---+---+---+---+
|   |   |   |   |   |   |
+---+---+---+---+---+---+
|   |   |   |   |   |   |
+---+---+---+---+---+---+
|   |   |   |   |   |   |
+---+---+---+---+---+---+

Lösungsvorschlag

Lösungsvorschlag

raster.py
x = 6
y = 3
 
h = "+---"*x + "+"
v = "|   "*x + "|"
for i in range(y):
    print(h)
    print(v)
print(h)

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.

Lösungsvorschlag

Lösungsvorschlag

asciiart.py
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)
  • lehrkraefte/blc/informatik/ffprg1-2020/stringvar.txt
  • Last modified: 2022/03/24 13:50
  • by Ivo Blöchliger