python 元音转小写,辅音转大写

问题描述 投票:0回答:4

我是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: ")))

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

python python-3.x uppercase lowercase
4个回答
4
投票

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

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

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())

1
投票

当您说

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 分支运行并且它变成大写。


0
投票

我想你的意思是“所有元音都是小写,所有辅音都是大写”

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: ")))

0
投票

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)

© www.soinside.com 2019 - 2024. All rights reserved.