【问题标题】:Python: Invalid Literal for Int() Base 10Python:Int() Base 10 的无效文字
【发布时间】:2013-04-14 06:00:41
【问题描述】:

我正在为一个项目编写代码来确定信用卡的有效性,但我碰壁了,似乎到目前为止我尝试过的所有方法都不起作用。

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

错误是“Invalid Literal for Int() with Base 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: '#'

【问题讨论】:

  • 完整的追溯是什么?你在控制台中输入了什么?
  • 好吧,在j=int(card[i]) 调用之一上,输入(即卡片的第 i 个字符)不是有效的整数。我的猜测是它是一个破折号或空格,其中任何一个都会给出该错误。没有更多细节,很难准确判断。
  • 看起来您输入的不是数字#...
  • 我需要使用“#####”作为我的哨兵值
  • 在这种情况下,您需要在int() 调用之前为您的标记值添加一个测试(即if 语句),并在找到它时采取适当的措施。

标签: python literals base


【解决方案1】:

嗯,无论您做什么,您输入的内容实际上都不是以 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'

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

【讨论】:

  • @James 它不像你想象的那样工作。 Python 是一种命令式语言。它只会在达到测试时检查卡值。它不会在任何其他时间检查卡值。
【解决方案2】:

每次进入sumofoddssumofevenssumofdoubles 时,您都会调用input,因此他们每个人都将使用一个单独的信用卡号。您可能只想在main 中调用input,并且应该将card 作为参数传递给其他每个函数。

你的函数可能看起来像这样:

def sum_of_odds(card):
    x = len(card)
    # ...

# ...

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

【讨论】:

  • 是否可以将输入放在所有函数之外,因为我已经尝试过并且遇到过以下错误:未绑定本地错误:在分配之前引用了卡
  • @James:当然你可以使用全局,但这些做法有些不好;我已经编辑了我的答案以显示一些会使用参数的代码。
猜你喜欢
  • 2014-07-25
  • 1970-01-01
  • 2017-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
相关资源
最近更新 更多