Bogenfaktorisierung mit Python

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
Masx1
User
Beiträge: 2
Registriert: Montag 17. Januar 2022, 21:20

Moin zusammen, ich brauche Hilf bei meiner Hausaufgabe:
Und zwar soll ein gegebener String in seine "Faktoren" zerteilt werden. Ein Beispiel:
str= "bananaban" enthält die Buchstaben [b,a,n] und soll folglich in [[b,a,n], [a,n,a,n,b],[a,n]] getrennt werden; sodass in jeder Liste alle drei Buchstaben enthalten sind, außer man ist am Ende des Wortes angelangt.
Mein Ansatz sieht wie folgt aus:
def Bogenfaktorisierung(s):
# welche Buchstaben kommen vor:
b = []
for i in s:
while i not in b:
b.append(i)
print("Diese Buchstaben kommen vor: " +str(b))
# L ist das Ergebnis
L = []
# Aktueller Eintrag
x = []
...
return L

s = "bananaban"
print(Bogenfaktorisierung(s))

weiter komme ich aber leider nicht :/
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@Masx1,

zunächst würde ich mal längere Variablennamen verwenden, sonst verliert man sehr schnell den Überblick.

Dann kann man sich das Vorgehen ja mal rein sprachlich überlegen:

Nimm Buchstaben der Zeichenkette und packe sie in eine Teilliste.
Wenn jeder der Buchstaben "b", "a", "n" mindestens einmal vorgekommen ist, lege die entstandene Teilliste in eine Sammelliste
falls noch Buchstaben in der Zeichenkette sind, mache vorher mit einer neuen, leeren Teilliste weiter.
Schließlich noch die letzte Teilliste in die Sammelliste legen.
Sammelliste ausgeben.

Dann sollte es schon einfacher sein den Code dafür zu schreiben.
Masx1
User
Beiträge: 2
Registriert: Montag 17. Januar 2022, 21:20

Hey erstmal danke, dass du dir die Zeit nimmst zum Helfen, also an sich verstehe ich die Aufgabe wirklich, es scheitert aber an der Umsetzung ^^

Hab jetzt sowas versucht:
for i in range(min(len(s), len(b))):
if s != b:
x.append(i)
L += [x]
return L

Ergebnis: [ [ ], [ ], [ ] ]

ist aber leider auch nicht genau das, was ich will :/
Benutzeravatar
__blackjack__
User
Beiträge: 13110
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Masx1: Vergiss gleich mal irgend ein Indexgehampel, man braucht für diese Aufgabe keine konkreten Indexwerte, das macht alles nur komplizierter und undurchschaubarer.

Und nimm das mit den Namen ernst. Namen sind wichtig. Wenn man mühe hat einen Namen für etwas zu finden, heisst das in der Regel etwas. Zum Beispiel, dass man nicht ganz verstanden hat, was der Wert im Kontext des Problems oder der Lösung für eine Bedeutung hat. Oder das man bei zusammengesetzten Werten wahrscheinlich Werte zusammengefasst hat, die so gar nicht zusammengehören. Und man macht bei irgendwelchen generischen, nichtssagenden Namen auch eher Fehler die nicht passiert wären wenn das da lesbar gestanden hätte, weil man dann die eine oder andere falsche Annahme über den tatsächlichen Wert nicht getroffen hätte, oder man gemerkt hätte das Wert und Name nicht zusammen passen.

Wie würdest Du denn vorgehen, wenn Du das manuell machen müsstest, mit Stift und Papier, und dass dann in Schritten so erklären, dass es jemand der ein bisschen dumm ist, verstehen/nachvollziehen könnte? Denn das musst Du letztendlich ja machen: das für einen Rechner, der kein Stück mitdenkt, formal in einer Programmiersprache beschreiben was er da tun soll um von einer Eingabe zum gewünschten Ergebnis zu kommen.

Was musst Du an Schritten machen, woran erkennst Du bei einem ”Faktor”, dass der zuende ist und der nächste ”Faktor” angefangen werden muss? Was musst Du Dir dazu merken oder vorher wissen, also beispielsweise vor der Schleife einmal ermitteln und aufschreiben, damit Du das nicht für jeden Faktor erneut machen musst? Dabei auch daran denken, dass das Beispiel "bananaban" ja nur ein kleines Beispiel ist und man da als Mensch Sachen auf den ersten Blick sieht, die bei einer beliebig langen Zeichenkette mit allen 26 Buchstaben, oder gar beliebigen Zeichen aus dem Unicode-Zeichenbereich nicht mehr sieht und sich notieren muss, um keine Fehler zu machen. Und ein Rechner sieht halt auch bei einfachen Sachen wie "bananaban" nichts von sich aus.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten