Bonjour Chers membres de la communauté Python,
Dans le cadre des projets d'ISN de Terminale S je dois réaliser un programme qui génère une image du code barre EAN 13 au format PBM à partir du code numérique.
Voici un lien qui détaille la structure d'un code barre EAN : https://fr.wikipedia.org/wiki/Code-barres_EAN
On s'intéresse ici plus spécialement au EAN13 (codes barres de 13 chiffres)
J'ai déjà une première version de programme mais celle ci ne convient pas si on se réfère aux informations obtenues sur les codes barres EAN 13 :
-Il manque la clé de contrôle
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 #Saisie du code binaire utilisé dans les codes barres A=[[0,0,0,1,1,0,1],[0,0,1,1,0,0,1],[0,0,1,0,0,1,1],[0,1,1,1,1,0,1],[0,1,0,0,0,1,1],[0,1,1,0,0,0,1],[0,1,0,1,1,1,1],[0,1,1,1,0,1,1],[0,1,1,0,1,1,1],[0,0,0,1,0,1,1]] B=[[0,1,0,0,1,1,1],[0,1,1,0,0,1,1],[0,0,1,1,0,1,1],[0,1,0,0,0,0,1],[0,0,1,1,1,0,1],[0,1,1,1,0,0,1],[0,0,0,0,1,0,1],[0,0,1,0,0,0,1],[0,0,0,1,0,0,1],[0,0,1,0,1,1,1]] C=[[1,1,1,0,0,1,0],[1,1,0,0,1,1,0],[1,1,0,1,1,0,0],[1,0,0,0,0,1,0],[1,0,1,1,1,0,0],[1,0,0,1,1,1,0],[1,0,1,0,0,0,0],[1,0,0,0,1,0,0],[1,0,0,1,0,0,0],[1,1,1,0,1,0,0]] CLE=[[A,A,A,A,A,A,C,C,C,C,C,C],[A,A,B,A,B,B,C,C,C,C,C,C],[A,A,B,B,A,B,C,C,C,C,C,C],[A,A,B,B,B,A,C,C,C,C,C,C],[A,B,A,A,B,B,C,C,C,C,C,C],[A,B,B,A,A,B,C,C,C,C,C,C],[A,B,B,B,A,A,C,C,C,C,C,C],[A,B,A,B,A,B,C,C,C,C,C,C],[A,B,A,B,B,A,C,C,C,C,C,C],[A,B,B,A,B,A,C,C,C,C,C,C]] #Entrée des 13 chiffres du code barre et initialisation des listes code=list(raw_input("Entrez 13 chiffres : ")) codebis=[] O=[] a=[1,0,1] ab=[0,1,0,1,0] #Les listes a et ab doivent toujours être au même emplacement #Transfert des 13 chiffres dans une liste for i in range (len(code)): codebis.append(int(code[i])) #Création d'une liste O comportant le code binaire correspondant au 13 chiffres entrés par l'utilisateur for j in range (len(code)): if j==0 : O.append(a) else : O.append (CLE[codebis[j]][0][codebis[j]]) if j==6 : O.append(ab) if j==12: O.append(a)
-Il manque la différenciation en éléments A,B,C selon le premier chiffre
(j'ai volontairement sectionné la dernière partie qui n'est que la création du fichier image)
J'ai donc ajouté le calcul de la clé de contrôle et modifié le programme pour le rendre un peu meilleur :
Néanmoins, deux problèmes se posent toujours à moi, comment simplifier ce passage qui est excessivement long ? :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 #intialisation des listes A=[[0,0,0,1,1,0,1],[0,0,1,1,0,0,1],[0,0,1,0,0,1,1],[0,1,1,1,1,0,1],[0,1,0,0,0,1,1],[0,1,1,0,0,0,1],[0,1,0,1,1,1,1],[0,1,1,1,0,1,1],[0,1,1,0,1,1,1],[0,0,0,1,0,1,1]] B=[[0,1,0,0,1,1,1],[0,1,1,0,0,1,1],[0,0,1,1,0,1,1],[0,1,0,0,0,0,1],[0,0,1,1,1,0,1],[0,1,1,1,0,0,1],[0,0,0,0,1,0,1],[0,0,1,0,0,0,1],[0,0,0,1,0,0,1],[0,0,1,0,1,1,1]] C=[[1,1,1,0,0,1,0],[1,1,0,0,1,1,0],[1,1,0,1,1,0,0],[1,0,0,0,0,1,0],[1,0,1,1,1,0,0],[1,0,0,1,1,1,0],[1,0,1,0,0,0,0],[1,0,0,0,1,0,0],[1,0,0,1,0,0,0],[1,1,1,0,1,0,0]] motif=[[A,A,A,A,A,A,C,C,C,C,C,C],[A,A,B,A,B,B,C,C,C,C,C,C],[A,A,B,B,A,B,C,C,C,C,C,C],[A,A,B,B,B,A,C,C,C,C,C,C],[A,B,A,A,B,B,C,C,C,C,C,C],[A,B,B,A,A,B,C,C,C,C,C,C],[A,B,B,B,A,A,C,C,C,C,C,C],[A,B,A,B,A,B,C,C,C,C,C,C],[A,B,A,B,B,A,C,C,C,C,C,C],[A,B,B,A,B,A,C,C,C,C,C,C]] code1=list(raw_input("Entrez 12 chiffres : "))#le treizième chffre est déterminé par une clé de contrôle code2=[] codebin=[] df=[1,0,1]#début et fin d'un code barre EAN 13 mil=[0,1,0,1,0]#bande au milieu d'un code barre EAN 13 #transfert et conversion des chiffres entrés par l'utilisateur for i in range (len(code1)): code2.append(int(code1[i])) P= [] I=[] for chiffre in code2: if chiffre%2: I.append(chiffre) else: P.append(chiffre) n=len(I) s=sum(P) if n==0: tra=s+0 elif n==1: tra=s+(3*I[0]) elif n==2: tra=s+(3*I[0])+(3*I[1]) elif n==3: tra=s+(3*I[0])+(3*I[1])+(3*I[2]) elif n==4: tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3]) elif n==5: tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4]) elif n==6: tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5]) elif n==7: tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6]) elif n==8: tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6])+(3*I[7]) elif n==9: tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6])+(3*I[7])+(3*I[8]) elif n==10: tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6])+(3*I[7])+(3*I[8])+(3*I[9]) elif n==11: tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6])+(3*I[7])+(3*I[8])+(3*I[9])+(3*I[10]) m=tra%10 cle=0 if m==0: cle=0 else: cle=10-m code2.append(cle) #Création d'une liste comportant le code binaire correspondant au 13 chiffres entrés par l'utilisateur for k in range (len(code1)):#on parcourt le code chiffre par chiffre, le premier chiffre détermine le motif if k==0 : codebin.append(df) else : codebin.append (motif[code2[k]][0][code2[k]]) if k==6 : codebin.append(mil)
J'ai déjà essayé avec des boucles for et while mais c'est un échec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 n=len(I) s=sum(P) if n==0: tra=s+0 elif n==1: tra=s+(3*I[0]) elif n==2: tra=s+(3*I[0])+(3*I[1]) elif n==3: tra=s+(3*I[0])+(3*I[1])+(3*I[2]) elif n==4: tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3]) elif n==5: tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4]) elif n==6: tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5]) elif n==7: tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6]) elif n==8: tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6])+(3*I[7]) elif n==9: tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6])+(3*I[7])+(3*I[8]) elif n==10: tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6])+(3*I[7])+(3*I[8])+(3*I[9]) elif n==11: tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6])+(3*I[7])+(3*I[8])+(3*I[9])+(3*I[10])
Ensuite, il s'agit de connaître le motif du code :
-Il faut regarder le premier chiffre, il détermine le motif suivi par le code (EX: si c'est un 0 le motif du code est [A,A,A,A,A,A,C,C,C,C,C,C])
Ma question est donc de savoir comment trouver le premier chiffre du code de l'utilisateur et associer le motif correspondant et qu'ensuite le motif associé prenne bien en compte les éléments du motif.
NB: Je suis un débutant et je n'utilise pas de modules. De plus si je me tourne vers vous c'est que je suis en grande difficulté et que la deadline approche à grands pas. J'ai fait un travail de recherche préalable sans trouver d'éléments d'aide ni de réponses.
Si jamais vous ne comprenez pas ma requête n'hésitez pas à demander des détails ou de plus amples explications.
En vous remerciant d'avance de l’intérêt porté à ma requête.
Je joins ci dessous mes coordonnées (au cas où) : twdimfs@gmail.com
Partager