2012-11-07 135 views
2

当字符串的最后一个索引有“x”或“X”(它表示为10),所以如果我有像“1x”这意味着图11(1 + 10)ValueError:无效文字为int()与基10:'x'

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]

当字符串包含无“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

本声明:

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

s1[i]即使s1[i]"x"调用int。你只需要sum += 10

但是请注意,or不适用于您的使用方式。引用文档“x or y首先评估x;如果x为true,则返回其值;否则,评估y并返回结果值。 IOW,"a" == "b" or "c"返回"c",而不是False,并且"c"评估为True。

此外,因为sum是一个非常有用的内建函数,所以将它与您自己的变量映射到相同的名称可能是一个坏主意。经常使用total

+0

我可以这样做吗?如果(i == len(s1)-1)和((s1 [i] ==“x”)或(s1 [i] ==“X”))还是有更好的方法吗? – user1804925

+0

@ user1804925:应该有效。你也可以在('x','X')'中做's1 [i] .lower()=='x''或s1 [i](我可能会做第一个,我自己。) – DSM

相关问题