Python :: Aufgabe #358
3 Lösungen
String abwechselnd neu anordnen
Anfänger - Python
von JKooP
- 15.05.2021 um 10:48 Uhr
Gegeben ist ein String (Text) bestehend aus Kleinbuchstaben und Ziffern.
Ziel ist es diesen String neu anzuordnen, sodass sich Kleinbuchstaben und Ziffern abwechseln.
D.h., auf einen Kleinbuchstaben darf kein Kleinbuchstabe und auf eine Ziffer keine weitere Ziffer folgen.
Die Reihenfolge der Zeichen-Gruppen (Kleinbuchstaben bzw. Ziffern) darf nicht verändert werden.
Sind beide Zeichengruppen gleich lang, ist es egal mit welchem Zeichen begonnen wird.
Gibt es keine Lösung, soll ein Leer-String zurückgegeben werden.
Beispiele:
s = "train1234"
Lösung: "t1r2a3i4n"
s = "1234567"
Lösung: "", da nur Ziffern
s = "abcdefg"
Lösung: "", da nur Buchstaben
s = "abcdef123"
Lösung: "", nicht abwechselnd möglich
s = "abcd1234"
Lösung: "a1b2c3d4" oder "1a2b3c4d"
Schreibe eine Methode/Funktion, die obige Aufgabenstellung umsetzt.
Viel Spaß
Ziel ist es diesen String neu anzuordnen, sodass sich Kleinbuchstaben und Ziffern abwechseln.
D.h., auf einen Kleinbuchstaben darf kein Kleinbuchstabe und auf eine Ziffer keine weitere Ziffer folgen.
Die Reihenfolge der Zeichen-Gruppen (Kleinbuchstaben bzw. Ziffern) darf nicht verändert werden.
Sind beide Zeichengruppen gleich lang, ist es egal mit welchem Zeichen begonnen wird.
Gibt es keine Lösung, soll ein Leer-String zurückgegeben werden.
Beispiele:
s = "train1234"
Lösung: "t1r2a3i4n"
s = "1234567"
Lösung: "", da nur Ziffern
s = "abcdefg"
Lösung: "", da nur Buchstaben
s = "abcdef123"
Lösung: "", nicht abwechselnd möglich
s = "abcd1234"
Lösung: "a1b2c3d4" oder "1a2b3c4d"
Schreibe eine Methode/Funktion, die obige Aufgabenstellung umsetzt.
Viel Spaß
Lösungen:
Python-Code
wort = "1234567" chars = [] numbers = [] mix = [] for e in wort: try: int(e) except: chars.append(e) else: numbers.append(e) if len(chars) == len(numbers): for i in range(0, len(chars)): mix += chars[i] mix += numbers[i] print(mix) if len(chars) == len(numbers) + 1: for i in range(0, len(numbers)): mix += chars[i] mix += numbers[i] mix += chars[len(chars) - 1] print(mix) if len(chars) + 1 == len(numbers): for i in range(0, len(chars)): mix += numbers[i] mix += chars[i] mix += numbers[len(numbers) - 1] print(mix) if (len(chars) - len(numbers)) ** 2 >= 4: print("nicht möglich")
Python-Code
""" #358: String abwechselnd neu anordnen Gegeben ist ein String (Text) bestehend aus Kleinbuchstaben und Ziffern. Ziel ist es diesen String neu anzuordnen, sodass sich Kleinbuchstaben und Ziffern abwechseln. """ def merge_2(f1, f2, kz): aus1 = "" aus2 = "" for i in range(0, len(f1)): aus1 += str(f1[i]) + str(f2[i]) aus2 += str(f2[i]) + str(f1[i]) if kz == 2: print(aus1, "oder", aus2) else: print(aus1) def merge_1(inp): num = filter(lambda x: x.isdigit(), inp) num = (''.join(num)) alp = filter(lambda x: x.isalpha(), inp) alp = (''.join(alp)) if len(num) == 0 and len(alp) > 0: print('""', "da nur Buchstaben") elif len(alp) == 0 and len(num) > 0: print('""', "da nur Ziffern") elif len(num) - len(alp) < -1 or len(num) - len(alp) > 1: print('""', "nicht abwechselnd möglich") elif len(num) > len(alp): merge_2(num, alp + " ", 1) elif len(num) < len(alp): merge_2(alp, num + " ", 1) else: merge_2(alp, num, 2) merge_1("train1234") merge_1("1234567") merge_1("abcdefg") merge_1("abcdef123") merge_1("abcdef12345678") merge_1("abcd1234") merge_1("train123456")
Python-Code
def mix_word(string): #1 number = [] letter = [] for symbol in string: if symbol in list("1234567890"): number.append(symbol) else: letter.append(symbol) #2 if max(len(number), len(letter)) - min(len(number), len(letter)) > 1: return None #3 if len(number) > len(letter): size = [number, letter] else: size = [letter, number] #4 string = "" for symbol in range(len(size[0])): string += (size[0][symbol]) if not len(size[1]) - symbol <= 0: string += (size[1][symbol]) return string """ The program: 1. It splits the word into numbers and letters 2. searches an error 3. sorts the list by length 4. and mixes it The variables: string: is the word, that should to be mixed - later it is the mixed word number: contains all the numbers of the string letter: contains letters (also symbols and space) of the string symbol: goes through the items of the string size: [0] is the bigger list, [1] is the smaller list """