Funktionen
Da in den bisherigen Posts immer von einem Rahmen aus Einzelzeichen ausgegangen war, bin ich auch hier davon ausgegangen. Aber gemäß "Explicit is better than implicit" müsste man eigentlich noch entweder die Eingabe testen und eventuell verkürzen oder (besser) einen Fehler zurückgeben oder aber die Funktionen fürs Zeichnen anpassen.
Ok, gewonnen 
Das sollte jetzt aber endgültig funktionieren. Zumindest werde ich es nicht weiter ausbessern 

Code: Alles auswählen
#!/usr/bin/python
#-*-coding: utf-8 -*-
def bestimme_laenge(inhalt):
"""
bestimmt die Breite der längsten Textzeile
"""
return max(map(len,inhalt))
def zeichne_horizontale_linie(rahmen, laenge):
"""
gibt eine horizontale Linie zurück, die aus dem Zeichen "rahmen" besteht und eine Länge von "laenge" hat
"""
return rahmen*laenge
def zeichne_seitlichen_rahmen(rahmen, inhalt, laenge):
"""
gibt den Text "inhalt", versehen zu beiden Seiten mit je einer vertikalen Linie aus dem Zeichen "rahmen" zurück
"laenge" sollte mindestens der Länge der längsten Textzeile entsprechen.
"""
for zeile in inhalt:
return '{0}{1}{0}'.format(rahmen,zeile.center(laenge))
def zeichne_rahmen(inhalt, rahmen):
"""
umgibt den Text "inhalt" mit einem Rahmen, der aus dem Zeichen "rahmen" besteht und gibt das Ergebnis zurück
"""
inhalt = inhalt.split('\n')
laenge = bestimme_laenge(inhalt)
linie = zeichne_horizontale_linie(rahmen, laenge+2)
rahmentext = [
linie,
zeichne_seitlichen_rahmen(rahmen,inhalt,laenge),
linie
]
return '\n'.join(rahmentext)
# eine Möglichkeit des Aufrufs, erhält die Inhalte aus der Benutzereingabe
def main(begruessung, menu_inhalttext, menu_rahmentext):
print begruessung
inhalt = raw_input(menu_inhalttext)
rahmen = raw_input(menu_rahmentext)
return zeichne_rahmen(inhalt, rahmen)
if __name__ == '__main__':
print main(
'Willkommen zum "Rahmenprogramm"!',
'Geben sie einen Text ein und wir umrahmen ihn: ',
'Nun noch den zu verwendenden Rahmen:'
)

@jqz4n: mehr als eine Zeile in einem Rahmen braucht auch kein Mensch! Was ich damit meine, ist, dass in Deinem Programm immer nur die erste Zeile von Inhalt in einen Rahmen gepackt wird. Testest Du eigentlich die Sachen die Du postest auch mal?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Das obige Beispiel-Projekt wäre imho ein guter Einstieg ins Thema Unit TestingSirius3 hat geschrieben:Testest Du eigentlich die Sachen die Du postest auch mal?

encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert