Je viens de commencer à apprendre python et j'essaie d'imprimer différentes choses en fonction de l'entrée de l'utilisateur, cependant, lorsque j'exécute le code, j'obtiens cette erreur:

    if cardNumberArray[0] == 4:
    IndexError: list index out of range

Je ne comprends pas pourquoi quand un nombre de 14-16 entiers est entré, le programme dit que cardNumberArray [0] est hors de portée, et pourquoi mon programme n'imprimera même pas les différentes valeurs données ci-dessous.

cardNumber = input("what is the number?\n")
cardNumberArray = []

for i in cardNumberArray:
  cardNumberArray.append(int(i))
  print(f"Ith value: {cardNumberArray[i]}")

if cardNumberArray[0] == 4:
    print("VISA")
elif cardNumberArray[0] == 5:
  if cardNumberArray[1] == 1 or cardNumberArray[1] == 2 or cardNumberArray[1] == 3 or cardNumberArray[1] == 4 or cardNumberArray[1] == 4 or cardNumberArray[1] == 5:
    print("MASTERCARD")
elif cardNumberArray[0] == 3:
  if cardNumberArray[1] == 4 or cardNumberArray[1] == 7:
    print("AMEX")
else:
  print("INVALID")
0
user13593201 3 juin 2020 à 05:26

4 réponses

Meilleure réponse

Votre tableau est vide car vous placez la réponse de l'utilisateur sur la variable cardNumber.

Avant d'utiliser vos Ifs, vous devez vérifier si votre tableau n'est pas vide et si ces index existent.

0
Hicham HARGAL 3 juin 2020 à 02:39

La raison pour laquelle l'index 0 est hors de portée est parce que vous n'avez pas encore ajouté de valeur à la liste, et il y a d'autres erreurs, comme vous devez convertir la chaîne en un entier, et au lieu d'indiquer la valeur dans la liste, vous devez indiquer l'indice:

cardNumber = input("what is the number?\n")
cardNumberArray = [int(cardNumber)]

for i in range(len(cardNumberArray)):
  print(f"Ith value: {cardNumberArray[i]}")
0
Ann Zen 3 juin 2020 à 02:35

Ajout de commentaires au code pour indiquer l'état du tableau à différents points:

cardNumber = input("what is the number?\n")
cardNumberArray = []  # array is empty

for i in cardNumberArray:  # array is still empty, so this loop does nothing
  cardNumberArray.append(int(i))  #  this never happens
  print(f"Ith value: {cardNumberArray[i]}")

# array is still empty since we never appended to it

if cardNumberArray[0] == 4:  # boom!

Peut-être voulez-vous que la boucle ressemble plus à for i in range(cardNumber)?

Ou peut-être que ça devrait être cardNumberArray = [int(input("what is the number?"))]? Il est difficile de discerner quelle est l'intention de ce code; tout ce que je sais, c'est que tel qu'il est écrit, le tableau est définitivement toujours vide.

0
Samwise 3 juin 2020 à 02:33

Tout cela peut être fait beaucoup plus facilement:

cardNumber = input("what is the number?\n")
#cardNumberArray = []  <<-- don't need this

card_type = {
    '4' : 'VISA', '51' : 'MASTER', '52' : 'MASTER', '53' : 'MASTER',
   '54' : 'MASTER', '55' : 'MASTER', '34' : 'AMEX', '37' : 'AMEX'
}

cc_type = 'INVALID'
for ct in card_type :
    if cardNumber.startswith(ct) :
        cc_type = card_type[ct]
        break

print( cc_type )
0
lenik 3 juin 2020 à 02:44