2013-04-13 2 views
4

Я пишу код для проекта, чтобы определить действительность кредитных карт, и я ударил стену, кажется, что все вещи, которые я пробовал до сих пор, не являются за работой.Python: Invalid Literal for Int() Base 10

Это дает мне ошибку для функции sumofodds где J = INT (карта [я])

Ошибка является «Invalid Буквальное для Int() с основанием 10

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

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: '#' 
+4

Что полный отслеживающий? Что вы вводите в консоль? – Blender

+2

Ну, на одном из '' j = int (card [i]) '' вызывает вход (т. Е. I-й символ карты) не является допустимым целым числом. Я предполагаю, что это тире или пробел, любой из которых даст эту ошибку. Без подробностей точно сказать точно. – Blair

+0

похоже, что вы набрали '#', который не является числом ... –

ответ

6

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

Примеры:

>>> 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' 

Update: Да вы набрали '#'. Это не действительный номер.

+0

Итак, я бы предположил, что мой цикл while не работает? – Frontier

+0

@James Это не работает, как вы думаете. Python - обязательный язык. Когда тест будет достигнут, он проверяет только значение карты. Он не будет проверять значение карты в любое другое время. –

+0

хорошая отладка. – DJJ

1

Вы звоните 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) 
     # ... 
+0

Можно ли вводить ввод вне всех функций, потому что я попытался, и у меня появились такие ошибки, как: несвязанная локальная ошибка: карта ссылается перед назначением – Frontier

+0

@ Джеймс: Конечно, вы можете с глобальным, но тем являются несколько плохой практикой; Я отредактировал свой ответ, чтобы показать код, который будет использовать аргументы. – icktoofay

Смежные вопросы