Seite 1 von 1

ISBN-Nummer übergeben

Verfasst: Samstag 28. November 2009, 16:07
von usingKarmicKoala
Hi

ich habe folgendes Problem:
ich möchte mit einem kleinen Programm die Fehlerfreiheit einer ISBN-Nummer feststellen. Das funktioniert auch ganz gut aber ich muss leider wenn ich dir entsprechende Funktion aufrufe einen String mit der Nummer übergeben das heisst:

Code: Alles auswählen

checkNo('1-262-14445-7')
beispielsweise.
Gibt es ne Möglichkeit, dass ich die Nummer eingeben kann ohne Anführungszeichen?

Wäre für Antworten dankbar.

MfG UkK

Verfasst: Samstag 28. November 2009, 16:15
von b.esser-wisser
Gibt es ne Möglichkeit, dass ich die Nummer eingeben kann ohne Anführungszeichen?
Was könntest du damit meinen?
- raw_input(): dann bekommt das Programm die Nummer über stdin
- sys.argv (besser: optparse.OptionParser() ): und das Programm bekommt die Nummer als Parameter
edit: -Mit open() (+with) eine (Text-) Datei öffnen, in der die Nummern stehen, die Datei zeilenweise lesen und die Zeilen checken (Vorsicht: Zeilenumbruch auslassen)

hth, Jörg
PS.: der Funktionsname wäre besser sowas wie `verify_isbn()` oder so

Verfasst: Samstag 28. November 2009, 16:40
von usingKarmicKoala
- raw_input(): dann bekommt das Programm die Nummer über stdin
Wäre natürlich eine Möglichkeit aber wollte das eigentlich gerne als Parameter lassen
- sys.argv (besser: optparse.OptionParser() ): und das Programm bekommt die Nummer als Parameter
Kannst du das mal näher erklären?
-Mit open() (+with) eine (Text-) Datei öffnen, in der die Nummern stehen, die Datei zeilenweise lesen und die Zeilen checken (Vorsicht: Zeilenumbruch auslassen)
Dann kann ich natürlich nicht mehr in der Konsole die ISBN eingeben direkt..
PS.: der Funktionsname wäre besser sowas wie `verify_isbn()` oder so
Ja eigentlich heißt es auch anders, hab es nur so im Chat umbenannt, weil ich schnell was geschr habe ohne nachzugucken.

Verfasst: Samstag 28. November 2009, 17:08
von ms4py
Ich bin sehr verwirrt über deine Erklärungen!

Wie liest du die Datei ein (Code)?
Wie würdest du es gerne einlesen?

Verfasst: Samstag 28. November 2009, 17:11
von cofi
usingKarmicKoala hat geschrieben:
- raw_input(): dann bekommt das Programm die Nummer über stdin
Wäre natürlich eine Möglichkeit aber wollte das eigentlich gerne als Parameter lassen
Es redet niemand von etwas anderem ;)

Code: Alles auswählen

def main():
    isbn_code = raw_input("ISBN: ")
    if checkNo(isbn_code):
        print "Hooray"
main()
usingKarmicKoala hat geschrieben:
- sys.argv (besser: optparse.OptionParser() ): und das Programm bekommt die Nummer als Parameter
Kannst du das mal näher erklären?

Code: Alles auswählen

import sys
isbn_code = sys.argv[1]
if checkNo(isbn_code):
    print "Hooray"
mit

Code: Alles auswählen

python skript.py "1-..."

Verfasst: Samstag 28. November 2009, 17:14
von usingKarmicKoala
Also im Moment mache ich das so, dass ich meine Shell öffne darin python aufrufe, das Modul, in der die Methode steht, importiere und dann da ausführe.

Und ich führe halt dann so aus:

Code: Alles auswählen

verifyISBN('2-215-2154-7')
Hätte es aber gerne so:

Code: Alles auswählen

verifyISBN(2-215-2154-7)
Weiss nicht ob das möglich ist..

