anfängerfunktion mit string und int

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.
bloodybeginner
User
Beiträge: 2
Registriert: Sonntag 5. November 2006, 21:30
Wohnort: Stuggi

anfängerfunktion mit string und int

Beitragvon bloodybeginner » Sonntag 5. November 2006, 21:33

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.
Zuletzt geändert von bloodybeginner am Montag 6. November 2006, 00:15, insgesamt 1-mal geändert.
Benutzeravatar
Whitie
User
Beiträge: 111
Registriert: Sonntag 4. Juni 2006, 12:39
Wohnort: Schulzendorf

Beitragvon Whitie » Sonntag 5. November 2006, 22:16

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 5. November 2006, 22:27

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().
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Beitragvon BlackJack » Montag 6. November 2006, 00:27

Ä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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder