3

次のパターンを使用して印刷する必要がある整数のパーセンテージのリストがあります。

The index of a value, a tab (8 spaces), a '*' printed for each percentage point

また、インデックスの値が 0 の場合は、「1 パーセント未満」と出力します

私はこのコードを試しました:

for b in new_tally:
    if b > 0:
        print new_tally[b], \t, '*' * b
    else:
        print 'Less than 1% of words had this length'

ただし、エラー コードが表示され続けます: リスト インデックスが範囲外です。

私はこれをまったく理解していません。誰かが私が間違ったことを指摘できますか?

4

3 に答える 3

5

あなたが欲しかったコードは次のとおりだと思います:

>>> new_tally = [5, 7, 8, 6, 4, 2]
>>> for i, b in enumerate(new_tally, 1):
        print i, ':', b, '*' * b

1 : 5 *****
2 : 7 *******
3 : 8 ********
4 : 6 ******
5 : 4 ****
6 : 2 **

元のトレースバックの原因は、リスト メンバーが括弧の代わりに角括弧を使用して検索されることです。 new_tally(i)関数呼び出しです。 new_tally[i]インデックス付きルックアップです。

于 2011-11-02T18:44:12.847 に答える
0

最初のピース:

new_tally = [5, 7, 8, 6, 4, 2]
for b in new_tally:
    print b

2番目のピース:

new_tally = [5, 7, 8, 6, 4, 2]
for i in range(len(new_tally)):
    print i, new_tally[i]

上記の2つはほぼ同じことをします。順番に要素にアクセスする(最初のアプローチ)か、順次インデックスでリスト要素にアクセスする(2番目のアプローチ)かを混同しています。

于 2011-11-02T19:38:26.707 に答える
0
for key,val in new_tally.iteritems():
    print('{k} {a}'.format(k=key,a='*'*int(val)))

または、頻度の降順でヒストグラムを並べ替える場合は、次のようにします。

import operator
for key,val in sorted(new_tally.items(),key=operator.itemgetter(1),reverse=True):
    print('{k} {a}'.format(k=key,a='*'*int(val)))
于 2011-11-02T18:44:50.520 に答える