Seite 1 von 1

immer 3 Zeichen ersetzen

Verfasst: Sonntag 7. Juni 2020, 11:50
von Merle254
Hallo :)

meine Frage ist, wie ich es schaffe, dass Python immer 3 Zeichen ersetzt.

z.B. abcdefghi --> 189

also das "abc" zu 1 wird, "def" zu 8 und "ghi" zu 9

Vielen Dank schonmal im Voraus :)

Lg Merle

Re: immer 3 Zeichen ersetzen

Verfasst: Sonntag 7. Juni 2020, 11:52
von Merle254
Und Python soll erkennen, dass wenn die Reihenfolge anders ist.
Also bei defabcghi dann 819 entsteht

Re: immer 3 Zeichen ersetzen

Verfasst: Sonntag 7. Juni 2020, 12:01
von nezzcarth
Wenn du möchtest, dass Python etwas tut oder "erkennt" musst du dies programmieren. Was hast du bisher schon versucht, wie sieht dein Code aus?

Re: immer 3 Zeichen ersetzen

Verfasst: Sonntag 7. Juni 2020, 12:02
von Sirius3
Hier kannst Du doch `replace` benutzen.

Re: immer 3 Zeichen ersetzen

Verfasst: Sonntag 7. Juni 2020, 12:05
von __blackjack__
@Merle254: Du musst halt Code schreiben der das macht was Du haben willst. Also beispielsweise eine Schleife die immer 3 Zeichen betrachtet und die durch ein Zeichen ersetzt und in einer Liste sammelt die am Ende mit der `join()`-Methode auf Zeichenketten zu einer neuen Zeichenkette zusammengesetzt wird.

Statt einer Liste könnte man das auch leicht als Generatorausdruck schreiben, den man direkt als Argument an die `join()`-Methode übergibt.

Für die Abbildung von drei Zeichen auf eines wäre ein Wörterbuch (`dict`) geeignet.

Dann müsste man noch spezifizieren was passieren soll wenn drei Zeichen vorkommen für die es keine Abbildung auf ein Zeichen gibt, und das entsprechend im Code berücksichtigen.

@Sirius: Ist halt die Frage was bei "xabcde" passieren soll, also ob die dreibuchstabigen Kombinationen *irgendwo* in der Zeichenkette stehen dürfen oder immer nur an einem durch 3 teilbaren Index anfangen dürfen.

Re: immer 3 Zeichen ersetzen

Verfasst: Sonntag 7. Juni 2020, 13:16
von __blackjack__
Als Shell-Skript (Bash) könnte das beispielsweise so aussehen:

Code: Alles auswählen

#!/bin/bash
declare -A Mapping=([abc]=1 [def]=8 [ghi]=9)


Replace() {
    local string=$1
    local result=''
    for (( i = 0; i < ${#string}; i += 3 )); do
        result="$result${Mapping[${string:i:3}]}"
    done
    echo "$result"
}


Main() {
    Replace abcdefghi
    Replace defabcghi
}


[[ "${BASH_SOURCE[0]}" == "$0" ]] && Main
Hier werden Buchstabenkombinationen die nicht in der Abbildung vorkommen, einfach durch nichts ersetzt, und falls die Länge der Zeichenkette nicht durch 3 teilbar ist, werden zusätzlich ein oder zwei Zeichen am Ende einfach ignoriert. Da ist dann wieder die Frage was soll in solchen Fällen tatsächlich passieren.

Re: immer 3 Zeichen ersetzen

Verfasst: Dienstag 9. Juni 2020, 15:08
von __blackjack__
Gibt auch Programmiersprachen wo man sich so eine `replace`-Funktion grafisch zusammenklicken kann:
Bild