Erreur : "'int' object is not subscriptable"

Erreur : "'int' object is not subscriptable" - Python - Programmation

Marsh Posté le 04-01-2020 à 11:45:31    

Bonjour, je viens ici car j'ai un certain problème.  
Je travaille sur un programme Python permettant de vérifier un code ISBN à 13 chiffres pour savoir si celui-ci est correct.  
 
Cependant, lorsque j'exécute le programme afin de voir s'il fonctionne bien, le message d'erreur suivant s'affiche :  
 

Code :
  1. if chiffre[0]==9:
  2. TypeError: 'int' object is not subscriptable


 
Voici par ailleurs le code en entier avec la ligne concernée surlignée :
 

Code :
  1. ISBN=input("Le code ISBN est " )
  2. for chiffre in range(1):
  3.     if chiffre!=9:
  4.         print("Le code ISBN est incorrect (premier chiffre)." )
  5. for chiffre in range(2,2):
  6.     if chiffre!=7:
  7.         print("Le code ISBN est incorrect (second chiffre)." )
  8. for chiffre in range(3,3):
  9.     if chiffre!=8:
  10.         if chiffre==9:
  11.             print("Le code ISBN ne peux pas avoir 9 comme troisième chiffre pour le moment, il est donc incorrect." )
  12.         else:
  13.             print("Le code ISBN est incorrect (troisème chiffre)." )
  14. for chiffre in range(0,12):
  15.     if chiffre[0]==9:
  16.         if chiffre[1]==7:
  17.             if chiffre[2]==8:
  18.                 PremPartie=chiffre[0]+chiffre[1]+chiffre[2]+chiffre[3]+chiffre[4]+chiffre[5]+chiffre[6]+chiffre[7]+chiffre[8]+chiffre[9]+chiffre[10]+chiffre[11]
  19.                 DeuxPartie=2*(chiffre[1]+chiffre[3]+chiffre[5]+chiffre[7]+chiffre[9]+chiffre[11])
  20.                 TroiPartie=PremPartie+DeuxPartie
  21.                 for i in TroiPartie(2,2):
  22.                     QuatPartie=i
  23.                 CinqPartie=10-QuatPartie
  24. if chiffre[12]!=CinqPartie:
  25.     print("Le code ISBN est incorrect (clé)." )
  26. else:
  27.         print("Le code ISBN est correct." )


 
J'ai bien regardé sur le Net ainsi que sur ce forum même, mais rien n'a pu vraiment m'aider à comprendre mon erreur.

Reply

Marsh Posté le 04-01-2020 à 11:45:31   

Reply

Marsh Posté le 05-01-2020 à 13:34:45    

Bonjour,
 
Chiffre est un int et non pas un tableau. Tu ne peux donc pas faire chiffre[X].
Regarde tes conditions sur les lignes 3, 6 et 9.  
 
dd

Reply

Marsh Posté le 05-01-2020 à 15:56:42    

C'est ce que j'ai cru comprendre, mais dans ce cas, comment pourrais-je résoudre cette situation ?  [:jyggalag]

Reply

Marsh Posté le 06-01-2020 à 11:36:03    

jyggalag a écrit :

C'est ce que j'ai cru comprendre, mais dans ce cas, comment pourrais-je résoudre cette situation ?  [:jyggalag]


 
Pour reprendre ton code :  
 
- ligne 1 : tu récupères ton ISBN dans la variable ISBN, mais ensuite tu n'en fais plus rien.
 
- lignes 2, 5, 8, 14 : tu fais totalement fausse route en utilisant range() pour découper ton ISBN. Range() te fournit une suite d'entiers selon les bornes que tu fournis en argument, ce n'est pas du tout la même chose. Si tu veux découper ton ISBN, tu dois slicer la chaine de caractères contenue dans ta variable ISBN.
 
Exemples :
 

Code :
  1. >>> ISBN = "1234567890ABC"
  2. >>> ISBN[2:2]
  3. '3'
  4. >>> ISBN[2:5]
  5. '345'
  6. >>> ISBN[9:]
  7. '0ABC'


 
https://docs.python.org/3/tutorial/ [...] ml#strings


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 06-01-2020 à 17:57:53    

Hmm. Je vais essayer, cela résoudra normalement mon problème. Merci encore !  [:jyggalag]  
 
(Je mettrai le topic en "résolu" une fois que j'aurai achevé mon script)
 
Edit : Après correction du script, celui-ci m'amène à une nouvelle erreur. Voici d'abord le bloc concerné, ainsi que la ligne concernée surlignée en rouge.
 

Code :
  1. if ISBN[0]==9:
  2.     if ISBN[1]==7:
  3.         if ISBN[2]==8:
  4.             PremPartie=ISBN[0]+ISBN[1]+ISBN[2]+ISBN[3]+ISBN[4]+ISBN[5]+ISBN[6]+ISBN[7]+ISBN[8]+ISBN[9]+ISBN[10]+ISBN[11]
  5.             DeuxPartie=2*(ISBN[1]+ISBN[3]+ISBN[5]+ISBN[7]+ISBN[9]+ISBN[11])
  6.             TroiPartie=PremPartie+DeuxPartie
  7.             QuatPartie=map(int,str(TroiPartie))
  8.             CinqPartie=QuatPartie[1]
  9.             SixPartie=10-CinqPartie


 
Et voici l'erreur :  
 

Code :
  1. if ISBN[12]!=SixPartie:
  2. NameError: name 'SixPartie' is not defined


 
Il me faudrait une réponse absolument avant demain...  [:jyggalag]


Message édité par jyggalag le 06-01-2020 à 18:28:22
Reply

Marsh Posté le 06-01-2020 à 22:44:48    

Ta variable SixPartie est définie uniquement si les 3 conditions sont remplies (lignes 1, 2 et 3)

 

Si ton code ne passe pas dans ces 3 conditions, alors aucune de tes variables xxxPartie ne sera définie, dont SixPartie. Pour qu'elle soit définie, ton ISBN doit commencer par "978".

 

Tu dois initialiser tes 6 variables avant les 3 tests :

 
Code :
  1. PremPartie = None
  2. DeuxPartie = None
  3. # ainsi de suite jusqu'à SixPartie
  4.  
  5. if ISBN[0] == 9:
  6.   if ISBN[1] == 7:
  7.      if ISBN[2] == 8:
  8.         PremPartie = (...)
  9.         # etc
 

Et au passage, modifie tes bornes pour éviter tes if imbriqués :

 
Code :
  1. if ISBN[0:3] == '978':
  2. (...)


Message édité par Harkonnen le 06-01-2020 à 23:08:10

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 07-01-2020 à 09:26:48    

Oh. Merci bien !  [:jyggalag]  
 
Ca devrait suffir, normalement.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed