Hallo!
ich komm mal wieder nicht weiter und suche einen Lösungsansatz. Folgendes Problem:
Ich habe einen String:
a = 500 * 'a'
Diesen möchte ich alle 50 Zeichen trennen und darunter an bestimmten Positionen einen Pfeil einfügen. Das mache ich, indem ich einen Dummy String erstelle und an den Bereichen meine Pfeile einfügen, der Rest bleibt als '-'.
Jetzt habe ich aber das Problem, dass sich die Bereiche überlappen können. Dann würde ich gerne eine neue Zeile einfügen, um darunter den Bereich zu kennzeichnen. Das ganze soll am Ende so aussehen:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-------->>>>>>>>----------------------------
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
--------------------------------------------------
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-->>>>>>>>----------------------------------
---------->>>>>>>>>>----------------------
Wie würdet ihr das machen? Ich hab an sowas gedacht:
- Die Bereiche vor dem splitten gegeneinader überprüfen
- Wenn sie überlappen herausfinden wie oft
- Dann entsprechend viele Dummy Strings erstellen
- eine Liste der Bereiche pro Dummy string erstellen
Ich hoffe das war verständlich...
Liebe Grüsse
Stefanie
Strings trennen, Bereiche einfügen...
http://www.snowflake-sl.info/index.html
Das Splitten in Teilstrings der Länge 50 hat erstmal nichts mit deinem Problem zu tun, dass es ggf. mehrere Zeilen mit Pfeilen geben muss. Du kannst das Problem immer auf nur einen String, unter dem du Pfeile anzeigen willst, runterbrechen.
Dieses Problem würde ich so angehen, dass ich Range-Objekte der Reihe nach betrachte und schaue, dass ich möglichst viele ohne Überlappung (und direkte Berührung) in eine Zeile packe.
Das alles hat wenig mit Strings zu tun, sondern ich würde mit `Range`-Objekte arbeiten, die Anfang und Ende eines Bereichs definieren. Ohne Gewähr:
Die __str__-Methode, um jetzt aus Ranges, RangeList und Range Strings zu machen, überlasse ich dem Leser. Sie ist IMHO trivial, da man nur noch gemäß der begin und end-Attribute viele "-" und ">" erzeugen muss.
Stefan
Dieses Problem würde ich so angehen, dass ich Range-Objekte der Reihe nach betrachte und schaue, dass ich möglichst viele ohne Überlappung (und direkte Berührung) in eine Zeile packe.
Das alles hat wenig mit Strings zu tun, sondern ich würde mit `Range`-Objekte arbeiten, die Anfang und Ende eines Bereichs definieren. Ohne Gewähr:
Code: Alles auswählen
class Range:
def __init__(self, begin, end):
assert begin <= end
self.begin, self.end = begin, end
def intersects(self, range):
return not (self.begin > range.end and self.end < range.begin)
class RangeList:
def __init__(self, *ranges):
self.ranges = ranges
def intersects(self, range):
return any(r.intersects(range) for r in self.ranges)
def add(self, range):
for i, r in enumerate(self.ranges):
if range.begin < r.begin:
self.ranges.insert(i, range)
return
self.ranges.append(range)
class Ranges:
def __init__(self):
self.rangelists = []
def add_range(self, range):
for ranges in self.rangelists:
if not ranges.intersects(range):
ranges.add(range)
return
self.rangelists.append(RangeList(range))
Stefan
Danke, ich versuch mal durchzusteigen
str Methode ist klar...
str Methode ist klar...
http://www.snowflake-sl.info/index.html