【问题标题】:ValueError: invalid literal for int() with base 10: 'x'ValueError: int() 以 10 为底的无效文字:'x'
【发布时间】:2012-11-07 13:15:07
【问题描述】:

当字符串的最后一个索引有“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()

我该如何解决?

【问题讨论】:

    标签: python-3.x


    【解决方案1】:

    此声明:

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

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

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

    另外,因为sum 是一个非常有用的内置函数,所以用你自己的同名变量来隐藏它可能是个坏主意。经常使用total

    【讨论】:

    • 我可以这样做吗? if (i == len(s1) -1) and ((s1[i] == "x") or (s1[i] == "X")) 或者有没有更好的方法?
    • @user1804925:应该可以。你也可以做s1[i].lower() == 'x's1[i] in ('x', 'X')(我自己可能会做第一个。)
    猜你喜欢
    • 2018-09-09
    • 2020-01-04
    • 2010-12-22
    • 2011-07-07
    • 2019-10-14
    • 2022-05-19
    相关资源
    最近更新 更多