python - 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: ")))
但是,输出没有切换任何东西。我错过了什么?
解决方案
问题是您正在循环遍历短语的迭代,并且通过分配字母您实际上并没有更改短语中的字母。
您可以将整个字符串转为大写然后使用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())
推荐阅读
- java - 与 Java IDE 协作
- javascript - 如何在 React 中处理 3 级深度嵌套的多步表单?
- javascript - TypeError:person.map 不是函数
- google-colaboratory - IBM Cloud Watson (NLU) 情感服务错误
- python - 错误消息:无法从 'pylab 导入名称'hold'
- android - Android 芯片:如何更改文本垂直填充?
- c# - 当您拥有相关实体的 ID 时如何映射相关实体的属性
- vert.x - 如何更改 quarkus-vertx eventBus ClusterManager 选项
- android - 更新 gradle 错误我在添加库并更新时遇到问题
- azure - 在子路径上部署服务而不在 Kubernetes 中重定向