LoginSignup
takiyama-aki
@takiyama-aki (彰仁 瀧山)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

python コードの謎

Q&AClosed

解決したいこと

なぜこうなってしまうのかわからない。
下のコードは文字列sの中にある数字の数を数えるコードです。

問題のコード

def calc(l, a):
    b = l.count(a)
    return b
s = "12333445667890"
i = 1
num = [0] * 10
num[0] = calc(s, '0')
num[1] = calc(s,'1')
num[2] = calc(s, '2')
num[3] = calc(s, '3')
num[4] = calc(s, '4')
num[5] = calc(s, '5')
num[6] = calc(s, '6')
num[7] = calc(s,'7')
num[8] = calc(s, '8')
num[9] = calc(s, '9')
# while i < 10:
#     num[i] = calc(s, 'i')
#     i += 1
print(num)

上のコードを実行すると

[1, 1, 1, 3, 2, 1, 2, 1, 1, 1]

と出力されます。
僕はnum[0]からnum[9]まで1行ずつ記入するのが面倒だったので、while文を使ってまとめてしまおうと考えました。

num[0] = calc(s, '0')
num[1] = calc(s,'1')
num[2] = calc(s, '2')
num[3] = calc(s, '3')
num[4] = calc(s, '4')
num[5] = calc(s, '5')
num[6] = calc(s, '6')
num[7] = calc(s,'7')
num[8] = calc(s, '8')
num[9] = calc(s, '9')

while i < 10:
     num[i] = calc(s, 'i')
     i += 1

これで同じように実行すると

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

このように全て0と出力されてしまいます。
なぜこうなるのかわかりません。

0

2Answer

calc(s, 'i') で探しているのは文字列の 'i' ですので、正しくは calc(s, str(i)) などではないでしょうか?

2Like

Comments

  1. @takiyama-aki

    Questioner
    ありがとうございます。解決しました。

num[i] = calc(s, 'i')
の'i'をstr(i)に変えてみてください。
変数を文字列に埋め込む方法としてf'{i}'というのもあります。

2Like

Comments

  1. @takiyama-aki

    Questioner
    ありがとうございます。解決しました。

Your answer might help someone💌