Python :: Aufgabe #305

4 Lösungen Lösungen öffentlich

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


Quellcode ausblenden 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:

Quellcode ausblenden 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)



Quellcode ausblenden 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:

vote_ok
von kaschperl (400 Punkte) - 25.11.2020 um 22:21 Uhr
Quellcode ausblenden 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']
vote_ok
von Klaus (1960 Punkte) - 01.12.2020 um 14:51 Uhr
Quellcode ausblenden 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']
vote_ok
von satn1241 (3090 Punkte) - 10.01.2021 um 12:16 Uhr
Quellcode ausblenden 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)
vote_ok
von vMaex (540 Punkte) - 04.02.2021 um 11:19 Uhr
Quellcode ausblenden 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)
1988268

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.