code barre - division euclidienne
code barre - division euclidienne
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]
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]
-
- Messages : 10388
- Enregistré le : lun. 30 août 2010 11:15
Re: code barre - division euclidienne
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) :
Et on a l'appel :
Bonne continuation
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])
Code : Tout sélectionner
>>> code_barre('9780201379624')
True
Re: code barre - division euclidienne
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.
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.
-
- Messages : 10388
- Enregistré le : lun. 30 août 2010 11:15
Re: code barre - division euclidienne
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
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