HOWTO · Python
在 Python 中计算音节
本教程演示如何在 python 中计算音节
本页内容
Python 可以统计单词或句子中的元音字母,但所得数量只能粗略估算音节数。下面的示例展示四种统计字母 a、e、i、o 和 u 的方法,包括如何统一大小写,以及如何查看各元音字母的计数。其中一种方法使用 set() 保存不重复的元音字母,以便进行成员检查。这些示例无法确定一个人实际读出了多少个音节。
使用循环和 if 语句统计元音字母
循环会逐个检查字符;如果字符属于元音字符串,if 语句就会将计数加一。先调用 casefold(),就能通过同一项成员检查匹配大写和小写的英语元音字母。只需要统计总数时,这是最直接的方法。
运行此示例:
本节中的代码以及显示的标签或输出仍为英文。
word = "Beautiful"
vowels = "aeiou"
count = 0
for letter in word.casefold():
if letter in vowels:
count += 1
print(count)
5
结果是匹配到五个元音字母。由于这个循环统计的是出现次数,而非不同字母的数量,重复出现的 u 会被计算两次。
使用字典推导式统计元音字母
如果需要分别统计每个元音字母的出现次数,可以使用字典。推导式遍历元音字母来创建键,然后针对每个键,统计大小写规范化后的单词中与该键匹配的字符,并将结果作为对应的值。比较时应使用单词中的字符变量,并将它与当前元音键比较,这样才能得到预期的各元音字母计数。
本节中的代码以及显示的标签或输出仍为英文。
word = "Beautiful".casefold()
vowel_counts = {
vowel: sum(1 for letter in word if letter == vowel)
for vowel in "aeiou"
}
print(vowel_counts)
{'a': 1, 'e': 1, 'i': 1, 'o': 0, 'u': 2}
这个字典记录的是字母出现频率,而不是音节数。没有匹配项的元音字母仍会保留在字典中,其值为零。
使用 dict.fromkeys() 统计元音字母
dict.fromkeys() 会为每个元音字母初始化一个键,并将它们设为相同的初始值。这里每个值都从零开始;随后循环会在遇到匹配字符时递增对应条目的值。如果希望分别看清初始化和累加步骤,这种方法很实用。
本节中的代码以及显示的标签或输出仍为英文。
word = "Beautiful".casefold()
vowel_counts = dict.fromkeys("aeiou", 0)
for letter in word:
if letter in vowel_counts:
vowel_counts[letter] += 1
print(vowel_counts)
{'a': 1, 'e': 1, 'i': 1, 'o': 0, 'u': 2}
字典的值是整数,因此在这里让各个键共享初始值是安全的。键是五个小写元音字母,遍历顺序与提供的字符串一致。
使用集合和函数统计元音字母
集合可以对一组不重复的元音字母进行成员检查。将逻辑封装在函数中,就能用它处理其他单词。函数会返回计数,调用方可以决定是打印结果,还是将结果用于其他处理。
本节中的代码以及显示的标签或输出仍为英文。
def count_vowel_letters(word):
vowels = set("aeiou")
return sum(1 for letter in word.casefold() if letter in vowels)
print(count_vowel_letters("Beautiful"))
5
虽然集合中每个元音字母只出现一次,但单词中每次匹配都会为总数加一。这个版本也会先统一英语大写字母的大小写,再检查成员关系。
理解元音字母计数的范围与局限
这些示例统计五个基本英语元音字母的出现次数。它们不会把单词拆分成口语中的音节:拼写与发音并非一一对应,元音字母可能不发音,也可能与其他字母组合表示一个声音。例如,代码在 Beautiful 中找到五个元音字母,而这个词有三个口语音节。这说明,统计元音字母无法可靠地得出音节数。
这些示例使用的字母范围也刻意保持精简。它们没有涵盖带重音符号的元音字母、y 或特定语言的拼写规则,因此应根据要处理的文本调整字符集合。casefold() 可以统一大小写,但不会移除重音符号,也不会推断发音。对于英语文本的快速粗略估算,这些方法简单直观;若要可靠地统计口语音节,仅计算元音字母并不足够。