in eine Lösung Fehler einbauen#
Sitzung 2024-01-24
gegeben: eine Lösung
gesucht: eine kaputte Lösung, die man Studierenden zur Reparatur vorlegen kann.
(ja, das ist eine Aufgabe auf einem höheren Level).
Aufgabe mit Lösung#
gegeben:
ein String, z.B. `s = “Hallo Echo! Hallo Otto!”
eine Liste
tokens_start_stop
von Tupeln, die jeweils den Start und das Ende eines Teilstrings angeben.
s = "Hallo Echo! Hallo Otto!"
p = "01234567890123456789012"
s[0:5]
s[6:10]
'Echo'
tokens_start_stop = [(0,4), (6,9), (12,16), (18,21)]
gesucht: eine Schleife, die zur Liste tokens
die zugehörigen Teilstrings in einer Liste sammelt.
Korrekte Lösung:
# Vorbereitung
t_strings = []
for x in tokens_start_stop:
print(x)
(0, 4)
(6, 9)
(12, 16)
(18, 21)
# konventionell
t_strings = []
for start, stop in tokens_start_stop:
t_strings.append( s[start:stop+1] )
t_strings
['Hallo', 'Echo', 'Hallo', 'Otto']
# oder als List Comprehension
t_strings = [ s[start:stop+1] for (start, stop) in tokens_start_stop ]
t_strings
['Hallo', 'Echo', 'Hallo', 'Otto']
Lösung kaputtisieren#
t_strings = {}
for start, stop in tokens_start_stop:
t_strings.append( s[start:stop] )
t_strings
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[6], line 3
1 t_strings = {}
2 for start, stop in tokens_start_stop:
----> 3 t_strings.append( s[start:stop] )
4 t_strings
AttributeError: 'dict' object has no attribute 'append'
Typ von Klausuraufgabe: kaputte Lösung reparieren#
gegeben:
ein String,
z.B.
s = "Hallo Echo! Hallo Otto!"
eine Liste
tokens_start_stop
von Tupeln, die jeweils den Start und das Ende eines Teilstrings angeben.z.B.
tokens_start_stop = [(0,4), (6,9), (12,16), (18,21)]
gweünschte Ausgabe:
eine “Lösung”, die unvollstänig ist, und auch noch einen Fehler enthält.
Aufgabe: korrigieren und ergänzen Sie die fehlerhafte Lösung!
tokens_start_stop = [(0,4), (6,9), (12,16), (18,21)]
s = "Hallo Echo! Hallo Otto!"
def tokens(string, start_stop_list):
to_return = {}
for start, stop in start_stop_list:
...
return to_return
# tokens(s, tokens_start_stop) == ['Hallo', 'Echo', 'Hallo', 'Otto']
tokens(s, tokens_start_stop)
{}
# auch eine Lösung
s = "Hallo Echo! Hallo Otto!"
tokens_start_stop = [(0,4), (6,9), (12,16), (18,21)]
def tokens(string, start_stop_list):
to_return = {}
for start, stop in start_stop_list:
to_return[(start,stop)] = string[start:stop+1]
return [ x for x in to_return.values() ]
tokens(s, tokens_start_stop)
['Hallo', 'Echo', 'Hallo', 'Otto']
misc#
Da bin ich auch schon ‘drauf ‘reingefallen:
# gleicher Typ bei index und slice
s = "Hallo"
s[1], s[1:3]
('a', 'al')
# unterschiedlicher Typ bei index und slice!
s = list("Hallo")
s[1], s[1:3]
('a', ['a', 'l'])
s = "Hallo"
for x in range(len(s)):
print(s[x:x+2])
Ha
al
ll
lo
o
s = list("Hallo")
for x in range(len(s)):
print(s[x:x+3])
['H', 'a', 'l']
['a', 'l', 'l']
['l', 'l', 'o']
['l', 'o']
['o']