Найти - Пользователи
Полная версия: Метод replace
Начало » Python для новичков » Метод replace
1
gratiani
 >>> word = 'spamspamspam'
>>> for x in word:
...     word = word.replace(x, '.'+x)
... 
>>> word
'...s...p...a...m...s...p...a...m...s...p...a...m'
Что нужно сделать, чтобы при каждом обращении к методу точка конкатенировала только с текущим строковым символом, а не добавляла ее еще в подобные символы. В общем что необходимо применить, чтобы при выводе стояла только одна точка перед каждым символом?
marvellik
Метод 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
твой код конечно сработает при условии что в слове нет одинаковых букв
Stepan_M
 "".join(("." + i for i in tuple(word)))
py.user.next
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
>>> 
marvellik
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
а в остальном все ок. сижу голову ломаю как работает это
word = ‘.’ + ‘.’.join(word)
py.user.next
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'
>>>
marvellik
py.user.next
Надо понимать, что строка состоит из элементов
все понял. меня сбило с толку ‘.’ + перед ‘.’.join(word) когда посмотрел вывод дошло что в начале точки нет и
конкатенация ‘.’ + добавляет эту точку в начале строки
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB