计算原始输入中的元音
问题内容:
我有一个作业问题,要求通过原始输入读取字符串并计算字符串中有多少个元音。到目前为止,这是我所遇到的问题,但是我遇到了一个问题:
def vowels():
vowels = ["a","e","i","o","u"]
count = 0
string = raw_input ("Enter a string: ")
for i in range(0, len(string)):
if string[i] == vowels[i]:
count = count+1
print count
vowels()
它可以很好地计算元音,但是由于if string[i] == vowels[i]:
,i
在范围内不断增加时,它只会计数一次。如何更改此代码以检查输入的元音字符串而不会遇到此问题?
问题答案:
in
算子
您可能想使用in
运算符而不是==
运算符-in
运算符使您可以检查特定项目是否在序列/集中。
1 in [1,2,3] # True
1 in [2,3,4] # False
'a' in ['a','e','i','o','u'] # True
'a' in 'aeiou' # Also True
其他一些评论:
套装
在in
与使用时操作是最有效的set
,这是专门设计为快速的数据类型“是该项目集合项X的一部分”之类的操作。*
vowels = set(['a','e','i','o','u'])
*dict
与结合使用也很有效in
,它可以检查字典中是否存在键。
在字符串上迭代
字符串是Python中的一种序列类型,这意味着您无需花费所有精力来获取长度然后使用索引-您只需遍历字符串即可依次获得每个字符:
例如:
for character in my_string:
if character in vowels:
# ...
用字符串初始化集合
在上面,您可能已经注意到,使用预设值(至少在Python
2.x中)创建一个集涉及使用列表。这是因为set()
类型构造函数采用一系列项目。您可能还会注意到,在上一节中,我提到了字符串是Python中的序列-
字符序列。
这意味着如果想要一 组 字符,则实际上可以只将这些字符的字符串传递给set()
构造函数-不需要列出一个单字符字符串。换句话说,以下两行是等效的:
set_from_string = set('aeiou')
set_from_list = set(['a','e','i','o','u'])
整洁吧?:)但是请注意,如果您尝试制作一组 字符串 ,而不是一组 字符 ,这也会给您带来 痛苦 。例如,下面两行是 不 一样的:
set_with_one_string = set(['cat'])
set_with_three_characters = set('cat')
前者是具有一个元素的集合:
'cat' in set_with_one_string # True
'c' in set_with_one_string # False
后者是一个包含三个元素的集合(每个元素一个字符):
'c' in set_with_three_characters` # True
'cat' in set_with_three_characters # False
区分大小写
比较字符区分大小写。'a' == 'A'
是False,是'A' in 'aeiou'
。为了解决这个问题,您可以转换输入以匹配要比较的情况:
lowercase_string = input_string.lower()