我正在尝试 运行 一个程序,它会根据 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_input
:for 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
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_input
:for 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