Вот глупый ответ с использованием string.replace ():
text = 'wish you “happy” every (day)'
text = text\
.replace('”', '*')\
.replace('“', "^")\
.replace("(", '“')\
.replace(")", '”')\
.replace("*", ')')\
.replace("^", '(')
Вот серьезный ответ:
Поскольку у вас есть список символов для замены, создайте словарь того или иного символаследует поменять местами с другим символом, затем выполнить итерацию по строке и создать новую строку, которая содержит исходную строку с замененными буквами. Таким образом, вы можете иметь столько строк или всего несколько строк в словаре переключателей, сколько захотите, и это будет работать без изменений. В более широком масштабе, вы можете захотеть сделать что-то вроде хранения этого словаря в другом месте, например, если вы создаете его на основе пользовательского ввода, получаемого из интерфейса или веб-приложения. Часто бывает полезно отделить спецификацию того, что вы делаете, от того, как вы это делаете, потому что один из них можно рассматривать как данные (какие символы нужно поменять местами), а другой - логику (на самом деле их поменять местами).
text = 'wish you “happy” every (day)'
newtext = ''
switch = {
'“': '(',
'”': ')',
'(': '“',
')': '”',
}
for letter in text:
if letter in switch: letter = switch[letter]
newtext += letter
Причина, по которой я выбрал итеративный подход, заключается в том, что мы меняем символы, поэтому, если вы замените все экземпляры каждого символа в одно и то же время, символы поменяются местами после замены следующего, если только вы не включите промежуточный шаг, такой как *
в моем глупом ответе или ###
в другом ответе, который открывает возможность столкновений (если ваш текст уже содержал ###
или *
, он был бы неправильно заменен).
неизменность строк - вот почему вы должны создать строку newtext
вместо замены символов в исходной строке во время итерации.