Seite 1 von 1

anfängerfunktion mit string und int

Verfasst: Sonntag 5. November 2006, 21:33
von bloodybeginner
ich versuche die letzten paar stunden schon verzweifelt diese aufgabe zu lösen. ich weiß, ich will auch keine ganze lösung (wäre natürlich schön, wenn doch), aber bitte ein paar tipps (am besten für den anfang des skripts!)...ich bin über jeden tipp sehr dankbar!
ich würde nicht auf die idee kommen, euch mit sowas zu belästigen, aber ich bin hier am verzweifeln! ein paar tipps würden mir bestimmt auf die sprünge helfen. danke!


Schreibt eine Funktion

pad(aString, width) -> str,

die einen String aString und eine ganze Zahl width nimmt und einen String zurückgibt, der mindestens width Zeichen lang ist. Ist aString kürzer als width, soll der resultierende String von vorne mit Leerzeichen "aufgefüllt" werden.

Das soll dann so aussehen:

>>> pad("ab", 2)
'ab'
>>> pad("abc", 2)
'abc'
>>> pad("abc", 5)
' abc'

Hinweise: Ihr müsst offenbar so viele Leerzeichen vorne dranhängen, wie width größer ist als len(aString). Erfreulicherweise gilt in python "any string"*n=="" für alle n<1.

Verfasst: Sonntag 5. November 2006, 22:16
von Whitie
Erstmal hallo hier,

vielleicht so:

Code: Alles auswählen

def pad(a_string, width):
     diff = width - len(a_string)
     if diff > 0:
         return '%s%s' % (diff * ' ', a_string)
     else:
         return a_string

>>> print pad('abc', 5)
  abc
>>> print pad('abc', 2)
abc
>>> print pad('abc', 10)
       abc
>>> 
Ich halte nichts von den print Anweisungen direkt in der Funktion, deshalb wird der fertig formatierte String zurückgegeben. Ist aber Geschmackssache, kannst Du ja noch ändern.

Gruß, Whitie

Verfasst: Sonntag 5. November 2006, 22:27
von Leonidas
Hallo bloodybeginner, willkommen im Forum,

Erstmal administratives: könntest du bitte deinen ersten Beitrag editieren und ihm einen sinnvollen Titel geben? Ansonsten ist die Antwort auf den Titel nur: "Ja"

Ich habe mal Whities Code gekürzt:

Code: Alles auswählen

In [1]: def pad(a_string, width):
   ...:     diff = width - len(a_string)
   ...:     return '%s%s' % (diff * ' ', a_string)
   ...:
In [2]: pad('ab', 2)
Out[2]: 'ab'
In [3]: pad('abc', 2)
Out[3]: 'abc'
In [4]: pad('abc', 5)
Out[4]: '  abc'
Meine Variante wäre aber:

Code: Alles auswählen

In [9]: pad = lambda a_string, width: a_string.rjust(width)
In [10]: pad('ab', 2)
Out[10]: 'ab'
In [11]: pad('abc', 2)
Out[11]: 'abc'
In [12]: pad('abc', 5)
Out[12]: '  abc'
Du siehst, sowas wie die Funktion pad() bietet Python schon mit .rjust().

Verfasst: Montag 6. November 2006, 00:27
von BlackJack
Ähem, das sieht von der Formulierung her irgendwie nach Hausaufgaben aus.

Naja, ich habe auch noch 'ne Variante:

Code: Alles auswählen

def pad(string, length):
    return '%*s' % (length, string)
Das ist das allererste mal, das ich den * an der Stelle mal benutzt habe. Ich wusste, irgendwann brauch' ich das mal. :-)

Wenn man sich auf Zeichenketten beschränkt, kann man Leonidas Ansatz noch kürzen:

Code: Alles auswählen

pad = str.rjust