Форум сайта python.su
0
>>> word = 'spamspamspam' >>> for x in word: ... word = word.replace(x, '.'+x) ... >>> word '...s...p...a...m...s...p...a...m...s...p...a...m'
Отредактировано gratiani (Авг. 8, 2016 16:34:18)
Офлайн
73
Метод replace заменяет все вхождения одной строки на другую. поэтому получая в цикле в переменную х значение из word когда х = ‘s’ ты в строке заменяешь все вхождения s на .s но так как их в строке три и в цикле ты обходишь всю строку то соответственно вторая s после замены будет .s то есть x = .s а ты производишь замену на ‘.’+'.s' в результате все s. меняются на ..s и еще раз в цикле замена ..s на ‘.’+'..s' вот тебе и результат столько точек перед буквой сколько букв в слове. может проще так
word = list('spamspamspam') for i,x in enumerate (word): word [i] = '.'+x print (''.join(word)) .s.p.a.m.s.p.a.m.s.p.a.m
Отредактировано marvellik (Авг. 8, 2016 17:00:23)
Офлайн
1
"".join(("." + i for i in tuple(word)))
Офлайн
857
gratianiИспользуй отладку (выводи на экран промежуточные знанения). Тогда будешь понимать, что происходит на каждом шаге цикла.
Что нужно сделать, чтобы при каждом обращении к методу точка конкатенировала только с текущим строковым символом
>>> word = 'spamspamspam' >>> for x in word: ... word = word.replace(x, '.' + x) ... print(x, word) ... s .spam.spam.spam p .s.pam.s.pam.s.pam a .s.p.am.s.p.am.s.p.am m .s.p.a.m.s.p.a.m.s.p.a.m s ..s.p.a.m..s.p.a.m..s.p.a.m p ..s..p.a.m..s..p.a.m..s..p.a.m a ..s..p..a.m..s..p..a.m..s..p..a.m m ..s..p..a..m..s..p..a..m..s..p..a..m s ...s..p..a..m...s..p..a..m...s..p..a..m p ...s...p..a..m...s...p..a..m...s...p..a..m a ...s...p...a..m...s...p...a..m...s...p...a..m m ...s...p...a...m...s...p...a...m...s...p...a...m >>> print(word) ...s...p...a...m...s...p...a...m...s...p...a...m >>>
>>> word = 'spamspamspam' >>> for x, _ in zip(word, range(4)): ... word = word.replace(x, '.' + x) ... print(x, word) ... s .spam.spam.spam p .s.pam.s.pam.s.pam a .s.p.am.s.p.am.s.p.am m .s.p.a.m.s.p.a.m.s.p.a.m >>> print(word) .s.p.a.m.s.p.a.m.s.p.a.m >>>
>>> word = 'spamspamspam' >>> for x, _ in zip(word, range(4)): ... word = word.replace(x, '.' + x) ... >>> print(word) .s.p.a.m.s.p.a.m.s.p.a.m >>>
>>> word = 'spamspamspam' >>> word = '.' + '.'.join(word) >>> print(word) .s.p.a.m.s.p.a.m.s.p.a.m >>>
>>> import re >>> >>> word = 'spamspamspam' >>> word = re.sub(r'.', r'.\g<0>', word) >>> print(word) .s.p.a.m.s.p.a.m.s.p.a.m >>>
Отредактировано py.user.next (Авг. 9, 2016 01:31:05)
Офлайн
73
py.user.next
Когда всё готово, отладку убираешь
>>> word = 'spamspamspam' >>> for x, _ in zip(word, range(4)): ... word = word.replace(x, '.' + x) ... >>> print(word) .s.p.a.m.s.p.a.m.s.p.a.m
>>> word = 'spamspamspamer' >>> for x, _ in zip(word, range(4)): ... word = word.replace(x, '.' + x) ... >>> print(word) .s.p.a.m.s.p.a.m.s.p.a.mer
Отредактировано marvellik (Авг. 9, 2016 10:37:56)
Офлайн
857
marvellikНадо понимать, что строка состоит из элементов, где каждый элемент - это строка.
а в остальном все ок. сижу голову ломаю как работает этоword = '.' + '.'.join(word)
>>> for i in 'abcd': ... print(i) ... a b c d >>> 'a'[0][0][0] 'a' >>> >>> '.'.join(['a', 'b', 'c']) 'a.b.c' >>> >>> '.'.join('abc') 'a.b.c' >>>
Офлайн
73
py.user.nextвсе понял. меня сбило с толку ‘.’ + перед ‘.’.join(word) когда посмотрел вывод дошло что в начале точки нет и
Надо понимать, что строка состоит из элементов
Офлайн