我正在尝试 运行 一个程序,它会根据 raw_input 告诉你一个字母在字符串中重复了多少次

I am trying to run a program that will tell you how many times a letter is repeated in a string based on raw_input

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

我的错误:

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

您收到此错误是因为您试图遍历 raw_inputfor letter in raw_input:

然而,在Python中,只有具有__iter__()方法的对象是可迭代的,而raw_input没有这个方法(它也是Python中的内置方法) ).您可以使用 type() 查找对象的类型,使用 dir():

查找对象的方法列表
>>> 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() 结果 。以下是您的代码应该改进的一些方法:

  • 要么将 raw_input() 的结果赋给一个变量(例如:letters = raw_input('Please enter a string :')),要么直接遍历 raw_input('Please enter a string :')
  • 为您的词典使用 dict 以外的变量名称。 dict 本身已经作为内置函数存在。
  • for 和条件 if 块中使用适当的缩进。

最终结果:

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}
当我将 for letter in raw_input: 更改为 for letter in raw_input(): 并且输入为 "question" 并且输出为 "{'e': 1, 'i':

对我有用1, 'o': 1, 'n': 1, 'q': 1, 's': 1, 'u': 1, 't': 1} " ,而且我认为您可以根据需要将 for 循环内的代码部分更改为 dict[letter] = dict.get(letter,0) + 1

到目前为止,最简单的方法是使用内置 collections 模块中的 Counter class:

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