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: invalidliteral 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

はありますがint、まだ呼び出します。あなたは単にしたい。s1[i]s1[i]"x"sum += 10

ただし、or使用方法によっては機能しないことに注意してください。ドキュメントを引用すると、「式はx or y最初にxを評価します。xが true の場合、その値が返されます。そうでない場合は、yが評価され、結果の値が返されます。」IOWは、False ではなくを"a" == "b" or "c"返し、 True として評価されます。 "c""c"

また、sum非常に便利なビルトインであるため、同じ名前の独自の変数でシャドウするのはおそらく悪い考えです。 total代わりによく使われます。

于 2012-11-07T03:29:07.493 に答える