ISBN-Nummer übergeben

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.
Antworten
usingKarmicKoala
User
Beiträge: 27
Registriert: Samstag 28. November 2009, 15:58

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
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

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
Wir haben schon 10% vom 21. Jahrhundert hinter uns!
usingKarmicKoala
User
Beiträge: 27
Registriert: Samstag 28. November 2009, 15:58

- 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.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Ich bin sehr verwirrt über deine Erklärungen!

Wie liest du die Datei ein (Code)?
Wie würdest du es gerne einlesen?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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-..."
usingKarmicKoala
User
Beiträge: 27
Registriert: Samstag 28. November 2009, 15:58

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..
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

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?!
usingKarmicKoala
User
Beiträge: 27
Registriert: Samstag 28. November 2009, 15:58

Eigentlich finde ich es nur nervig.
Aber ist ja auch kein wichtiges Problem ;).

Danke für die Infos
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

wenn du die `-´aus der ISBN-Nummer entferntst kannst du die Nummer als "Long" übergeben, also einfach als Zahl

//Edit: meinen Satzbau korregiert ;)
Zuletzt geändert von Dav1d am Samstag 28. November 2009, 17:30, insgesamt 1-mal geändert.
the more they change the more they stay the same
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

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.
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

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
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Was machst du, wenn deine ISBN mit 0 anfängt?
dahaze
User
Beiträge: 75
Registriert: Freitag 13. März 2009, 10:57
Wohnort: im Schwabenland

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....
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Antworten