code barre - division euclidienne

Répondre


Aide syntaxe LaTeX
Les BBCodes sont activés
[img] est désactivé
[flash] est désactivé
[url] est activé
Les smileys sont désactivés

Revue du sujet
   

Si vous souhaitez joindre un ou plusieurs fichiers, complétez les indications suivantes.

Étendre la vue Revue du sujet : code barre - division euclidienne

Re: code barre - division euclidienne

par sos-math(21) » jeu. 29 sept. 2022 18:05

Bonjour
Une liste étant aussi un iterable cela marchera aussi pour le parcours des éléments
Il y aura juste que les transtypages int(…) n’auront plus d’utilité car tu manipules déjà des entiers donc il sera inutile de les convertir en entiers
Néanmoins cela ne génère pas d’erreur dans l’exécution du programme donc tu peux saisir l’un ou l’autre en argument
Bonne continuation

Re: code barre - division euclidienne

par Cédric » jeu. 29 sept. 2022 16:55

Merci !
Vous m'avez permis de trouver d'où venait mon erreur.
Ainsi, si je saisis Codebarre([9,7,8,0,2,0,1,3,7,9,6,2,4]) avec l'algorithme de départ, ça fonctionne !
Merci !
C.

Re: code barre - division euclidienne

par sos-math(21) » jeu. 29 sept. 2022 13:01

Bonjour,
dans ton programme, tu fais référence à des indices donc cela suppose que ton argument est un objet itérable, c'est-à-dire dont on peut parcourir les valeurs.
Ici tu saisis un entier, qui n'est pas itérable. Il faudrait donc que tu mettes ton numéro entre guillemets ou apostrophes, afin que python le comprenne comme une chaine de caractère qui est bien un itérable dont on pourra lire les caractères.
Le problème est que désormais, dans ce type de données, chaque chiffre de ton code (L[..]) sera considéré comme une chaine de caractères
Il faudra alors que ces caractères soient reconvertis en entiers afin d'être réutilisés dans un calcul.
Je te propose la correction suivante (je ne me prononce pas sur la correction de l'algorithme vis-à-vis de la problématique) :

Code : Tout sélectionner

def code_barre(L):
    S = 0
    cle = 0
    for i in range(6):
        S = S + int(L[2*i]) + 3 * int(L[2*i+1])
        if S%10 !=0 :
            cle = 10 - S % 10
    return cle == int(L[12])
Et on a l'appel :

Code : Tout sélectionner

>>> code_barre('9780201379624')
True

Bonne continuation

code barre - division euclidienne

par Cédric » jeu. 29 sept. 2022 09:01

Bonjour,
je ne comprends pas pourquoi l'algorithme suivant pour une vérification de clé de contrôle ne fonctionne pas si je tape
par exemple Codebarre(9780201379624) et qu'il devrait afficher 4.
En effet, j'ai trouvé comme somme S = 96 à la fin de la boucle et donc comme clé 10-6 = 4.
Merci de votre aide !
C.

def Codebarre(L):
S=0
clé=0
for i in range(6):
S=S+L[2*i]+3*L[2*i+1]
if S%10!=0:
clé=10-S%10
return clé==L[12]

Haut