Python:Int()基10的文本无效
我正在为一个项目编写代码,以确定信用卡的有效性。我遇到了一个难题,似乎到目前为止我尝试过的所有方法都不起作用 这给了我一个sumofodds函数的错误,其中j=int(卡[i]) 错误为“基数为10的Int()的文本无效” 有人能给我一些建议吗Python:Int()基10的文本无效,python,literals,base,Python,Literals,Base,我正在为一个项目编写代码,以确定信用卡的有效性。我遇到了一个难题,似乎到目前为止我尝试过的所有方法都不起作用 这给了我一个sumofodds函数的错误,其中j=int(卡[i]) 错误为“基数为10的Int()的文本无效” 有人能给我一些建议吗 def sumofdoubles(): card=input() x=len(card) summ=0 for i in range(x-2,-1,-2): j=int(card[i])
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()
def sumofdoubles():
卡片=输入()
x=透镜(卡片)
总和=0
对于范围(x-2,-1,-2)内的i:
j=int(卡[i])
u=j+j
如果u>9:
h=u/2
总和=总和+h
返回(总和)
def sumofens():
卡片=输入()
x=透镜(卡片)
总和=0
对于范围(x-2,-1,-2)内的i:
j=int(卡[i])
u=j+j
如果是这样,不管你做了什么,你输入的东西实际上不是一个以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'
>>int('04.9')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:基数为10的int()的文本无效:“04.9”
>>>int('4-')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:基数为10的int()的文本无效:“4-”
>>>int(“杰克”)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:以10为基数的int()的文本无效:“Jack”
更新:是的,您键入了一个“#”。这不是一个有效的号码。您每次进入sumofodds
、sumofevens
、或sumofodoubles
,都会呼叫input
,所以他们每个人都会使用一个单独的信用卡号。您可能只想在main
和sh中呼叫input
应该将卡作为参数传递给其他每个函数
然后,您的函数可能如下所示:
def sum_of_odds(card):
x = len(card)
# ...
# ...
def main():
while True:
card = input()
if card == '#####':
break
odds = sum_of_odds(card)
# ...
什么是完全回溯?您在控制台中键入了什么?在其中一个j=int(card[i])
上调用输入(即,卡的第i个字符)不是一个有效的整数。我猜它是一个破折号或空格,两者中的任何一个都会产生错误。如果没有更多详细信息,很难准确判断。看起来你键入了一个
,它不是一个数字……我需要使用“#####”作为我的sentinel值,但在这种情况下,你需要添加一个测试(即if
语句)对于int()之前的sentinel值
如果找到,请调用并采取适当的操作。是否可以将输入置于所有函数之外,因为我已经尝试过,并且遇到了错误,例如:未绑定本地错误:以前引用过卡assignment@James:当然可以使用全局设置,但这些都是不好的做法;我编辑了我的答案,以显示一些d使用参数。@James它并没有像您想象的那样工作。Python是一种命令式语言。它只会在达到测试时检查卡值。它不会在任何其他时间检查卡值。
def sum_of_odds(card):
x = len(card)
# ...
# ...
def main():
while True:
card = input()
if card == '#####':
break
odds = sum_of_odds(card)
# ...