如何保持元音的大小写不变?

时间:2019-04-13 23:32:25

标签: python python-3.x string loops

我需要一个函数来反转文本字符串中的元音。我发现如果我使用text [item] .upper(),它会在一个单独的空间中进行更改,但不会影响原始列表。

“ Ello world”之类的字符串应类似于“ Ollo werld”,但问题是我的函数将原始字符串返回为“ ollo wErld”。

3 个答案:

答案 0 :(得分:3)

您可以简单地将字母替换为大写字母,如下所示:

text[x] = text[x].upper()

编辑:我不知道为什么投票失败,但是当按照建议的方式用.lower()和.upper()函数调用替换行时,确实会得到预期的结果。 / p>

答案 1 :(得分:1)

def reversevowel(text):
    cap_indexes = [a for a, b in enumerate(text) if b.isupper()]
    text = list(text.lower())
    vowels = ('aeiouAEIOU')

    x = 0
    y = len(text) - 1

    while x < y:
        while (text[x] not in vowels and x < min(len(text) - 1, y)):
            x += 1

        while (text[y] not in vowels and y > max(0, x)):
            y -= 1

        text[x], text[y] = text[y], text[x]
        x += 1
        y -= 1

    for n in cap_indexes:
        text[n] = text[n].upper()

    return ''.join(text)

答案 2 :(得分:-1)

def reversevowel(text):
    vowels = 'aeiouAEIOU'

    text_list = list(text)

    char_position = []
    char_uppercase = []
    char_list = []

    # Iterate through characters in text
    for i, c in enumerate(text_list):
        if c in vowels:
            char_position.append(i)  # Add vowel position to list
            char_uppercase.append(c.isupper())  # Add uppercase boolean to list
            char_list.insert(0, c)  # Use as stack. Insert character

    zipped_list = list(zip(char_position, char_list, char_uppercase))

    for letter in zipped_list:
        position, character, uppercase = letter
        text_list[position] = str(character).upper() if uppercase else str(character).lower()

    return ''.join(text_list)

编辑:此函数在避免使用嵌套循环的同时返回所需的结果。