Question

J'essaie de calculer le chiffre de contrôle pour une entrée ISBN sur python.jusqu'à présent, j'ai...

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

Le bit en gras est là où j'ai des problèmes, je n'arrive pas à diviser l'entrée à 10 chiffres en nombres individuels dans la liste (numlist), puis à multiplier les nombres individuels séparés par 11 puis le suivant par 10 puis le suivant par 9 etc...Pour la prochaine partie du programme, je devrai additionner ces nouveaux nombres multipliés dans la liste, puis j'utiliserai la fonction mod(%) pour obtenir le reste, puis soustrairai le nombre de 11, toute aide pour mon codage ou des déclarations incorrectes sur la façon de calculer l'ISBN seraient grandement appréciées.Merci.

Était-ce utile?

La solution

Ce code devrait vous aider :

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

Les chaînes sont itérables, donc si vous les itérez, chaque élément est renvoyé sous la forme d'une chaîne à un seul caractère.

int construit un int à partir d'une chaîne (valide).

La notation [a*b for a,b in zip(listofnums, multipliers)] est une compréhension de liste, une syntaxe pratique pour mapper des séquences sur de nouvelles listes.

Pour le reste, explorez-les dans votre réponse.Noter que reversed renvoie un générateur :si vous voulez voir ce qu'il y a "dedans", vous devrez utiliser tuple ou list pour forcer son évaluation.Cela peut être dangereux pour les générateurs infinis, pour des raisons évidentes.

Autres conseils

Je crois list() c'est ce que vous recherchez.

numlist=list(request)

Voici comment j'écrirais le code.J'espère que j'interprète correctement le code.

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"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top