2

当字符串上的最后一个索引有“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: invalid literal for int() with base 10: 'x'

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

当字符串不包含“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()

我该如何解决?

4

1 回答 1

1

这个说法:

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

即使is仍然会调用int。你只是想要.s1[i]s1[i]"x"sum += 10

但是,请注意,这or与您使用它的方式不同。引用文档,“表达式x or y首先评估x;如果x为真,则返回其值;否则,评估y并返回结果值。” IOW,"a" == "b" or "c"返回"c",而不是 False,并"c"评估为 True。

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

于 2012-11-07T03:29:07.493 回答