Python :: Aufgabe #305
4 Lösungen
Aufgabe 4 - Versteckte Palindrome.
Fortgeschrittener - Python
von Yali23
- 09.11.2020 um 17:19 Uhr
Irgendjemand hat Strings in Listen konvertiert und dabei sind leider auch noch an zufälligen Stellen Zahlen (int und float) zwischen die Zeichen des zugrundeliegenden Strings gerutscht. Aus dem String Python ist also beispielsweise die Liste
geworden. Implementieren Sie eine Funktion cleaner, die die Zahlen aus dieser Liste enfernt und die bereinigte Liste zurückgibt. Dabei soll die ursprüngliche Liste nicht modifiziert werden.
Verwenden Sie dann die Funktion cleaner, um die Funktion palindrome zu implementieren. Diese soll als Input eine noch nicht bereinigte Liste entgegennehmen und das in der Liste versteckte Wort darauf prüfen, ob es sich bei dem Wort um ein Palindrom handelt oder nicht. Wenn das Wort ein Palindrom ist, dann soll die Funktion palindrome das ursprüngliche Wort und True als 2-Tupel zurückgeben, ansonsten das ursprüngliche Wort und False. Wir beschränken uns hier auf Wortpalindrome. Sie müssen Satzpalindrome nicht betrachten / berücksichtigen.
Beispieloutput:
Python-Code
['P', 3, 'y', 't', 0.0, 'h', 1, 1, 1.0, 'o', 'n' ]
geworden. Implementieren Sie eine Funktion cleaner, die die Zahlen aus dieser Liste enfernt und die bereinigte Liste zurückgibt. Dabei soll die ursprüngliche Liste nicht modifiziert werden.
Verwenden Sie dann die Funktion cleaner, um die Funktion palindrome zu implementieren. Diese soll als Input eine noch nicht bereinigte Liste entgegennehmen und das in der Liste versteckte Wort darauf prüfen, ob es sich bei dem Wort um ein Palindrom handelt oder nicht. Wenn das Wort ein Palindrom ist, dann soll die Funktion palindrome das ursprüngliche Wort und True als 2-Tupel zurückgeben, ansonsten das ursprüngliche Wort und False. Wir beschränken uns hier auf Wortpalindrome. Sie müssen Satzpalindrome nicht betrachten / berücksichtigen.
Beispieloutput:
Python-Code
palindrome(['P', 3, 'y', 't', 0.0, 'h', 1, 1, 1.0, 'o', 'n' ]) ('Python', False) palindrome(['A', 6, 8.3, 'n', 5, 'n', 'a']) ('Anna', True)
Python-Code
# Führen Sie diese Zelle aus, um Ihre Funktion zu testen. # Wenn das Ausführen dieser Zelle zu Fehlern führt, dann ist Ihre Implementierung vermutlich nicht korrekt. L1 = ['P', 3, 'y', 't', 0.0, 'h', 1, 1, 1.0, 'o', 'n' ] L2 = ['A', 6, 8.3, 'n', 5, 'n', 'a'] L3 = ['P', 'y', 't', 'h', 'o', 'n'] assert palindrome(L1) == ('Python', False) assert palindrome(L2) == ('Anna', True) assert palindrome(L1) == palindrome(L3) assert L1 == ['P', 3, 'y', 't', 0.0, 'h', 1, 1, 1.0, 'o', 'n' ] assert L2 == ['A', 6, 8.3, 'n', 5, 'n', 'a']
Lösungen:
Python-Code
def cleaner(liste): """ Gibt eine gegebene Liste zurück, bei der alle nicht alphabetischen Zeichen aus einer Liste """ returnliste = [] for char in liste: if str(char).isalpha(): returnliste.append(char) return returnliste def palindrome(liste): """Palindrome Test""" string_token = '' cleanlist = [] cleanlist = cleaner(liste) for i in range(int(len(cleanlist)/2)): if cleanlist[i].lower() != cleanlist[len(cleanlist)-(i+1)].lower(): return (string_token.join(cleanlist), False) return (string_token.join(cleanlist), True) # Vorgabe L1 = ['P', 3, 'y', 't', 0.0, 'h', 1, 1, 1.0, 'o', 'n' ] L2 = ['A', 6, 8.3, 'n', 5, 'n', 'a'] L3 = ['P', 'y', 't', 'h', 'o', 'n'] # Meine Ergebnisausgabe / Test print("Testausgabe:") print(palindrome(L1)) print(palindrome(L2)) print(palindrome(L3)) # Vorgabe Test aus Aufgabe assert palindrome(L1) == ('Python', False) assert palindrome(L2) == ('Anna', True) assert palindrome(L1) == palindrome(L3) assert L1 == ['P', 3, 'y', 't', 0.0, 'h', 1, 1, 1.0, 'o', 'n' ] assert L2 == ['A', 6, 8.3, 'n', 5, 'n', 'a']
Python-Code
def cleaner(data): clean_data = [] for element in data: if isinstance(element, str): clean_data.append(element) return clean_data def palindrome(raw_list): clean_list = cleaner(raw_list) palinedrome = True first_index = 0 last_index = len(clean_list)-1 for counter in range(len(clean_list)//2): if clean_list[first_index].lower() != clean_list[last_index].lower(): palinedrome = False break else: first_index += 1 last_index -= 1 return (''.join(clean_list), palinedrome) L1 = ['P', 3, 'y', 't', 0.0, 'h', 1, 1, 1.0, 'o', 'n' ] L2 = ['A', 6, 8.3, 'n', 5, 'n', 'a'] L3 = ['P', 'y', 't', 'h', 'o', 'n'] L4 = ['R', 'e', 8, 'l', 0.0, 'i', 'e', 2, 5, 'f', 'p', 'f', 7, 'e', 3, 'i', 'l', 'e', 'r'] print(palindrome(L1)) print(palindrome(L2)) print(palindrome(L3)) print(palindrome(L4)) assert palindrome(L1) == ('Python', False) assert palindrome(L2) == ('Anna', True) assert palindrome(L1) == palindrome(L3) assert L1 == ['P', 3, 'y', 't', 0.0, 'h', 1, 1, 1.0, 'o', 'n' ] assert L2 == ['A', 6, 8.3, 'n', 5, 'n', 'a'] assert L4 == ['R', 'e', 8, 'l', 0.0, 'i', 'e', 2, 5, 'f', 'p', 'f', 7, 'e', 3, 'i', 'l', 'e', 'r']
Python-Code
L1 = ['P', 3, 'y', 't', 0.0, 'h', 1, 1, 1.0, 'o', 'n' ] L2 = ['A', 6, 8.3, 'n', 5, 'n', 'a'] def cleaner(liste): bereinigte_Liste = [] for i in range(0,len(liste)): if type(liste[i])== str: bereinigte_Liste.append(liste[i]) return bereinigte_Liste def palindrome(liste_eingabe): liste=[] for i in range(0,len(liste_eingabe)): liste.append(liste_eingabe[i].lower()) for i in range(0, len(liste)): if liste[i] != liste[(len(liste)-i-1)]: p_check = False return p_check elif i > (len(liste)/2): p_check = True return p_check def cleaner_and_check(liste): wort = "".join(cleaner(liste)) print((wort, palindrome(cleaner(liste)))) return None cleaner_and_check(L1) cleaner_and_check(L2)
Python-Code
L1 = ['P', 3, 'y', 't', 0.0, 'h', 1, 1, 1.0, 'o', 'n' ] L2 = ['A', 6, 8.3, 'n', 5, 'n', 'a'] L3 = ['P', 'y', 't', 'h', 'o', 'n'] wort = [] def cleaner(liste): liste = liste for i in liste: if type(i) == type(''): wort.append(i) ausgabe = ''.join(wort) wort.clear() return ausgabe def palindrome(unsortiert): wort = ''.join(cleaner(unsortiert)) klein = wort.casefold() test = ''.join(reversed(klein)) if klein == test: return(print((wort, True))) else: return(print((wort, False))) palindrome(L1)