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.

Foi útil?

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"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top