计数用空格和/或标点符号分隔字符串的单词数

问题描述:

有人可以帮助请。 我想创建一个程序,可以计算由空格和/或标点符号分隔的字符串中的字数。你应该只计算元音和辅音交替的地方。一个单词不能有两个连续的元音或辅音。单个字母的单词不计算在内。忽略文件中不是元音或常量的任何内容。用一个空格替换不在字母表中的任何内容。每个字母的大小写无关紧要。计数用空格和/或标点符号分隔字符串的单词数

字母使用 元音 - AEIOUY 辅音 - BCDFGHJKLMNPQRSTVWXZ

输入: 一个字符串,如“你好伟大的新的世界”

输出: 的输入字符串找到的期望字的数目以上。例如1

样品:

“Welcome to Radix !!!” == 2(以板蓝根)

“每个人,感谢你尝试了这一点。” == 2(大家的)

“你好伟大的新的世界” == 1(新)

“玛丽有,一,小,羊肉” == 2(玛丽)

+0

我编辑了预期的效果,“你”是不是交替。 – Oliv

import string,re 

VOWELS=[x.lower() for x in "A E I O U Y".split(" ")] 
CONSONANTS = [x.lower() for x in "B C D F G H J K L M N P Q R S T V W X Z".split(" ") ] 
FILE_PATH = 'sentences.txt' 
PUNCT = '[ %s]'% string.punctuation #[ !"#$%&'()*+,-./:;<=>[email protected][\]^_`{|}~] 


def isAlt(word): 
    #True if word is valid 
    word=word.lower() #Non-case-sensitive 
    for x in range(len(word)-1): 
     if not (word[x] in VOWELS and word[x+1] in CONSONANTS)and not(word[x+1] in VOWELS and word[x] in CONSONANTS): 
      #Sorry about that condition, I can probably return that whole line 
      return False 
    return True 



for line in open(FILE_PATH,'r'): 
    out=re.split(PUNCT,line.strip()) 
    out=[x for x in out if x and len(x)>1 and isAlt(x)] 
    print(len(out)) 

此扫描文件,并为每一行找到有效的话,并打印出符合您的条件的单词数。您可以将len(out)更改为out作为列表而不是数字。

+0

感谢T Bell,但Iam无法理解 – Mashaa

+0

对不起,您能解释一下您难以理解的内容。这样我就可以改变我的答案,使其更容易理解。 –

+0

T Bell ....这是一个很好的答案,它的工作原理.....请你详细说明下面几行代码....... PUNCT ='[%s]'%string.punctuation ... .......如果不是的话(VOWELS中的单词[x]和CONSONANTS中的单词[x + 1])而不是(VOWELS中的单词[x + 1]和CONSONANTS中的单词[x])..... ................ out = [x for x in out如果x和len(x)> 1且isAlt(x)] ............ ..谢谢 – Mashaa

这是一门功课,不是吗?

试试这个正则表达式:

\b[aeiouy]?([bcdfghjklmnpqrstvwxz][aeiouy])*[bcdfghjklmnpqrstvwxz]?\b 

它会找到所有单词交替元音/辅音。当心,它也会传递单字母单词,随后将其滤除。并用忽略情况标志运行它。