我正在教自己编写代码,所以如果答案很明显或我的代码很残破,请原谅我。我尝试将一个简单的搜索引擎组合在一起,该引擎可以计算单词出现的次数,但是我不断收到上述错误消息,因此我什至无法对其进行测试。知道我在做什么错吗?
def search(text_body, phrase):
count = 0
word_length = len(phrase)
for i in text_body:
if phrase == text_body[i:i+word_length]:
count +=1
return count
text_body = "text text text text text"
phrase = input("Search for: ")
final_count = search(text_body, phrase)
print(final_count)
编辑:抱歉,完整的错误消息在这里:
Traceback (most recent call last):
File "main.py", line 21, in <module>
final_count = search(text_body, phrase)
File "main.py", line 14, in search
if phrase == text_body[i:i+word_length]:
TypeError: Can't convert 'int' object to str implicitly
答案 0 :(得分:1)
其他人已经很好地解释了为什么您的代码被破坏,并且提供了很好的解决方案,但是为了演示这一点,我们可以看一下简单的for
循环:
text_body = "text"
for i in text_body:
print(i)
哪些印刷品:
t
e
x
t
您可以从中在代码段中看到
text_body[i:i+word_length]
您正在尝试:
text_body['t':'t'+5]
这就是为什么Python感到困惑的原因,因为您试图将一个字符串添加到int,从而导致错误。
需要特别注意的是Python strings actually have a method for exactly what you're doing already:
>>> "text text text text text".count("text")
5
或者,对于您的情况:
text_body.count(phrase)
答案 1 :(得分:0)
i
中for i in text_body:
的值是text_body
中的下一个字符(一个字符的字符串)。您不能在i+word_length
中添加数字和字符串。您应该遍历索引:
for i in range(len(text_body)):
最好使用text_body.index
函数。
答案 2 :(得分:0)
当python执行时
for i in text_body:
if phrase == text_body[i:i + word_length]:
count += 1
在search
的定义中,值i
拾取每个元素而不是索引,因此i + word_length
引发TypeError
。这是解决方案,使用range()
代替for i in text_body
。
for i in range(len(text_body)):
if phrase == text_body[i:i + word_length):
count += 1