我正在为一个项目编写代码来确定信用卡的有效性,而且我已经碰到了一堵墙,看起来我迄今为止尝试的所有东西都没有用。
这给了我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: '#'
答案 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)
每次进入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)
# ...