Проблема с заменой строчных букв на прописные и наоборот при использовании str.replace - PullRequest
1 голос
/ 12 апреля 2020

Хорошо, это мой код, я не хочу использовать встроенный метод swapcase (). Это не работает для данной строки.

def myFunc(a):
    for chars in range(0,len(a)):
        if a[chars].islower():
            a = a.replace(a[chars], a[chars].upper())
        elif a[chars].isupper():
            a = a.replace(a[chars], a[chars].lower())
    return a

print(myFunc("AaAAaaaAAaAa"))

Ответы [ 2 ]

2 голосов
/ 12 апреля 2020

replace изменяет все буквы, и вы присваиваете значения обратно a, так что вы получаете все верхние регистры.

def myFunc(a):
    # use a list to collect changed letters
    new_text = []
    for char in a:
        if char.islower():
            new_text.append(char.upper())
        else:
            new_text.append(char.lower())

    # join the letters back into a string
    return ''.join(new_text)

print(myFunc("AaAAaaaAAaAa"))  # aAaaAAAaaAaA

или короче:

def my2ndFunc(text):
    return ''.join( a.upper() if a.islower() else a.lower() for a in text)

использование понимания списка и троичного выражения для изменения буквы (см. Имеет ли Python троичный условный оператор? )

1 голос
/ 12 апреля 2020

Проблема заключалась в том, что вы выполняли замену всех вхождений этого символа в строке. Здесь у вас есть рабочее решение:

def myFunc(a):
    result = ''
    for chars in range(0,len(a)):
        print(a[chars])
        if a[chars].islower():
            result += a[chars].upper()
        elif a[chars].isupper():
            result += a[chars].lower()
    return result

print(myFunc("AaAAaaaAAaAa"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...