Python 在不使用RE的情况下计算字符串列表中的音节

Python 在不使用RE的情况下计算字符串列表中的音节,python,counting,Python,Counting,我必须计算文本文件中音节的数量。我的问题是,我不知道如何迭代每个字符串的每个字符。我的想法是检查一个字母是否是元音,如果下面的字母不是元音,则将计数增加1。但我不能增加“字母”。我也尝试过使用“范围”方法,但我也有问题。我能试试什么?非常感谢。 PS:我只能使用Python内置方法 txt=['countingwords'、'house'、'plant'、'alpha'、'音节'] 这是到目前为止我的代码 def syllables(text_file): count = 0

我必须计算文本文件中音节的数量。我的问题是,我不知道如何迭代每个字符串的每个字符。我的想法是检查一个字母是否是元音,如果下面的字母不是元音,则将计数增加1。但我不能增加“字母”。我也尝试过使用“范围”方法,但我也有问题。我能试试什么?非常感谢。 PS:我只能使用Python内置方法

txt=['countingwords'、'house'、'plant'、'alpha'、'音节']

这是到目前为止我的代码

def syllables(text_file):

    count = 0
    vowels = ['a','e','i','o','u','y']

    with open(text_file, 'r') as f:
   
    txt = f.readlines()
    txt = [line.replace(' ','') for line in txt]
    txt = [line.replace(',','') for line in txt]
    txt = [y.lower() for y in txt]

        for word in txt:
            for letter in word:
                if letter is in vowel and [letter + 1] is not in vowel:
                    count += 1
   
你可以试试这个:

lines = ["You should count me too"]
count = 0
vowels = "aeiouy"

for line in lines:
    for word in line.lower().split(" "):
        for i in range(len(word)):
            if word[i] in vowels and (i == 0 or word[i-1] not in vowels):
                count +=1
print(count) # -> 5
你可以试试这个:

lines = ["You should count me too"]
count = 0
vowels = "aeiouy"

for line in lines:
    for word in line.lower().split(" "):
        for i in range(len(word)):
            if word[i] in vowels and (i == 0 or word[i-1] not in vowels):
                count +=1
print(count) # -> 5

这可能是一个很好的参考。您的示例中存在一些问题:在使用open(…)作为f:之后,必须有一个缩进。如果删除所有空格,将无法分隔单词。@cknoll我现在看到了,但在IDE中它是以正确的方式编写的。我删除空白是因为在真实的示例中,字符串中的每个字符之间可能有空白。但它太长了,无法在这里发布。单词内的WiseSpace似乎是数据源的问题。这使得计算音节变得模棱两可。Wrt。缩进:你应该编辑你的文章,使其正确显示。这有助于人们理解您的问题。这可能是一个很好的参考。您的示例中存在一些问题:在
之后使用open(…)作为f:
必须有缩进。如果删除所有空格,将无法分隔单词。@cknoll我现在看到了,但在IDE中它是以正确的方式编写的。我删除空白是因为在真实的示例中,字符串中的每个字符之间可能有空白。但它太长了,无法在这里发布。单词内的WiseSpace似乎是数据源的问题。这使得计算音节变得模棱两可。Wrt。缩进:你应该编辑你的文章,使其正确显示。这有助于人们理解您的问题。@Pihacca如果这有助于您,欢迎您投票表决答案:-)@Pihacca如果这有助于您,欢迎您投票表决答案:-)