2014-01-03 3 views
-1

У меня есть этот код:Как изменить положение в строке?

a = "I'll buy paper,pen and beg" 
print a[::-1] 

Выход: ГЭБ днк неп, repap yub ll'I

Но я хочу выход быть похожим на это: g'eb днк неп г, EPAP yub llI

Как я могу это сделать?

+1

Другими словами, вы хотите изменить символы букв и пробелов, но не знаки препинания? – kojiro

+1

Почему в ваших примерах должен быть апостроф как в 'g'eb', так и' ll'I'? – LittleBobbyTables

+5

Ваш желаемый результат имеет два апострофа. Откуда появился другой? – iCodez

ответ

3

Может быть, как это:

targets = ".,'" 
a = "I'll buy paper,pen and beg" 
punct = [ (i, c) for i, c in enumerate (a) if c in targets] 
nopunct = [c for c in a if c not in targets][::-1] 
for i, c in punct: nopunct.insert (i, c) 
b = ''.join (nopunct) 
print (a) 
print (b) 

Печатается

g'eb dna nepre,pap yub llI 
I'll buy paper,pen and beg 

Или изменение цели только ., печатает

geb dna neprep,ap yub ll'I 
I'll buy paper,pen and beg 
+0

Вы можете использовать 'target = string.punctuation', чтобы получить все знаки препинания – jonrsharpe

+0

@jonrsharpe Хороший ввод. Давайте оставим это для OP, чтобы решить. – Hyperboreus

+0

Спасибо @Hyperboreus Я все еще пытаюсь понять код. –

6

Возьмите обращенную строку и построить генератор, который включает в себя только альфа-символы. Затем используйте это как источник подстановки для букв альфа в будущем:

s = "I'll buy paper,pen and beg" 
rev = (ch for ch in reversed(s) if ch.isalpha()) 
new = ''.join(next(rev) if ch.isalpha() else ch for ch in s) 
# g'eb dna nepre,pap yub llI 
+0

Спасибо человеку, его действительно короткий код. @Jon Clements –

Смежные вопросы