2013-09-29 2 views
1

Я хочу, чтобы каждое слово в предложении менялось на звездочке, я пытаюсь использовать здесь один код строки, но я понятия не имею, как получить звездочку для каждый словоИзменение каждого слова в предложении на звездочке

from string import join, split 
def asterisk(s): 
     return join(map(lambda x: x[:0], split(s)), " * ") 

print asterisk("lame af sentence") 

выход:

* * 

Как вы могли заметить, что изменения только 2 слова после split(). Я попытался использовать лямбда-функцию, чтобы присвоить звезду x = " * ", но она не поддерживает этот способ.

Итак, любая помощь будет оценена, спасибо заранее!

+1

Кроме того, в наши дни люди предпочитают использовать методы 'str' objec t, а не функции в модуле 'string', которые были удалены из Python 3. IOW, мы обычно пишем' somestr.split() ', а не' from string import split', а затем 'split (somestr)' , – DSM

ответ

2

Ваш код помещает звездочку между каждым соединением. Есть 2 соединения между словами, поэтому две звездочки.

Я думаю, что вы хотите

join(map(lambda x: "*", split(s)), " ") 
2

Вы можете использовать str.split и str.join здесь:

>>> strs = "lame af sentence" 
>>> ' '.join('*'*len(strs.split())) 
'* * *' 

Здесь str.split разбивает строку на белых пространств и возвращает список:

>>> spl = strs.split() 
>>> spl 
['lame', 'af', 'sentence'] 

Теперь, используя длину этого списка, d str.join мы можем сделать:

>>> ' '.join("*"*len(spl)) 
'* * *' 

Если вы хотите сохранить белое-пространство, регулярное выражение может помочь:

>>> import re 
>>> strs = "lame af  sentence" 
>>> re.sub(r'\S+', '*', strs) 
'* *  *' 
1

Вот еще один, вы можете использовать:

def asterisk(s): 
    return ' '.join(['*' for word in s.split()]) 

print asterisk("lame af sentence") 
1

  1. Граф, сколько слов у вас есть:words=len(s.split())
  2. Добавьте одну * затем пробел за слово:for i in range(words): out+='* '
  3. Cut последнее место:out=out[:-1]

В одной строке: return '* '.join([i for i in range(len(s.split()))])[:-1]

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