我如何匹配元音?

时间:2011-02-17 21:18:04

标签: python loops

我正在处理我正在进行的更大程序的一小部分。基本上我需要用户输入一个单词,我需要打印第一个元音的索引。

word= raw_input("Enter word: ")
vowel= "aeiouAEIOU"

for index in word:
    if index == vowel:
        print index

但是,这不起作用。怎么了?

6 个答案:

答案 0 :(得分:4)

尝试:

word = raw_input("Enter word: ")
vowels = "aeiouAEIOU"

for index,c in enumerate(word):
    if c in vowels:
        print index
        break

for .. in将迭代字符串中的实际字符,而不是索引。 enumerate将返回索引和字符,并使两者更容易引用。

答案 1 :(得分:3)

只是为了与众不同:

import re

def findVowel(s):
    match = re.match('([^aeiou]*)', s, flags=re.I)
    if match:
        index = len(match.group(1))
        if index < len(s):
            return index
    return -1  # not found

答案 2 :(得分:1)

index == vowel询问字母索引是否等于整个元音列表。你想知道的是它是否包含在元音列表中。请参阅其他一些有关工作原理的答案。

答案 3 :(得分:1)

一种替代解决方案,可以说更优雅,是使用re库。

import re
word = raw_input('Enter a word:')
try: 
    print re.search('[aeiou]', word, re.I).start()
except AttributeError:
    print 'No vowels found in word'

实质上,re库实现了正则表达式匹配引擎。 re.search()搜索第二个字符串中第一个字符串指定的正则表达式,并返回第一个匹配项。 [aeiou]表示“匹配a或e或i或o或u”,re.I告诉re.search()使搜索不区分大小写。

答案 4 :(得分:1)

使用list comprehension的相同想法:

word = raw_input("Enter word: ")
res = [i for i,ch in enumerate(word) if ch.lower() in "aeiou"]
print(res[0] if res else None)

答案 5 :(得分:0)

for i in range(len(word)):
  if word[i] in vowel:
    print i
    break

会做你想做的事。

“for word in word”循环遍历 word 的字符而不是索引。 (您可以使用“枚举”功能将索引和字符循环在一起;我会让您自己查看。)