Grundrisse von Python!!

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.
Walker26
User
Beiträge: 10
Registriert: Samstag 18. September 2004, 08:34
Kontaktdaten:

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
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

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.
Zuletzt geändert von Milan am Samstag 18. September 2004, 17:10, insgesamt 1-mal geändert.
Walker26
User
Beiträge: 10
Registriert: Samstag 18. September 2004, 08:34
Kontaktdaten:

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!!
Walker26
User
Beiträge: 10
Registriert: Samstag 18. September 2004, 08:34
Kontaktdaten:

@Milan:

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

DANKE ihr seid meine rettung
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
[code]#!/usr/bin/env python
import this[/code]
Walker26
User
Beiträge: 10
Registriert: Samstag 18. September 2004, 08:34
Kontaktdaten:

Danke!
Zuletzt geändert von Walker26 am Sonntag 19. September 2004, 19:09, insgesamt 1-mal geändert.
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

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
Walker26
User
Beiträge: 10
Registriert: Samstag 18. September 2004, 08:34
Kontaktdaten:

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
Antworten