ValueError:int()的基数为10的无效文字:'x'

时间:2012-11-07 03:13:16

标签: python-3.x

当字符串的最后一个索引有“x”或“X”(它表示为10)时,如果我有类似“1x”的东西,则表示11(1 + 10)

def main():
    s1 = "013162959x"
    partial_sums(s1)


def partial_sums(s1):
    lst =[]
    sum = 0    
    for i in range(len(s1)):
       if (i == len(s1) -1) and (s1[i] == "x" or "X"):
            sum = sum + int(s1[i]) + 10
        else:
            sum = sum + int(s1[i])
        lst.append(sum)
    print(lst)


main()

我得到了一个ValueError:基数为10的int()的无效文字:'x'

输出应为[0,1,4,5,11,13,22,27,36,46]

当字符串包含No“X”值时,它可以正常工作。

def main():
    s1 = "0131629592"  
    partial_sums(s1)

def partial_sums(s1):
    lst1 =[]
    sum = 0
    for i in range(len(s1)):
        sum = sum + int(s1[i])
        lst1.append(sum)
    print(lst1)

main()

我该如何解决?

1 个答案:

答案 0 :(得分:1)

本声明:

   if (i == len(s1) -1) and (s1[i] == "x" or "X"):
        sum = sum + int(s1[i]) + 10
即使ints1[i]

仍会在s1[i]上调用"x"。你只想要sum += 10

但是,请注意or无法按照您使用它的方式运行。要引用文档,“表达式x or y首先评估 x ;如果 x 为true,则返回其值;否则, y 并返回结果值。“ IOW,"a" == "b" or "c"返回"c",不返回False,"c"计算为True。

此外,由于sum是一个非常有用的内置函数,因此使用您自己的同名变量来隐藏它可能是一个坏主意。通常会使用total