не могу толком ревеснуть строку , что бы небуквенные символы оставались на своем месте
def reverse_string(st):
rev_word = ''
reverse_str = ''
for letter in st:
if letter.isalpha():
rev_word = letter + rev_word
else:
reverse_str += rev_word
rev_word = ''
reverse_str += letter
return reverse_str
print(reverse_string("b3ghcd hg#tyj%h"))
d3chgb hj#ytg%h
Ответы (3 шт):
Автор решения: Denis Bruiaka
→ Ссылка
Смотри reserve вообще для списка.
Например:
mylist = [1, "res", 3]
mylist.reverse()
print(mylist)
Автор решения: Namerek
→ Ссылка
Если я правильно понял задачу то что-то такое можно рассмотреть:
string = "b3ghcd hg#1ty8j%h"
non_alpha_idx = [(i, string[i]) for i in range(len(string)) if not string[i].isalpha()]
reordered_symbols = [*filter(lambda x: x.isalpha(), string)][::-1]
while non_alpha_idx:
index, symbol = non_alpha_idx.pop(0)
reordered_symbols.insert(
index,
symbol
)
print(''.join(reordered_symbols))
# h3jytg hd#1ch8g%b
Если переворачивать каждое слово отдельно, то просто нужно добавить еще один цикл:
string = "b3ghcd hg#tyj%h"
modified_parts = []
for part in string.split():
non_alpha_idx = [(i, part[i]) for i in range(len(part)) if not part[i].isalpha()]
reordered_symbols = [*filter(lambda x: x.isalpha(), part)][::-1]
while non_alpha_idx:
index, symbol = non_alpha_idx.pop(0)
reordered_symbols.insert(
index,
symbol
)
modified_parts.append(''.join(reordered_symbols))
modified_string = ' '.join(modified_parts)
print(modified_string)
# d3chgb hj#ytg%h
Как Вы и хотели:
Автор решения: SergFSM
→ Ссылка
еще вариант с регуляркой:
from re import finditer
s = "b3ghcd hg#tyj%h"
res = []
for i in s.split():
rev = finditer('[A-Za-z]', i[::-1])
res.append(''.join([next(rev)[0] if j.isalpha() else j for j in i]))
print(' '.join(res))
'''
d3chgb hj#ytg%h
