Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的省略号计数_Python_Counter - Fatal编程技术网

python中的省略号计数

python中的省略号计数,python,counter,Python,Counter,我想写一个计算句子的程序。边界是(!|.|?|…)。巨蟒只算数!和。还有?。我该怎么数数。。。也我试着用通常的形式写,但它用省略号来计算每个点。请给我一个建议 f = input ("text") znak = 0 for s in f: i = s.find('.') if i > -1: znak += 1 else: i = s.find('!') if i > -1: znak += 1 else

我想写一个计算句子的程序。边界是(!|.|?|…)。巨蟒只算数!和。还有?。我该怎么数数。。。也我试着用通常的形式写,但它用省略号来计算每个点。请给我一个建议

   f = input ("text") 
   znak = 0 
   for s in f: 
i = s.find('.') 
if i > -1: 
    znak += 1 
else:
    i = s.find('!') 
    if i > -1:
        znak += 1
    else:
        i = s.find('?') 
        if i > -1: 
            znak += 1
        else:
            i = s.find('...')
            if i> -1:
                znak +=1
  print('Предложений:', znak)

如果我正确理解了您的问题,您可以使用
string.count(substring)

这将产生:
如果我正确理解了您的问题,您可以使用
string.count(substring)

这将产生: 您可以使用类似的
之前包含
..
,否则它将匹配
..
为三个
而不是一个
..

>>> import re
>>> s = "sentence with ! and ? and ... and ."
>>> p = re.compile(r"\.\.\.|\.|\!|\?")
>>> p.findall(s)
['!', '?', '...', '.']
>>> sum(1 for _ in p.finditer(s))
4
或结合:

您可以使用类似的
之前包含
..
,否则它将匹配
..
为三个
而不是一个
..

>>> import re
>>> s = "sentence with ! and ? and ... and ."
>>> p = re.compile(r"\.\.\.|\.|\!|\?")
>>> p.findall(s)
['!', '?', '...', '.']
>>> sum(1 for _ in p.finditer(s))
4
或结合:


您当前的代码似乎一次迭代输入文本一个字符。一个字符永远不会包含
,因为它有三个字符长。您还有一个问题,
..
字符组成,因此除非您特别小心,否则最终会重复计算字符数。您使用
else
,因此这只计算它找到的列表中的第一项。这是一个单点。代码的其余部分永远不会执行。(您还需要一个循环。查找如何使用
find
)您当前的代码似乎一次只在输入文本上迭代一个字符。一个字符永远不会包含
,因为它有三个字符长。您还有一个问题,
..
字符组成,因此除非您特别小心,否则最终会重复计算字符数。您使用
else
,因此这只计算它找到的列表中的第一项。这是一个单点。代码的其余部分永远不会执行。(您还需要一个循环。查看如何使用
find
)OP自己的尝试仍然可以挽救,尽管(当然)这是“更好”的方法。@usr2564301我知道这不是最好的答案,我相信使用regex可以更容易地做到这一点。可悲的是,我的regex fu不是最好的。但它比OP的帖子可读性好得多。没问题,替代品总是很受欢迎的。只是您的代码与OP的截然不同——它引入了OP可能尚未涉及的概念。。。我认为正则表达式可以做到这一点,但你不能使用列表理解。非常感谢!它真的很有用!没问题。如果您找到了解决方案,请单击您认为最有帮助的答案旁边的复选标记。OP自己的尝试仍然是可以挽救的,尽管(当然)这是“更好”的方法。@usr2564301我知道这不是最好的答案,我相信使用正则表达式可以更轻松地做到这一点。可悲的是,我的regex fu不是最好的。但它比OP的帖子可读性好得多。没问题,替代品总是很受欢迎的。只是您的代码与OP的截然不同——它引入了OP可能尚未涉及的概念。。。我认为正则表达式可以做到这一点,但你不能使用列表理解。非常感谢!它真的很有用!没问题。如果您找到了解决方案,请单击您认为最有帮助的答案旁边的复选标记。我尝试使用正则表达式,但失败了(()我不太了解python的语法。我尝试使用正则表达式,但失败了(()我不太了解python的语法。
>>> import re
>>> s = "sentence with ! and ? and ... and ."
>>> p = re.compile(r"\.\.\.|\.|\!|\?")
>>> p.findall(s)
['!', '?', '...', '.']
>>> sum(1 for _ in p.finditer(s))
4
>>> Counter({'!': 1, '...': 1, '?': 1, '.': 1})
Counter({'!': 1, '...': 1, '?': 1, '.': 1})