Seite 2 von 2
Re: Funktionen
Verfasst: Samstag 1. März 2014, 17:21
von jqz4n
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.
Re: Funktionen
Verfasst: Samstag 1. März 2014, 17:46
von Sirius3
@jqz4n: was ich meinte, ist, dass in Deinem Programm immer nur das erste Zeichen von Inhalt in einen Rahmen gepackt wird.
Re: Funktionen
Verfasst: Sonntag 2. März 2014, 13:50
von jqz4n
Ok, gewonnen
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:'
)
Das sollte jetzt aber endgültig funktionieren. Zumindest werde ich es nicht weiter ausbessern

Re: Funktionen
Verfasst: Sonntag 2. März 2014, 14:08
von Sirius3
@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?
Re: Funktionen
Verfasst: Sonntag 2. März 2014, 14:19
von Hyperion
Sirius3 hat geschrieben:Testest Du eigentlich die Sachen die Du postest auch mal?
Das obige Beispiel-Projekt wäre imho ein guter Einstieg ins Thema Unit Testing

Dann wäre der ein oder andere Fehler ggf. nicht passiert...