2017-11-14 2 views
1

は、「練習は完璧にします」、エクササイズ4彼らはあなたを尋ねる:digit_sumエラー、文字列を反復して、整数に変更し、私はセクション8日午前Codecademy.comでPython

機能を書きますdigit_sumと呼ばれ、正の整数n を入力とし、その数字の桁の合計を返します。例えば: digit_sum(1234)1 + 2 + 3 + 4あるを返すべきです。 (あなたが与えられている 数は常にポジティブになると仮定します。)

def digit_sum(n): 
    total = 0 
    n = str(n) 
    for i in n: 
     total += int(n[i]) 
    return total 

あなただけの数字の1を追加する必要があるので、私は文字列に番号を変更したプログラムを書いた後、反復処理各桁。私が反復するとき、私は数字にアクセスして番号を整数に戻すことによって、ローカルの変数、合計に各数値を追加します。私のプログラムを書いた後、 "文字列インデックスはstrではなく整数でなければなりません"というエラーがスローされました "。これは、文字列に数値を追加しようとすると発生するエラーです。私はこれで混乱していたので、他の人が同じ問題を抱えているかどうかを調べました。私はプログラミング教師にも尋ねましたが、私たちはまだそれを理解できませんでした。誰かが私が間違っていることを説明することはできますか?

どちらの行がエラーを投げているかはわかりません。私は言及するのを忘れていましたが、彼らが解決策を提供するウェブサイト上で、私がやっていることの点では全くありません。なぜこのエラーが起こっているのかをひどく混乱しています。

+0

': 合計+ = INT(i)は' iがインデックスをis't 変数は、私もこの1つのワード値 –

答えて

1

だけに、それを変更します:Pythonで

def digit_sum(n): 
    total = 0 
    n = str(n) 
    for i in n: 
     total += int(i) 
    return total 

unike C++やその他の言語:ループ反復するため
要素自体ではなくそのインデックスをに変更します。 NのIため

+0

これは、リストではなく文字列をループするので、インデックスが必要ないことがわかりました。ありがとうございました! –

0

あなたのコードは、インデックスではなく文字列の文字を反復処理します。

def digit_sum2(n): 
    total = 0 
    n = str(n) 
    for i in range(0, len(n)): 
     total += int(n[i]) 
    return total 
+0

あります。ここで、変数をforループ宣言の中に組み込むと、インデックスを使用する必要がないことが分かりました。ありがとうございました! –

+0

@Cade B.もう少し正確にしましょう。あなたのコードでは、 'n'は数値自体から数値の文字列表現に変更されます。そして 'for i in n:'を使います。 'n'が文字列の場合、これは' i'が文字列中の文字を繰り返し処理することを意味します。だから私は文字です。 @ Elizabethの答えは 'int(i)'がその文字の整数表現を返すために働きます。私の答え 'for i in range(0、len(n))は、範囲[0、文字列nの長さ]にわたって反復する。長さKの文字列の場合、 'i'は' 0'から 'K-1'までの値をとります。 'n [i]'は文字列の 'i'の位置にある文字です。 – MFisherKDX

関連する問題