计数用空格和/或标点符号分隔字符串的单词数
有人可以帮助请。 我想创建一个程序,可以计算由空格和/或标点符号分隔的字符串中的字数。你应该只计算元音和辅音交替的地方。一个单词不能有两个连续的元音或辅音。单个字母的单词不计算在内。忽略文件中不是元音或常量的任何内容。用一个空格替换不在字母表中的任何内容。每个字母的大小写无关紧要。计数用空格和/或标点符号分隔字符串的单词数
字母使用 元音 - AEIOUY 辅音 - BCDFGHJKLMNPQRSTVWXZ
输入: 一个字符串,如“你好伟大的新的世界”
输出: 的输入字符串找到的期望字的数目以上。例如1
样品:
“Welcome to Radix !!!” == 2(以板蓝根)
“每个人,感谢你尝试了这一点。” == 2(大家的)
“你好伟大的新的世界” == 1(新)
“玛丽有,一,小,羊肉” == 2(玛丽)
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
作为列表而不是数字。
感谢T Bell,但Iam无法理解 – Mashaa
对不起,您能解释一下您难以理解的内容。这样我就可以改变我的答案,使其更容易理解。 –
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
它会找到所有单词交替元音/辅音。当心,它也会传递单字母单词,随后将其滤除。并用忽略情况标志运行它。
我编辑了预期的效果,“你”是不是交替。 – Oliv