Eine Möglichkeit wäre es, Slicing zu verwenden. Das kannst du leicht ausprobieren mit text[::2].lower() bzw text[1::2].upper(). Die Buchstaben könnte man dann wieder zusammenfügen. Python bietet dafür die zip()-Funktion. Das kommt von Zipper (Reißverschluss) und spätestens, wenn man sich das Reißverschlussverfahren auf der Autobahn vor Augen führt, müsste die Funktionsweise klar sein.
Allerdings hat zip() ein Problem: Es hört auf, sobald ein Element keinen "Partner" mehr findet. Wenn also bei ungerader Buchstabenzahl des Wortes z.B. 3 kleine Buchstaben rauskommen und 2 große, dann ignoriert er den letzten übrig gebliebenen Buchstaben, was natürlich hierbei nicht so praktisch ist. Als Lösung bietet sich alternativ zip_longest() aus dem itertools-Modul an, dem man nämlich eine Art Dummy-Wert mitgeben kann zum Ersetzen beim fehlenden Gegenstück.
Ich würde das aber sowieso mit cycle() lösen. Der liefert in einem "Kreisel" die übergebenen Argumente. Das wären in diesem Fall immer wieder die lower() und upper()-Methode für Strings. Die verknüpfe ich mit zip() zu den einzelnen Buchstaben und rufe die einzeln mit "ihrer" Konvertier-Funktion auf. Darauf wende ich join() an, um die einzelnen Buchstaben wieder zu einer Zeichenkette zusammen zu fügen.
Code: Alles auswählen
from itertools import cycle
def convert_characters(text, converters):
return "".join(
converter(character) for converter, character
in zip(cycle(converters), text)
)
Und das lässt sich dann halt flexibel mit beliebigen Konvertern benutzen, hier wie gesagt lower() und upper().
Code: Alles auswählen
def main():
text = "Dies ist ein Beispieltext"
converters = [str.lower, str.upper]
print(convert_characters(text, converters))
converted_words = [
convert_characters(word, converters)
for word in text.split()
]
print(*converted_words)
if __name__ == "__main__":
main()
Wie man sieht, macht es natürlich einen Unterschied, ob man die Funktion auf den ganzen Text oder wortweise anwendet, da halt dementsprechend die Leerzeichen das Ergebnis beeinflussen. Diese sind ja auch Zeichen, die mitgezählt werden.