Frage
Ich versuche, die Prüfziffer für eine ISBN-Eingabe in Python zu berechnen.bisher habe ich...
def ISBN():
numlist = []
request = raw_input("Please enter the 10 digit number: ")
if len(request) == 10:
**numlist == request
print numlist**
if len(request) != 10:
print "Invalid Input"
ISBN()
ISBN()
Der fettgedruckte Teil ist, wo ich Probleme habe. Ich kann die 10-stellige Eingabe anscheinend nicht in einzelne Zahlen in der Liste (numlist) aufteilen und dann die getrennten einzelnen Zahlen mit 11, dann die nächste mit 10, dann die nächste mit 9 usw. multiplizieren.Für den nächsten Teil des Programms muss ich diese neuen multiplizierten Zahlen in der Liste addieren, dann werde ich die Funktion mod(%) verwenden, um den Rest zu erhalten, und dann die Zahl von 11 subtrahieren, um Hilfe bei meiner Codierung zu erhalten oder falsche Angaben zur Berechnung der ISBN wären sehr dankbar.Danke schön.
Lösung
Dieser Code sollte Sie auf den Weg bringen:
listofnums = [int(digit) for digit in '1234567890']
multipliers = reversed(range(2,12))
multipliednums = [a*b for a,b in zip(listofnums, multipliers)]
Zeichenfolgen sind iterierbar. Wenn Sie sie also iterieren, wird jedes Element als Zeichenfolge mit einem einzelnen Zeichen zurückgegeben.
int
Erstellt einen Int aus einem (gültigen) String.
Die Notation [a*b for a,b in zip(listofnums, multipliers)]
ist ein Listenverständnis, eine praktische Syntax zum Zuordnen von Sequenzen zu neuen Listen.
Den Rest erfahren Sie in Ihrer Antwort.Beachten Sie, dass reversed
gibt einen Generator zurück:Wenn Sie sehen möchten, was „darin“ ist, müssen Sie verwenden tuple
oder list
seine Bewertung zu erzwingen.Dies kann aus offensichtlichen Gründen für unendliche Generatoren gefährlich sein.
Andere Tipps
Ich glaube, dass list()
das ist, wonach Sie suchen.
numlist=list(request)
Hier würde ich den Code schreiben.Ich hoffe, ich interpretiere den Code richtig.
generasacodicetagpre.