ошибка кредитного индекса cs50 pset6: строковый индекс выходит за пределы диапазона

#python #string #cs50 #credit-card #index-error

Вопрос:

При попытке запустить программу я получаю ошибку «IndexError: строковый индекс вне диапазона» в строке 19. Это потому, что я забыл завершить строку или вернуть ее в int? Очень новичок в python, поэтому буду признателен за любую помощь или мелочи.

Я попытался сделать что-то подобное doubleCheck = int(strNumber[i] * 2) , но это не решило проблему. Я делаю это неправильно?

Вот полный код на случай последующих ошибок.

 from cs50 import get_int 
import sys

ccNumber = get_int("Number: ")
strNumber = str(ccNumber)
Numlen = len(str(ccNumber))

if Numlen != 13 and Numlen != 15 and Numlen != 16:
    sys.exit()

firstSum = 0
secondSum = 0
doubleCheck = 0

for i in range(Numlen, -1, -1):
    if i % 2 == 0:
        secondSum = secondSum   strNumber[i]
    if i % 2 == 1:
        doubleCheck = strNumber[i] * 2
        if doubleCheck >= 10:
            firstSum = firstSum   (doubleCheck % 10)
            firstSum = firstSum   (doubleCheck / 10)
        else:
            firstSum  = doubleCheck;

totalChecksum = firstSum   secondSum

if totalChecksum % 10 == 0:
    if strNumber[0] == 3 and Numlen == 15:
        if strNumber[1] == 4 or strNumber[1] == 7:
            print("AMEX", end="");
    elif strNumber[0] == 4:
        if Numlen == 13 or Numlen == 16:
            print("VISA", end="")
    elif strNumber[0] == 5 and Numlen == 16:
        if strNumber[1] == 1 or strNumber[1] == 2 or strNumber[1] == 4 or strNumber[1] == 5:
            print("MASTERCARD", end="")
else:
    print("INVALID", end="")
 

Ответ №1:

Индексирование строк Python начинается с 0. Для строки длиной N допустимые индексы равны от 0 до N-1. Индекс N находится вне диапазона.

В цикле for вы получаете доступ strNumber[i] . На первой итерации i равно Numlen , что находится вне диапазона.

Возможно, вы намеревались начать цикл с Numlen - 1 ?