Verfasst: Samstag 28. November 2009, 17:18
von ms4py
Glaube nicht, dass das möglich ist, und wenn, dann nur über einen unschönen Hack, der dann eh nicht empfehlenswert wäre.
Darf ich mal fragen, was dich an den Hochkomma stört?!

Verfasst: Samstag 28. November 2009, 17:27
von usingKarmicKoala
Eigentlich finde ich es nur nervig.
Aber ist ja auch kein wichtiges Problem ;).

Danke für die Infos

Verfasst: Samstag 28. November 2009, 17:27
von Dav1d
wenn du die `-´aus der ISBN-Nummer entferntst kannst du die Nummer als "Long" übergeben, also einfach als Zahl

//Edit: meinen Satzbau korregiert ;)

Verfasst: Samstag 28. November 2009, 17:28
von cofi
usingKarmicKoala hat geschrieben:Hätte es aber gerne so:

Code: Alles auswählen

verifyISBN(2-215-2154-7)
Weiss nicht ob das möglich ist..
Ist es nicht, das ist schlicht kein gueltiges Literal, sondern (2 - 215 - 2154 - 7) = -2374

Beim Aufruf ueber die Kommandozeile benoetigst du die Strings aber nicht, da wird alles als String interpretiert, sondern er keine Leerzeichen hat, dann waeren es mehrere.

Verfasst: Samstag 28. November 2009, 17:31
von Darii
usingKarmicKoala hat geschrieben:Weiss nicht ob das möglich ist..
Nein. Könnte man in Python die __sub__ -Funktion von int überschreiben ginge das, aber das wäre eine ziemlich hässliche Methode.

Ich würde dir aber raten einfach die Syntax Syntax sein zu lassen und weiterhin mit Zeichenketten zu arbeiten wenn es sich um Zeichenketten handelt und nicht für jede Kleinigkeit eine Ausnahme in der Syntax definieren zu wollen.

Edit: Vermutlich geht es doch, du müsstest auf den Bytecode des aufrufenden Frames zugreifen und dir daraus deine ISBN-Nummer basteln, aber ob das den Aufwand Wert ist. ;)
Edit2: Nein, du hast Pech, Python optimiert die Subtraktion weg, es geht also gar nicht.

Verfasst: Samstag 28. November 2009, 18:07
von gkuhl
Dav1d hat geschrieben:wenn du die `-´aus der ISBN-Nummer entferntst kannst du die Nummer als "Long" übergeben, also einfach als Zahl
Das ist aber irgendwie auch unschön. Nach meinen Verständnis ist eine ISBN eine Folge von Zahlen und keine Zahl selbst. Der richtige Datentyp wäre dann eine Liste, wobei ich dann doch eher eine Zeichenkette für die Eingabe vorziehen würde.

Grüße
Gerrit

Verfasst: Montag 30. November 2009, 11:22
von mkesper
Was machst du, wenn deine ISBN mit 0 anfängt?

Verfasst: Montag 30. November 2009, 11:35
von dahaze
eine isbn fängt nicht mit 0 an....ganz einfach :wink:

Edit: war nicht ganz richtig, sorry. eine isbn bis zum jahr 2006 konnte mit 0 anfangen....

Verfasst: Montag 30. November 2009, 12:02
von /me
usingKarmicKoala hat geschrieben:Also im Moment mache ich das so, dass ich meine Shell öffne darin python aufrufe, das Modul, in der die Methode steht, importiere und dann da ausführe.
Du möchtest die Eingabe von zwei Zeichen (Hochkommas) sparen, importierst aber in einer Python-Shell von Hand ein Modul und rufst die Methode auf? :shock:

Warum schreibst du dier nicht einfach ein Python-Skript das den Import erledigt und dem du die ISBN als Argument mitgeben kannst? Das tolle daran: Du kannst dir dann sogar die Hochkommas sparen.