Поменять регистр букв в строковом входном параметре

Я хотел бы написать функцию на Python, которая принимает строку с буквами нижнего и верхнего регистра в качестве параметра и преобразует буквы верхнего регистра в нижний регистр, а буквы нижнего регистра в верхний регистр.

Например:

>>> func('DDDddddd')
'dddDDDDD'

Я хочу сделать это со строками, но я не мог понять, как это сделать.


person billwild    schedule 16.11.2012    source источник
comment
Добро пожаловать в Stack Overflow! Похоже, вы хотите, чтобы мы написали для вас код. Хотя многие пользователи готовы создавать код для кодера, попавшего в беду, обычно они помогают только тогда, когда автор уже пытался решить проблему самостоятельно. Хороший способ продемонстрировать эти усилия — включить код, который вы уже написали, пример ввода (если есть), ожидаемый вывод и результат, который вы фактически получаете (вывод консоли, трассировка стека, ошибки компилятора — что угодно). применимый). Чем больше деталей вы предоставите, тем больше ответов вы, вероятно, получите.   -  person Martijn Pieters    schedule 16.11.2012


Ответы (2)


EDIT – намного проще, чем мой первоначальный ответ, и поддерживает как ASCII, так и Unicode. Спасибо комментаторам.

a = 'aBcD'
a.swapcase()
>> AbCd

Исходный ответ – игнорировать

a = 'aBcD'
''.join(map(str.swapcase, a))
>> AbCd

Это сопоставит функцию str.swapcase() с каждым элементом строки a, заменив регистр каждого символа и вернув список символов.

''.join() объединит каждый символ в списке в новую строку.

person Aesthete    schedule 16.11.2012
comment
Ура учиться весело! Я узнал много тонкостей Python из ваших ответов @mgilson, поэтому я рад отплатить за это. - person Aesthete; 16.11.2012
comment
Зачем работать над отдельными персонажами? 'aBcD'.swapcase() достаточно. - person Steven Rumbalski; 16.11.2012
comment
Если есть str.swapcase - почему бы просто не 'Ab'.swapcase() - d0h - опередить Стива на 20 секунд :)? - person Jon Clements♦; 16.11.2012
comment
Вау, о чем я думал. Спасибо, парни. - person Aesthete; 16.11.2012

Вы должны заглянуть в string.maketrans, чтобы создать таблицу перевода, которую можно было бы использовать с str.translate. Другие константы, которые, вероятно, будут полезны, это string.ascii_lowercase и string.ascii_uppercase.

person mgilson    schedule 16.11.2012
comment
я пытался сделать это с помощью x.islower() или x.lower(), но он печатает все прописные или все строчные буквы. Я хочу повернуться с верхнего на нижний, с нижнего на верхний - person billwild; 16.11.2012
comment
@user1829771 user1829771 - ты тоже мог бы сделать это так. Вам просто нужно создать список, а затем присоединиться к нему с помощью str.join. например ''.join(['a','b','c']) дает 'abc' - person mgilson; 16.11.2012