Pergunta
Estou tentando calcular o dígito de verificação para uma entrada ISBN em python.até agora eu tenho...
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()
O ponto em negrito é onde estou tendo problemas, não consigo dividir a entrada de 10 dígitos em números individuais na lista (numlist) e depois multiplicar os números individuais separados por 11, depois o próximo por 10, depois o próximo por 9, etc.Para a próxima parte do programa, precisarei somar esses novos números multiplicados na lista, então usarei a função mod(%) para obter o restante e depois subtrair o número de 11, qualquer ajuda com qualquer uma das minhas codificações ou declarações incorretas sobre como calcular o ISBN seriam muito apreciadas.Obrigado.
Solução
Este código deve ajudá-lo no seu caminho:
listofnums = [int(digit) for digit in '1234567890']
multipliers = reversed(range(2,12))
multipliednums = [a*b for a,b in zip(listofnums, multipliers)]
As strings são iteráveis, portanto, se você iterá-las, cada elemento será retornado como uma string de um único caractere.
int
constrói um int a partir de uma string (válida).
A notação [a*b for a,b in zip(listofnums, multipliers)]
é uma compreensão de lista, uma sintaxe conveniente para mapear sequências para novas listas.
Quanto ao resto, explore-os em seu repl.Observe que reversed
retorna um gerador:se você quiser ver o que está "dentro" dele, você precisará usar tuple
ou list
para forçar sua avaliação.Isto pode ser perigoso para geradores infinitos, por razões óbvias.
Outras dicas
Eu acredito list()
é o que você está procurando.
numlist=list(request)
Aqui está como eu escreveria o código.Espero estar interpretando o código corretamente.
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"