请更正我的循环以检查字符串是否包含元音 (Python)?

Please correct my loop to check if a string contains vowels (Python)?

我输入以下内容来检查字符串是否包含元音字母,但似乎有问题,因为它报告整个单词的第一个字母是非元音字母。

我该怎么办?

def vowel(s):
    s = str(s)
    s = s.lower()
    vowel = ("a", "e", "i", "o", "u")
    for char in s:
        if char in vowel:
            print("Yes,", s, "contains a vowel.")
            break
        else:
            print("No,", s, "has no vowels contained.")
            break

vowel("apple")
vowel("shh")

循环 breaks 在第一个字符上无论如何。如果第一个字符是元音,你可以说这个词有元音,但在你到达结尾之前你不能说它没有。 Python 有一个专门为此目的而设计的简洁结构:for-loop else 子句。只有在没有中断的情况下到达循环末尾时才会触发。

所以您可以通过删除 8 个空格和一个 break.

来修复您的代码
def vowel(s):
    s = str(s)
    s = s.lower()
    vowel = ("a", "e", "i", "o", "u")
    for char in s:
        if char in vowel:
            print("Yes,", s, "contains a vowel.")
            break
    else:
        print("No,", s, "has no vowels contained.")

vowel("apple")
vowel("shh")

要对此进行优化,除了运算符 in 之外,还可以考虑使用内置函数 any。您可以将 vowel 写为单个字符串并直接检查其中是否包含:

if any(char in 'aeiou' for char in s):
    print("Yes,", s, "contains a vowel.")
else:
    print("No,", s, "contains no vowels.")

您甚至可以将条件重写为

any(map('aeiou'.__contains__ s))

对于包含检查,使用 set 来实现 O(1) 查找通常更有效,但是元音序列太小了我怀疑只使用str.__contains__.

的默认线性搜索

对于一些非常罕见的情况,比如少于 5 个字符的字符串,您可以撤销检查:

any(map(s.__contains__, 'aeiou'))
def vowel(s):
    s = str(s)
    s = s.lower()
    vowels = ("a", "e", "i", "o", "u")

    for vowel in vowels:
        if vowel in s:
            print("Yes,", s, "contains a vowel.")
            return True

    print("No,", s, "does not contain a vowel.")
    return False

这将是一种方法。一旦找到元音,函数 returns True 就会停止搜索。如果未找到元音字母,则循环终止并打印 'No' 语句。

与其在 for-loop 中使用 if-else,不如使用 if 来检查是否找到元音。如果找到元音,则从函数中打印“found”和 return。如果未找到元音,则表示 for-loop 已结束,然后您可以打印“未找到”:

def vowel(s):
    s = str(s)
    s = s.lower()
    vowel = ["a", "e", "i", "o", "u"]

    for char in s:
        if char in vowel:
            print("Yes,", s, "contains a vowel.")
            return
    print("No,", s, "has no vowels contained.")

如果你想计算每个元音有多少个,你可以使用字典:

    vowel = {"a":0, "e":0, "i":0, "o":0, "u":0}