Pregunta

Estoy intentando calcular el dígito de control para una entrada ISBN en Python.hasta ahora tengo...

    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()

La parte en negrita es donde estoy teniendo problemas, parece que no puedo dividir la entrada de 10 dígitos en números individuales en la lista (numlist) y luego multiplicar los números individuales separados por 11, luego el siguiente por 10, luego el siguiente por 9, etc.Para la siguiente parte del programa, necesitaré sumar estos nuevos números multiplicados en la lista, luego usaré la función mod(%) para obtener el resto y luego restar el número de 11, cualquier ayuda con mi codificación. o declaraciones incorrectas sobre cómo calcular el ISBN serán muy apreciadas.Gracias.

¿Fue útil?

Solución

Este código debería ayudarle a seguir su camino:

listofnums = [int(digit) for digit in '1234567890']
multipliers = reversed(range(2,12))
multipliednums = [a*b for a,b in zip(listofnums, multipliers)]

Las cadenas son iterables, por lo que si las itera, cada elemento se devuelve como una cadena de un solo carácter.

int construye un int a partir de una cadena (válida).

la notación [a*b for a,b in zip(listofnums, multipliers)] es una lista de comprensión, una sintaxis conveniente para asignar secuencias a nuevas listas.

En cuanto al resto, explóralos en tu respuesta.Tenga en cuenta que reversed devuelve un generador:Si desea ver qué contiene, deberá utilizar tuple o list para forzar su evaluación.Esto puede resultar peligroso para generadores infinitos, por razones obvias.

Otros consejos

Creo que GeneracDicetagcode es lo que está buscando.

list()

Aquí es cómo escribiría el código.Espero que esté interpretando el código correctamente.

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top