Python:Int()Base 10的文字无效

时间:2013-04-13 21:41:30

标签: python literals base

我正在为一个项目编写代码来确定信用卡的有效性,而且我已经碰到了一堵墙,看起来我迄今为止尝试的所有东西都没有用。

这给了我sumofodds函数的错误,其中j = int(card [i])

错误是“使用Base 10的Int()的无效文字

有没有人可以给我一些建议?

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

2 个答案:

答案 0 :(得分:6)

好吧,不管你做了什么,你输入的内容实际上并不是Base 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'

更新:是的,您输入了'#'。这不是一个有效的数字。

答案 1 :(得分:1)

每次进入inputsumofoddssumofevens时,您都会致电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)
        # ...