Python 创建一个函数,计算字符串中确切单词出现的时间

Python 创建一个函数,计算字符串中确切单词出现的时间,python,function,Python,Function,嗯,我是python新手,尝试创建一个函数来计算确切单词在字符串中出现的时间。这是我的python代码: def fsi(s): count = 0 for word in s.lower().split(): if word == 'ali': count += 1 return count 当我调用fsi函数时,它不能正常工作,返回的号码也不正确。它只返回1,不再返回 fsi('ali and ali and ali

嗯,我是python新手,尝试创建一个函数来计算确切单词在字符串中出现的时间。这是我的python代码:

def fsi(s):
    count = 0
    for word in s.lower().split():
        if word == 'ali':
            count += 1
        return count 
当我调用fsi函数时,它不能正常工作,返回的号码也不正确。它只返回1,不再返回

fsi('ali and ali and ali!')
你建议我怎么修

正确方法1: 正确方法2:
这对于正则表达式来说是微不足道的:

>>> import re
>>> re.findall(r'\bali\b', 'ali and ali and ali!')
['ali', 'ali', 'ali']
如果使用Python字符串例程,则需要去除各种形式的标点符号。否则阿里==阿里!这将是错误的

要使用Python字符串例程执行此操作,可以执行以下操作:

>>> s='ali the aligator is called ali!'
>>> sum(1 for w in [''.join([c for c in word if c.isalpha()]) for word in s.lower().split()] if w=='ali')
2

更改行返回计数的缩进,使其位于for循环之外和函数末尾。问题是您试图在循环内返回,因此它将始终返回0或1,因为它将在第一次出现时返回。与上述问题一起,请注意迭代的最后一项将是ali!,不是阿里。@Carcigenicate他说他的问题是它总是返回一个计数1而不是实际的计数。这是因为return语句的缩进不正确。然而,你提出了一个很好的观点-检查单词的相等性不会捕获最后一次出现的内容。请确保你知道输入字符串的格式。您当前假定单词边界总是空格或字符串的开始/结束。正如Carcigenicate所指出的,最后一个词是ali!所以不算。同样,如果字符串是ali、ali和ali!使用当前逻辑,计数将显示为0。如果想要更通用的计算方法,您可能需要查看正则表达式和单词边界。如果没有单词边界,您的正则表达式将把aligator计算为匹配项。s.count'ali'也有同样的问题:即使是另一个单词的一部分,也会计算字符序列ali。我把字符串放在下面:fsiali和ali和ali!它工作正常,在“ali”和“ali”之间有一个空格
>>> import re
>>> re.findall(r'\bali\b', 'ali and ali and ali!')
['ali', 'ali', 'ali']
>>> s='ali the aligator is called ali!'
>>> sum(1 for w in [''.join([c for c in word if c.isalpha()]) for word in s.lower().split()] if w=='ali')
2