Wortstruktur umändern

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.
Antworten
Obliviin
User
Beiträge: 3
Registriert: Montag 19. April 2021, 19:18

Hallo, ich habe ein Problem mit meinem Code.
Ich wollte eine Funktion schaffen,die die Wörter eines Strings umbaut : 'Hello' --> 'elloHay' ,also den ersten Buchstaben an das Ende setzt und - ay anfügt.


def pig_it(text):
  • a = text.split()
    for i in range(len(a)):
    a.map(i[0])
    for i[0] in a:
    t = i[:1]+ i[0] + 'ay'
    a = " ".join(t)
    return i
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

also eigentlich ist das alles falsch... Was passiert, wenn du den Code laufen lässt?

`a.map()` kann bei dir nicht funktionieren, weil `a` eine Liste ist, Listen aber keine Methode `map` haben. Was willst du damit überhaupt bewirken?
`return i` liefert bei dir den letzten Wert der Iteration über `for i in range(len(a))` zurück - das ist wahrscheinlich nicht gewollt?

Das ganze lässt sich auch mit einer for-Schleife lösen, die brauchst keine 2. Über Listen kann man direkt iterieren, ohne Index-Zugriff. Letzteres ist meistens ein Anti-Pattern.

Am besten gehst du das ganze schrittweise an. Also:

1. Satz in Worte zerlegen und die Worte in eine Liste packen.
2. Über die Liste iterieren.
3. Die Worte modifizieren.
4. Die modifizierten Worte wieder zu einem Satz zusammen bauen.

Wenn Schritt 1 klappt gehst du zu 2 usw.

Und bitte in Zukunft den Code in einem Codeblock posten. Den bekommst du, wenn du im Editor auf die Schaltfläche </> klickst.

Gruß, noisefloor
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wenn da auch Satzzeichen im Text vorkommen, dann kommt man mit `split()` nicht mehr so einfach weiter.

Code: Alles auswählen

#!/usr/bin/env python3
import re

import pytest


def pig_it(text):
    def pig_match(match):
        word = match.group()
        return word[1:] + word[0] + "ay"

    return re.sub(r"\w+", pig_match, text)


@pytest.mark.parametrize(
    "text, expected",
    [
        ("", ""),
        ("a", "aay"),
        ("Hello", "elloHay"),
        ("Hello, World!", "elloHay, orldWay!"),
    ],
)
def test_pig_it(text, expected):
    assert pig_it(text) == expected
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

Soll das ein Konverter für Pig Latin werden? Falls ja, dann ist der Ansatz nicht ausreichend, da die Regeln etwas komplexer sind.
Antworten