Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Hallo,
ich habe auf Codewars.com eine Challenge gesehen, in der ein String mit Groß- und Kleinbuchstaben zu einem String mit nur Kleinbuchstaben und Bindestrichen zur Trennung umgewandelt werden soll.
Die Beste Lösung war diese hier:
a = []
for ding in aufzaehlbarem:
a.append(ausdruck _mit_ding)
# wird zu
a = [ausdruck_mit_ding for ding in aufzaehlbarem]
Eine Generator-Expression ist dabei eine leichte Abwandlung aber das spielt keine grosse Rolle. Und ein Ausdruck kann eben auch ein ternaeres if enthalten
Sarius hat geschrieben: Montag 3. Februar 2020, 18:16
Ich verstehe diese Lösung aber leider nicht, um genauer zu sein besonders wie Schleifen in einen Return Statement sein können.
Eine Umschreibung der Funktion in eine äquivalente, etwas ausführlichere Form, könnte zum Beispiel so aussehen. Vielleicht wird dann klarer, was da passiert
In [1]: def kebabize2(s):
...: result = []
...: for c in s:
...: if c.isalpha():
...: if c.islower():
...: result.append(c)
...: else:
...: result.extend(('-', c.lower()))
...: return ''.join(result).strip('-')
...:
In [2]: def kebabize(s):
...: return ''.join(c if c.islower() else '-' + c.lower() for c in s if
...: c.isalpha()).strip('-')
...:
In [3]: from hypothesis import given
In [4]: from hypothesis.strategies import text
In [5]: @given(text())
...: def test_kebabize(s):
...: assert kebabize(s) == kebabize2(s)
...:
In [7]: test_kebabize()
Dass die Lösung als die Beste dort gilt, sagt vielleicht mehr über CodeWars als den Code aus ...