我是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())
当您说
letter = letter.upper
时,您实际上并没有更改字符串 phrase
的内容,您只是更改变量 letter
指向的字符串。
事实上,你不能在Python中改变字符串。尝试运行
"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 分支,并且在不应该的情况下将其变为大写。这是因为 "a"
在 "aeiou"
中,而不在 "AEIOU"
中,所以 else 分支运行并且它变成大写。
我想你的意思是“所有元音都是小写,所有辅音都是大写”
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: ")))
def 将辅音转换为大写(短语): 结果=“” 元音=“aeiouAEIOU”
for char in phrase:
if char.isalpha():
if char.lower() not in vowels:
result += char.upper()
else:
result += char.lower()
else:
result += char
return result
input_phrase = input("输入短语:")
converted_phrase = Convert_consonants_to_uppercase(input_phrase)
print(“转换后的短语:”,converted_phrase)