为什么此代码不会向后打印字符

时间:2015-08-13 14:35:11

标签: python

def anti_vowel(text):
    p=''
    for c in text:
        if c=='a' or c=='A':
            break
        elif c=='e' or c=='E':
            break
        elif c=='i' or c=='I':
            break
        elif c=='o' or c=='O':
            break

        elif c=='u' or c=='U':
            break
        else:
            p=p+c



print(anti_vowel('Hello you'))

1 个答案:

答案 0 :(得分:3)

您在功能结束时忘记返回 p

def anti_vowel(text):
    p=''
    for c in text:
        if c=='a' or c=='A':
            break
        elif c=='e' or c=='E':
            break
        elif c=='i' or c=='I':
            break
        elif c=='o' or c=='O':
            break
        elif c=='u' or c=='U':
            break
        else:
            p=p+c
    return p

如果没有最后一行,那么您将要打印的是None,这是没有明确return语句的函数的默认返回值。

当然,只要找到任何元音,你的函数就会打印出第一个辅音,因为break 结束循环。它永远不会扭转字符串。对于您的示例输入,函数返回'H',因为输入中的下一个字母是元音,然后break结束循环。

您可以轻松地重写您的函数以使用str.lower()和遏制测试:

def anti_vowel(text):
    p = ''
    for c in text:
        if c.lower() in 'aeiou':
            break
        p += c
    return p

这也是一样的,返回第一个辅音('H'作为样本输入。)

如果你想反转字母,排除元音,请不要使用break并反转放置剩余字母的位置。您可以使用continue代替,或者更简单地说,只需反转if测试,如果元音,则只处理chararter:

def anti_vowel(text):
    p = ''
    for c in text:
        if c.lower() not in 'aeiou':
            p = c + p
    return p

现在辅音被放置在之前任何前面的辅音,反转文字:

>>> def anti_vowel(text):
...     p = ''
...     for c in text:
...         if c.lower() not in 'aeiou':
...             p = c + p
...     return p
... 
>>> anti_vowel('Hello you')
'y llH'