python 元音转小写,辅音转大写
python vowels to lowercase and consonants to uppercase
我是 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: ")))
但是,输出没有切换任何东西。我错过了什么?
我假设你的意思是“所有的元音都是小写的,所有的辅音都是大写的”
def toggle(phrase):
new_phrase = ""
for letter in phrase:
if letter in ['a', 'e', 'i', 'o', 'u'] or letter in ['A', 'E', 'I', 'O', 'U']:
new_phrase += letter.lower()
else:
new_phrase += letter.upper()
return new_phrase
print(toggle(input("Enter a phrase: ")))
问题是您正在遍历短语的可迭代对象,并且通过分配字母实际上并没有更改短语中的字母。
您可以将整个字符串转为大写然后使用 str.translate
vowel_trans = str.maketrans('AEIOU', 'aeiou')
def toggle(phrase):
return phrase.upper().translate(vowel_trans)
如果这还不够,您可以在循环时使用相同的逻辑生成一个字符串,然后 return 该字符串。
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())
当你说 letter = letter.upper
时,你实际上并没有改变字符串 phrase
的内容,你只是在改变变量 letter
指向的字符串。
事实上,您不能改变 python 中的字符串。尝试 运行ning "hello"[0] = "g"
,你会得到一个错误。
一个解决方案不是尝试修改字符串 phrase
,而是构建一个新字符串并将正确的字母放入其中。这就是我的意思:
def toggle(phrase):
answer = ""
for letter in phrase:
if letter not in "aeiouAEIOU":
answer = answer + letter.upper()
else:
answer = answer + letter.lower()
return answer
print(toggle(input("Enter a phrase: ")))
当你运行这个时,你会得到
Enter a phrase: Learning python is fun.
LeaRNiNG PYTHoN iS FuN.
当我说 answer = answer + letter.upper()
时,看起来我正在改变字符串,但实际上发生的是,类似于你对字母所做的,我实际上并没有改变字符串本身,我我只是创建一个新字符串 (answer + letter.upper()
) 并将该字符串的值分配给变量 answer
。这是一个微妙但重要的区别。
我还更改了您决定是大写还是小写的方式,使其适用于小写元音。你最初的方式是,如果当前字母是 "a"
,else 分支 运行s 并且它在不应该的时候变成大写。这是因为 "a"
在 "aeiou"
中而不在 "AEIOU"
中,所以 else 分支 运行s 并且它变成大写。
我是 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: ")))
但是,输出没有切换任何东西。我错过了什么?
我假设你的意思是“所有的元音都是小写的,所有的辅音都是大写的”
def toggle(phrase):
new_phrase = ""
for letter in phrase:
if letter in ['a', 'e', 'i', 'o', 'u'] or letter in ['A', 'E', 'I', 'O', 'U']:
new_phrase += letter.lower()
else:
new_phrase += letter.upper()
return new_phrase
print(toggle(input("Enter a phrase: ")))
问题是您正在遍历短语的可迭代对象,并且通过分配字母实际上并没有更改短语中的字母。
您可以将整个字符串转为大写然后使用 str.translate
vowel_trans = str.maketrans('AEIOU', 'aeiou')
def toggle(phrase):
return phrase.upper().translate(vowel_trans)
如果这还不够,您可以在循环时使用相同的逻辑生成一个字符串,然后 return 该字符串。
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())
当你说 letter = letter.upper
时,你实际上并没有改变字符串 phrase
的内容,你只是在改变变量 letter
指向的字符串。
事实上,您不能改变 python 中的字符串。尝试 运行ning "hello"[0] = "g"
,你会得到一个错误。
一个解决方案不是尝试修改字符串 phrase
,而是构建一个新字符串并将正确的字母放入其中。这就是我的意思:
def toggle(phrase):
answer = ""
for letter in phrase:
if letter not in "aeiouAEIOU":
answer = answer + letter.upper()
else:
answer = answer + letter.lower()
return answer
print(toggle(input("Enter a phrase: ")))
当你运行这个时,你会得到
Enter a phrase: Learning python is fun.
LeaRNiNG PYTHoN iS FuN.
当我说 answer = answer + letter.upper()
时,看起来我正在改变字符串,但实际上发生的是,类似于你对字母所做的,我实际上并没有改变字符串本身,我我只是创建一个新字符串 (answer + letter.upper()
) 并将该字符串的值分配给变量 answer
。这是一个微妙但重要的区别。
我还更改了您决定是大写还是小写的方式,使其适用于小写元音。你最初的方式是,如果当前字母是 "a"
,else 分支 运行s 并且它在不应该的时候变成大写。这是因为 "a"
在 "aeiou"
中而不在 "AEIOU"
中,所以 else 分支 运行s 并且它变成大写。