Python: недопустимый буквенный индекс для базы данных Int () 10

Я пишу код для проекта, чтобы определить действительность кредитных карт, и я ударил стену, кажется, что все, что я пробовал до сих пор, не работает.

Это дает мне ошибку для функции sumofodds, где j = int (card [i])

Ошибка: «Недопустимый литерал для Int () с базой 10

Есть ли кто-нибудь, кто может мне помочь?

def sumofdoubles(): card=input() x=len(card) summ=0 for i in range(x-2,-1,-2): j=int(card[i]) u=j+j if u>9: h=u/2 summ=summ+h return(summ) def sumofevens(): card=input() x=len(card) summ=0 for i in range(x-2,-1,-2): j=int(card[i]) u=j+j if u<9: summ=summ+u return(summ) def sumofodds(): summ=0 card=input() x=len(card) for i in range(x-1,-1,-2): j=int(card[i]) summ=summ+j return(summ) def main(): card=input() length=len(card) summ=0 while(card!="#####"): if (card[0]=='4' or card[0]=='5' or card[0]=='6' or (card[0]=='3' and card[1]=='1')): dbls=sumofdoubles() evens=sumofevens() odds=sumofodds() if((dbls+evens+odds)%10==0): print("Valid") main() 

Это полная трассировка для тех, кто интересуется

  python test.py<s.input File "test.py", line 52 in <module> main() File "test.py", line 48, in main odds=sumofodds() File "test.py", line 33, in sumofodds j=int(card[i]) ValueError: invalid literal for int() with base 10: '#' 

Ну, что бы вы ни делали, вы набрали то, что на самом деле не является базовым номером 10. Это включает в себя все, что не является числом символов или пробелов. Так что не вводите это. 🙂

Примеры:

 >>> int('04.9') Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: '04.9' >>> int('4-') Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: '4-' >>> int("Jack") Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: 'Jack' 

Обновление: Да, вы набрали «#». Это не действительный номер.

Вы вызываете input каждый раз, когда вы отправляетесь в sumofodds , sumofevens или sumofdoubles , поэтому каждый из них будет работать над отдельным номером кредитной карты. Вероятно, вы хотите только вводить input в main и должны передавать card в качестве аргумента для каждой из этих других функций.

Тогда ваши функции могут выглядеть примерно так:

 def sum_of_odds(card): x = len(card) # ... # ... def main(): while True: card = input() if card == '#####': break odds = sum_of_odds(card) # ...