Seite 1 von 2

Verfasst: Samstag 18. September 2004, 16:45
von Walker26
Ok!! Superdankeschön!!

Jetzt hab ich es auch so halbwegs verstanden nur hätte ich eine bitte, ob ihr mir das jetzt ohne erklärungen und ohne auseinanderrupfen noch mal aufschrieben könnt!

DANKE

Verfasst: Samstag 18. September 2004, 17:08
von Milan
Hi. Gut, kein Problem. Die Funktion hier holt aus einem String die ISBN raus (egal wie sie im Text steht, also unabhängig ob von "-" oder " " getrennte Nummern):

Code: Alles auswählen

def get_isbn(isbn_text):
    ziffern = "".join([a for a in isbn_text if a.isdigit()][:9])
    psum=sum([(i+1)*int(a) for (i,a) in enumerate(ziffern)]) % 11
    ziffern += "0123456789X"[psum]
    return ziffern
Es gibt bestimmt noch weitere 1000 Varianten, die zu bestimmen, aber um die haben Dookie und ich im Kern diskutiert.

Verfasst: Samstag 18. September 2004, 17:08
von Walker26
Ich hab noch ne Frage und zwar schreibe ich das programm dann morgen zu 'Ende und wollte dann fragen wenn ich es fertig hab, ob es jemand von euch mal jemand durchgucken kann und mir dann dazu sagen kann ob es korrekt ist und so!!

Verfasst: Samstag 18. September 2004, 17:09
von Walker26
@Milan:

Das letzte was du mir geschickt hast ist dann das korrekte oder?

DANKE ihr seid meine rettung

Verfasst: Samstag 18. September 2004, 19:01
von Dookie
Der letzte von Milan gepostete Code, ist praktisch die Funktions zum rauspfriemeln der ISBN. Also das ganze in eine Funktion verpackt.

Jetzt kannst Du schreiben:

Code: Alles auswählen

pure_isbn = get_isbn("0-439-35806-X")
# oder
long_isbn = "0-439-35806-X"
pure_isbn = get_isbn(long_isbn)
Natürlich muss dazu der Code von get_isbn auch im script stehen.


Gruß

Dookie

Verfasst: Sonntag 19. September 2004, 08:52
von Walker26
Danke!

Verfasst: Sonntag 19. September 2004, 09:22
von Milan
Hi. Ich schreib es am besten mal in zwei Varianten auf, damit du es anhand deines Vorgehens vergleichen kannst und siehst, wie man es in Python anders machen kann.
Also hier ist die kommentierte ausführliche Version:

Code: Alles auswählen

isbn=raw_input("ISBN eingeben: ") #1. Eingabe
#2. verarbeitung
for i in xrange(len(isbn)):
    position_strich=isbn.find("-") # Position eines Striches ermitteln...
    if position_strich != -1: # ...falls ein Strich existiert
        isbn=isbn[:position_strich]+isbn[postiotion_strich+1:]
# alle Striche raus, bilden der Prüfsumme
psum=0
for i in xrange(10):
    if isbn[i] in ("X","x"): #Ein X kann nicht direkt in eine Zahl umgewandelt werden
        stelle=10
    else:
        stelle=int(isbn[i])
    # stelle enthält nun den numerischen Wert der i. ten Stelle in der isbn
    # wobei Python mit 0 anfängt zu zählen
    psum+=stelle*(i+1) # deswegen muss mit i+1 multipliziert werden
# fertig, überprüfen der Prüfsumme (3.)
if (psum % 11) != 0:
    print "Falsch"
else:
    print "richtig"
So, und jetzt die Kurzvariante:

Code: Alles auswählen

isbn=raw_input("ISBN eingeben: ") #1. Eingabe
isbn=isbn.replace("-","") #Entfehrnen der Striche
# Wenn man überlegt, kann man auch prüfen, ob die Prüfsumme der 1. bis 9. Stelle
# gleich der 10. Stelle der ISBN ist. Das ist leichter zu berechnen.
#2.: Berechnung der Prüfsumme von den ersten 9 Stellen
psum=sum([(i+1)*int(a) for (i,a) in enumerate(isbn[:9])]) % 11
#überprüfen dieser Summe:
# links: berechnete 10. Stelle; rechts: tatsächliche 10. Stelle
if "0123456789x"[psum] == isbn[9].lower(): 
    print "richtig"
else:
    print "falsch"
Sollte ich noch klarheiten gelassen haben ( :wink: ), bitte schreiben :lol: .
mfg Milan

Verfasst: Sonntag 19. September 2004, 13:30
von Walker26
DANKE an alle dir mir jetzt geholfen haben, supuer super dankeschön!!!!
Wenn ich euch kennen würde, würdet ihr jeder 2-4 bierchen kriegen!!!!ich kann mich garnicht oft genug bedanken