Seite 1 von 1
Funktionsparameter Zahl mit führenden nullen soll string sei
Verfasst: Dienstag 5. April 2011, 21:14
von pyron
Hallo zusammen,
ich habe folgendes vor:
Ich möchte einen Funktionsparameter haben, beispielsweise 0815 innerhalb der Funktion möchte ich diesen aber als String "0815" verarbeiten. wie stelle ich sicher, dass dieser als String in die Funktion einläuft?
Es kommt immer "invalid Token" das, wie ich hier gelesen habe, damit zu tun hat, dass die Zahl dann als Oktal-Zahl erkannt wird.
Wie forciere ich Python denn nun, dass es ein String sein soll.
PS: Ich hatte schon versucht die Typenumwandlung in der Funktion selber durchzuführen, aber dann werden die führenden Nullen abgeschnitten, was schon wichtig für mich wäre diese zu behalten.
Ich hoffe ich habe mich nicht zu kompliziert ausgedrückt.
Eventuell kann mir ja jemand einen Tipp geben.
Re: Funktionsparameter Zahl mit führenden nullen soll string
Verfasst: Dienstag 5. April 2011, 23:13
von Dauerbaustelle
Äh. Du verwendest einfach String-Literale.
Re: Funktionsparameter Zahl mit führenden nullen soll string
Verfasst: Mittwoch 6. April 2011, 07:30
von pyron
Hallo,
aber wie forciere ich, dass ein String in die Methode übergeben wird:
foo(hier_soll_ein_text_eingegeben_werden):
print hier_soll_ein_text_eingegeben_werden
print str(hier_soll_ein_text_eingegeben_werden) # das würde nichts bringen, wenn eine Zahl übergeben wird,
# die mit Null anfängt.
Re: Funktionsparameter Zahl mit führenden nullen soll string
Verfasst: Mittwoch 6. April 2011, 08:03
von Darii
pyron hat geschrieben:aber wie forciere ich, dass ein String in die Methode übergeben wird:
Indem du einen übergibst. Du kannst da nichts forcieren, selbst wenn du es könntest wäre es sowieso schon zu spät. Wenn du beim Aufruf der Funktion schon eine Zahl hast ist die Null sowieso schon verloren.
Poste am besten mal einen Beispielcode der dein Problem widerspiegelt. Ich vermute einfach mal du benutzt input(), willst aber eigentlich raw_input() verwenden (input solltest du sowieso nie verwenden).
Re: Funktionsparameter Zahl mit führenden nullen soll string
Verfasst: Mittwoch 6. April 2011, 08:13
von BlackJack
@pyron: Das eine Zeichenkette übergeben wird kannst Du in der Funktion nicht forcieren. Wie sollte das auch gehen!? Das musst Du dort sicherstellen wo die Funktion aufgerufen wird. Nämlich das sie dort eben nur mit einer Zeichenkette als Argument aufgerufen wird.
Kann es sein dass Du vielleicht Python 2.x und die `input()`-Funktion verwendest? Dann lass die Finger von `input()` (mehr oder weniger grundsätzlich) und verwende `raw_input()`.
Ansonsten beschreibe das zu lösende Problem mal genauer.
Re: Funktionsparameter Zahl mit führenden nullen soll string
Verfasst: Mittwoch 6. April 2011, 14:32
von pyron
Danke für den Hinweis.
Ich denke ich muss es vorher regeln, dass auch nur ein String übergeben wird.
Falls das nicht passiert, raise ich nun eine Exception. Danke für die Erklärung.
Thread kann geschlossen werden.
Re: Funktionsparameter Zahl mit führenden nullen soll string
Verfasst: Mittwoch 6. April 2011, 16:11
von Dauerbaustelle
pyron hat geschrieben:Danke für den Hinweis.
Ich denke ich muss es vorher regeln, dass auch nur ein String übergeben wird.
Falls das nicht passiert, raise ich nun eine Exception. Danke für die Erklärung.
Thread kann geschlossen werden.
Lass das einfach raus, das mit der Exception. Die kannst davon ausgehen, dass du nicht zu blöd bist, die richtigen Typen zu verwenden, und falls du aus Versehen doch mal den falschen verwendest, tritt spätestens bei der ersten Operation mit dem Wert ein Fehler auf.
Re: Funktionsparameter Zahl mit führenden nullen soll string
Verfasst: Mittwoch 6. April 2011, 16:42
von sma
Bestimmte Typen in Python forcieren geht nur mit einer Prüfung zur Laufzeit. Python wirft immer, wenn ihm ein Typ nicht passt, einen TypeError, das kann man auch selbst machen, also
Code: Alles auswählen
def ich_will_nur_str(x):
if type(x) is not str: raise TypeError
print "Garantiert ein String:", x
Allgemein gelten solche expliziten Prüfungen als schlechter Stil. Insbesondere wenn man es wie ich so macht, dass man genau den Typ vergleicht. Die nächstbeste Alternative wäre der Test "isinstance(x, str)", doch in Python 2 gibt es neben Byte-Strings noch "richtige" Strings, die unicode-Zeichen verarbeiten könenn als Typ unicode. So ein String funktioniert eigentlich fast überall, wo auch ein Bytestring geht (und umgekehrt) sodass man eher "isinstance(x, (str, unicode))" prüfen will oder "isinstance(x, basestring)", was das ganze aber auch nicht hübscher macht.
Ich glaube ja, der ursprünglichen Frage liegt ein Verständnisproblem zugrunde. Es wird nicht zwischen der Repräsentation einer Zahl und der Zahl selbst unterschieden. Intern sollte man immer mit Zahlen arbeiten, nicht mit konkreten Repräsentationen in String-Form. Einmal den String einlesen und umwandeln, dann später zum Ausgeben wieder in die passende Repräsentation umwandeln
Die erste Zeile liest problemlos Strings mit Zahlen mit führenden Nullen ein, die letzte Zeile schreibt die Zahl mit mindestens 4 Ziffern und dann entsprechend führenden Nullen. In "x" selbst ist aber eine Zahl, mit der ich vernünftig rechnen kann.
Stefan