Domanda
Sto cercando di calcolare la cifra di controllo per un ingresso ISBN su Python.Finora ho ...
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()
.
Il bit in grassetto è dove ho problemi, non riesco a dividere l'ingresso a 10 cifre in singoli numeri nell'elenco (numlist) e quindi moltiplicare i numeri individuali separati di 11 poi il prossimo per 9 etc... Per la parte successiva del programma, dovrò aggiungere questi nuovi numeri moltiplicati nell'elenco insieme, utilizzerò la funzione Mod (%) per ottenere il resto sottrarre il numero da 11, qualsiasi assistenza con una qualsiasi della mia codificao dichiarazioni errate su come calcolare l'ISBN sarebbero molto apprezzate. Grazie.
Soluzione
Questo codice dovrebbe prenderti sulla strada:
listofnums = [int(digit) for digit in '1234567890']
multipliers = reversed(range(2,12))
multipliednums = [a*b for a,b in zip(listofnums, multipliers)]
.
Le stringhe sono iterabili, quindi se li iterano, ogni elemento viene restituito come una stringa di un singolo carattere.
int
Builds Un INT da una stringa (valida).
La notazione [a*b for a,b in zip(listofnums, multipliers)]
è una comprensione dell'elenco, una sintassi conveniente per la mappatura di sequenze a nuovi elenchi.
Per quanto riguarda il resto, esplorali nel tuo repp.Nota che reversed
restituisce un generatore: se vuoi vedere cosa è "in" esso, è necessario utilizzare tuple
o list
per forzare la sua valutazione.Questo può essere pericoloso per i generatori infiniti, per ovvi motivi.
Altri suggerimenti
Credo che list()
sia ciò che stai cercando.
numlist=list(request)
Ecco come vorrei scrivere il codice.Spero di interpretare correttamente il codice.
def ISBN():
request = raw_input("Please enter the 10 digit number: ")
if len(request) == 10:
numlist = list(request)
print numlist
else:
print "Invalid Input"
ISBN()
. import itertools
if sum(x * int(d) for x, d in zip(nums, itertools.count(10, -1))) % 11 != 0:
print "no good"
.