2017-02-07 3 views
1

Привет, кто-нибудь знает, как создать функцию, которая заменяет каждый алфавитный символ в строке символом из данного слова (повторяется бесконечно). Если персонаж не имеет алфавита, он должен оставаться там, где он есть. Также это нужно сделать, не импортируя ничего.Python, заменяющий строку, заданную одним словом

def replace_string(string,word) 
''' 
>>>replace_string('my name is','abc') 
'ab cabc ab' 

До сих пор я придумал:

def replace_string(string,word): 
    new='' 
    for i in string: 
     if i.isalpha(): 
      new=new+word 
     else: new=new+i 
    print(new) 

но эта функция просто печатает 'abcabc abcabcabcabc abcabc' вместо 'Ab CABC Ab'

+1

Должно ли трехбуквенное слово превратиться в «хидж»? – schwobaseggl

+0

Мне нужно заменить каждый буквенный символ в строке на заданное слово – James

+0

да оно должно быть – James

ответ

1

Изменить следующим образом:

def replace(string, word): 
    new, pos = '', 0 
    for c in string: 
     if c.isalpha(): 
      new += word[pos%len(word)] # rotate through replacement string 
      pos += 1 # increment position in current word 
     else: 
      new += c 
      pos = 0 # reset position in current word 
    return new 

>>> replace('my name is greg', 'hi') 
'hi hihi hi hihi' 
+1

@James: Пожалуйста, уточните свой вопрос. В нем не было упоминания о том, как обращаться с пунктуацией, и в меньшей степени, чтобы ее снять. –

+0

все, что не является буквенным, должно оставаться там, где оно есть, а алфавиты должны быть заменены, как показано выше. – James

+0

@James: Так почему вы ожидаете 'hi hihi hi hihi?' Как вывод из 'replace (" m'y nam'e это greg ", 'hi')', то? Вы противоречите себе здесь. –

0

Если вы не можете использовать itertools module, сначала создайте функцию генератора, которая будет циклически через замену слова на неопределенное время:

def cycle(string): 
    while True: 
     for c in string: 
      yield c 

Затем настроить вашу существующую функцию только немного:

def replace_string(string,word): 
    new='' 
    repl = cycle(word) 
    for i in string: 
     if i.isalpha(): 
      new = new + next(repl) 
     else: 
      new = new+i 
    return new 

Выход:

>>> replace_string("Hello, I'm Greg, are you ok?", "hi") 
"hihih, i'h ihih, ihi hih ih?" 

Другой способ написать это (но я думаю, первая версия более читаема и, следовательно, лучше):

def replace_string(string,word): 
    return ''.join(next(cycle(word)) if c.isalpha() else c for c in string) 
+0

им не разрешено что-либо импортировать – James

+0

Почему вы не сказали так в своем вопросе? Измените свой вопрос, чтобы добавить к нему все необходимые сведения/ограничения. Не распространяйте важную информацию через комментарии. –

+0

Я корректировал главный вопрос – James

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