Programme Python

Résolu/Fermé
Megamanbuster21 - 8 mai 2020 à 19:42
jee pee Messages postés 39633 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 avril 2024 - 8 mai 2020 à 19:55
Bonjour, j’espère que vous allez bien.

Alors voila, on doit faire un programme qui vérifie la validité d'un code rib à 23 chiffre. Je vous mets toute la consigne précise :

Les 23 chiffres représentent :
_ le code banque à 5 chiffres ;
_ le code du guichet ou de l’agence à 5
chiffres ;
_ le numéro de compte (maximum 11 chiffres
ou lettres) ;
_ la clé RIB à 2 chiffres.

Il faut aussi remplacer les lettres:

A=J=1
B=K=S=2
C=L=T=3
D=M=U=4
E=N=V=5
F=O=W=6
G=P=X=7
H=Q=Y=8
I=R=Z=9

La clé rib d’un relevé se calcule comme suit :
R= reste de la division euclidienne de (89E+ 15G+ 3N) par 97
La clé RIB est alors : 97 ???? R
Où E est le code banque, G le code guichet et N le n° du compte(avec les lettres remplacées)


Voilà le code que j'ai fait pour vérifier la validité de la clé de contrôle RIB:

def test_rib(n):
  s=0
  chaine=str(n)
  l=[int(el) for el in chaine]
  for el in l:
    if el=='A':
      el=1
    elif el=='B':
      el=2
    elif el=='C':
      el=3
    elif el=='D':
      el=4
    elif el=='E':
      el=5
    elif el=='F':
      el=6
    elif el=='G':
      el=7
    elif el=='H':
      el=8
    elif el=='I':
      el=9
    elif el=='J':
      el=1
    elif el=='K':
      el=2
    elif el=='L':
      el=3
    elif el=='M':
      el=4
    elif el=='N':
      el=5
    elif el=='O':
      el=6
    elif el=='P':
      el=7
    elif el=='Q':
      el=8
    elif el=='R':
      el=9
    elif el=='S':
      el=2
    elif el=='T':
      el=3
    elif el=='U':
      el=4
    elif el=='V':
      el=5
    elif el=='W':
      el=6
    elif el=='X':
      el=7
    elif el=='Y':
      el=8
    elif el=='Z':
      el=9
    else:
      el=el
  lE=[l[i] for i in range(0,5,1)]
  lG=[l[i] for i in range(5,10,1)]
  lN=[l[i] for i in range(10,21,1)]
  E=0
  G=0
  N=0
  c=0
  c1=4
  while c1>=0:
    for el in lE:
      m1=10**c1
      E=E+el*m1
      c1=c1-1
  c2=4
  while c2>=0:
    for el in lG:
      m2=10**c2
      G=G+el*m2
      c2=c2-1
  c3=12
  while c3>=0:
    for el in lN:
      m3=10**c3
      N=N+el*m3
      c3=c3-1
  c=c+l[21]*10+l[22]
  S=89*E+15*G+3*N
  R=S%97
  if c==97-R:
    return True
  else:
    return False

print(test_rib(16606100360117092851C68))


Le code ne veut pas prendre en compte la lettre, pourriez vous m'expliquer quelle est mon erreur et comment je peux la corriger? Merci d'avance

1 réponse

jee pee Messages postés 39633 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 avril 2024 9 235
8 mai 2020 à 19:55
Bonjour,

D'abord je ferais
print(test_rib("16606100360117092851C68"))
, mais surtout quand el contient "C", tu ne peux pas faire int(el) qui n'est accepté que si la variable contient des chiffres, pas des lettres, tu devrais traiter la chaine de départ comme des caractères, et ne faire la conversion en entier qu'une fois la transposition de la lettre effectuée.
1