2016-08-13 16 views
1
dict = {} 
raw_input('Please enter a string :') 
letter = raw_input() 
for letter in raw_input: 
    if letter not in dict.keys(): 
     dict[letter] = 1 
    else: 
     dict[letter] += 1 

print dict 

私の誤差に基づいて、文字列に何回繰り返すかを教えてくれるプログラムを実行しようとしています:私は手紙がraw_input

line 9, in <module> 
TypeError: 'builtin_function_or_method' object is not iterable 
+0

ありません本当にあなたの質問に関連して、しかしdefaultdictを調べる。この種のコードには役立ちます。あなたの質問に対する答えはすでに以下で扱っています。 raw_input()の結果を反復したいのですが、それはあなたがしたことではありません。 –

+0

さて、この質問は、著者自身が行った研究はほとんどないことが明らかです。このような質問を実際に投稿する前に、少しだけ自分の努力を示し、最初に表示されるエラーメッセージをコピーしてください。 (または、少なくともあなたのエラーメッセージをGoogleにコピーして、10回のうち8回を助ける) –

答えて

1

は私のために働いており、入力が "質問" と出力されました1 '、' n ':1、' q ':1、' s ':1、' u ':1、' t ':1} "と書いてあります。あなたが好きなら、ループをdict[letter] = dict.get(letter,0) + 1にしてください。

1

あなたがしようとしているため、このエラーを受けていますraw_inputfor letter in raw_input:を繰り返します。

しかし、Pythonでは、__iter__()メソッドを持つオブジェクトだけが反復可能であり、raw_inputにはこのメソッドがありません(これはPythonにも組み込まれています)。

>>> print type(raw_input) 
<class 'builtin_function_or_method'> 

>>> print dir(raw_input) 
['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__text_signature__'] 

あなたは結果代わりにraw_input()を反復処理したい:あなたはtype()を使用してオブジェクトの種類とdir()を使用して、オブジェクトのメソッドのリストを調べることができます。ここでコードが改善されなければならないいくつかの方法があります(例:letters = raw_input('Please enter a string :')

  • いずれかが可変にraw_input()の結果を割り当てるか、直接raw_input('Please enter a string :')を反復します。
  • 辞書にはdict以外の変数名を使用してください。 dictはすでに組み込み自体として存在しています。
  • forと条件付きifブロックで適切な字下げを使用してください。 1、 '私は':1、 '

最終結果:「{ 'E' た私はfor letter in raw_input():for letter in raw_input:を変更したときに

dic = {} 
letters = raw_input('Please enter a string :') 
for letter in letters: 
    if letter not in dic.keys(): 
     dic[letter] = 1 
    else: 
     dic[letter] += 1 

print dic 

# output: 
# Please enter a string :success 
# {'e': 1, 's': 3, 'c': 2, 'u': 1} 
0

圧倒的にこれを行う最も簡単な方法は、組み込みのcollectionsモジュールでCounterクラスを使用することです:

from collections import Counter 

print Counter(raw_input('Please enter a string: ')) 

Counterだけ辞書のようにアクセスすることができます。

>>> a = Counter('spam spam spam') 
>>> print a 
Counter({'a': 3, 'p': 3, 's': 3, 'm': 3, ' ': 2}) 
>>> print a['s'] 
3