Python 如何检测元音和辅音
在英文字母中,元音是a、e、i、o和u。包含元音的单词示例包括”apple”、”elephant”、”igloo”、”octopus”和”umbrella”。
辅音是英文字母中除了上述元音之外的所有其他字母,包括b、c、d、f、g、h、j、k、l、m、n、p、q、r、s、t、v、w、x、y和z。包含辅音的单词示例包括”ball”、”cat”、”dog”、”fish”、”green”和”hat”。
以下是一些用Python检测元音和辅音的代码示例和逐步说明:
使用for循环和条件语句
示例
定义要检查元音和辅音的字符串。
将元音和辅音的计数器初始化为0。
循环遍历字符串中的每个字符。
检查字符的小写版本是否在字符串”aeiou”中。如果是,将元音计数器递增。
如果字符是字母但不是元音,则将辅音计数器递增。
打印计数器的结果。
string = "lorem ipsum"
vowels = 0
consonants = 0
for char in string:
if char.lower() in "aeiou":
vowels += 1
elif char.isalpha():
consonants += 1
print("Number of vowels:", vowels)
print("Number of consonants:", consonants)
输出
Number of vowels: 4
Number of consonants: 6
使用列表推导和集合
示例
定义要检查元音和辅音的字符串。
使用列表推导来创建一个列表,其中包含字符串中所有小写元音字母的字符。
使用内置的len()函数获取列表中的项目数,即元音的数量。
使用另一个列表推导来创建一个列表,其中包含字符串中不是小写元音字母的所有字母字符。
使用内置的len()函数获取列表中的项目数,即辅音的数量。
打印计数器的结果。
string = "lorem ipsum"
vowels = len([char for char in string if char.lower() in {'a', 'e', 'i', 'o', 'u'}])
consonants = len([char for char in string if char.isalpha() and char.lower() not in {'a', 'e', 'i', 'o', 'u'}])
print("Number of vowels:", vowels)
print("Number of consonants:", consonants)
输出
Number of vowels: 4
Number of consonants: 6
使用正则表达式
示例
导入内置的re模块,提供对正则表达式的支持。
定义要检查元音和辅音的字符串。
使用re.findall()函数来查找所有符合正则表达式模式”[aeiou]”的匹配项,该模式匹配任何小写元音字母,不区分大小写。
使用内置的len()函数获取匹配项的数量,即元音的数量。
再次使用re.findall()与正则表达式模式”[b-df-hj-np-tv-z]”一起,该模式匹配任何小写辅音字母,不区分大小写。
再次使用len()获取匹配项的数量,即辅音的数量。
打印计数器的结果。
import re
string = "lorem ipsum"
vowels = len(re.findall("[aeiou]", string, re.IGNORECASE))
consonants = len(re.findall("[b-df-hj-np-tv-z]", string, re.IGNORECASE))
print("Number of vowels:", vowels)
print("Number of consonants:", consonants)
输出
Number of vowels: 4
Number of consonants: 6
使用集合和交集
示例
定义要检查元音和辅音的字符串。
使用set()函数创建一个由字符串中所有字符组成的集合,转换为小写。
使用set.intersection()方法找到该集合与小写元音字母集合之间的交集,使用len()函数获取结果集合中的元素数量。
重复第3步,但使用小写辅音字母集合。
打印计数器的结果。重复出现的字符被计为一个。
string = "lorem ipsum"
vowels = len(set(string.lower()).intersection({'a', 'e', 'i', 'o', 'u'}))
consonants = len(set(string.lower()).intersection(set('bcdfghjklmnpqrstvwxyz')))
print("Number of vowels:", vowels)
print("Number of consonants:", consonants)
输出
Number of vowels: 4
Number of consonants: 5
使用字典和字符串格式化
示例
定义要检查元音和辅音的字符串。
创建一个字典,其中包含键’vowels’和’consonants’,并将它们的初始值设置为0。
循环遍历字符串中的每个字符。
如果字符的小写版本在字符串“aeiou”中,增加字典中’vowels’的值。
如果字符是字母但不是元音,增加字典中’consonants’的值。
使用字符串格式化来打印字典中计数器的结果。
string = "lorem ipsum"
count = {'vowels': 0, 'consonants': 0}
for char in string:
if char.lower() in 'aeiou':
count['vowels'] += 1
elif char.isalpha():
count['consonants'] += 1
print("Number of vowels: {vowels}\nNumber of consonants: {consonants}".format(**count))
### Output
Number of vowels: 4
Number of consonants: 6
使用Counter和filter
示例
从collections模块导入Counter类。
定义要检查元音和辅音的字符串。
使用filter()函数创建一个只包含小写元音字符的新迭代器,并使用Counter()构造函数统计每个元音的出现次数。
对每个元音的计数求和以获取元音的总数。
重复步骤3-4,但是过滤非元音的字母字符,并使用sum()函数获取辅音的总数。
打印计数器的结果。
from collections import Counter
string = "lorem ipsum"
count = Counter(filter(lambda c: c.lower() in 'aeiou', string))
vowels = count['a'] + count['e'] + count['i'] + count['o'] + count['u']
count = Counter(filter(lambda c: c.isalpha() and c.lower() not in 'aeiou', string))
consonants = sum(count.values())
print("Number of vowels:", vowels)
print("Number of consonants:", consonants)
输出
Number of vowels: 4
Number of consonants: 6