首页 > 解决方案 > python元音小写和辅音大写

问题描述

我是 python 新手,我坚持这个特殊的练习。我正在尝试制作一个程序来获取用户的输入(字符串)并将所有元音切换为小写,将辅音切换为大写。

示例输入:"Learning python is fun."
预期输出:"LeaRNiNG PYTHoN iS FuN."

这是我尝试过的:

def toggle(phrase):
    for letter in phrase:
        if letter not in "aeiou":
            letter = letter.upper()
        elif letter in "AEIOU":
            letter = letter.lower()
        else:
            letter = letter.upper()
    return phrase


print(toggle(input("Enter a phrase: ")))

但是,输出没有切换任何东西。我错过了什么?

标签: pythonpython-3.xuppercaselowercase

解决方案


问题是您正在循环遍历短语的迭代,并且通过分配字母您实际上并没有更改短语中的字母。

您可以将整个字符串转为大写然后使用str.translate

vowel_trans = str.maketrans('AEIOU', 'aeiou')
def toggle(phrase):
    return phrase.upper().translate(vowel_trans)

如果这还不够,您可以使用相同的逻辑在循环时生成一个字符串并返回该字符串。

def toggle(phrase):
    new_phrase = ''
    for letter in phrase.upper():
        if letter in 'AEIOU':
            new_phrase += letter.lower()
        else:
            new_phrase += letter

编辑

这也可以简化为一种理解:

def toggle(phrase):
    return ''.join(l.lower() if l in 'AEIOU' else l for letter in phrase)

甚至使用re

import re

def toggle(phrase):
    return re.sub('AEIOU', 'aeiou', phrase.upper())

推荐阅读