2010-12-07 6 views
1

文字列textを取り、テキスト中の 母音をカウントするためにPython辞書を使って関数count_vowels(text)を定義し、 母音頻度情報を文字列として返します。アイテムのシーケンスを数える、python

例:

>>> count_vowels('count vowels') 
'e: 1\nu: 1\no: 2' 
>>> print count_vowels('count vowels') 
e: 1 
u: 1 
o: 2 

これまで私が思いついたのは次のとおりです。

>>> def count_vowels(text): 
    counts = nltk.defaultdict(int) 
    for w in text: 
     if w in 'aeoiu': 
      counts[w] += 1 
    return counts 


>>> count_vowels('count vowels') 
defaultdict(<type 'int'>, {'e': 1, 'u': 1, 'o': 2}) 

だから、私のコードで何が問題なのですか?

+1

Pythonは組み込みの 'collections.defaultdict'を持っています。 'nltk.defaultdict'を使うのは少しばかり混乱します。 –

+1

宿題に[宿題]タグを付けてください。 –

+0

短い答え: 'count_vowels()'関数は文字列ではなく 'nltk.defaultdict(int)'インスタンスを返しています。関数の最後に 'defaultdict'で終わるものに基づいてコードを返すコードを追加し、あなたの望むようにフォーマットする必要があります。 – martineau

答えて

1

結果は同じです。結果がどのようにフォーマットされているかを指していますか?結果の辞書を適切な形式の文字列に変換する関数の最後にいくつかのコードを記述します。

0

整数型の辞書全体を返していると思います。辞書を繰り返し、それぞれのキーを印刷して、好きなようにフォーマットしてみてください。これは出力になり

from collections import Counter 
counts = Counter(c for c in 'count vowels' if c in 'aeoiu') 
for k, v in counts.iteritems(): 
    print k, v 

:あなたは、Python 2.7を使用している場合

2
return '\n'.join('%s: %s' % item for item in counts.items()) 
+0

+1これは唯一の答えです。要求されたとおりに文字列を返します。 –

+0

Thx S.Lott、私はスペースを逃した、3は4ではありません。 – kevpie

2

、カウンタを使用してみてください

e 1 
u 1 
o 2 

あなたは、Pythonの以前のバージョンをお持ちの場合は、することができますあなたのdefaultdictをそのまま使用して、同じiteritems()ループを使用してください:

for k, v in counts.iteritems(): 
    print k, v 
1

私がしようとするだろう:

def count_vowels(text): 
vowels = 'aeiou' 
counts ={} 
s = '' 
for letter in text: 
    if letter in vowels: 
     if letter in counts: 
      counts[letter] += 1 
     else: 
      counts[letter] = 1 
for item in counts: 
    s = s + item + ': ' + str(counts[item]) + '\n' 
return s[:-1] 

この出力:

>>> count_vowels('count vowels') 
'e: 1\nu: 1\no: 2' 
>>> print count_vowels('count vowels') 
e: 1 
u: 1 
o: 2