2015-10-06 5 views
2

Я пытаюсь захватить буквы в строке и заменить их пустым пространством, в этом случае пустое пространство представлено «_» с пробелом между каждым подчеркиванием.Как заменить буквы строки символами подчеркивания?

Это мой код:

word = "my example" 
def convert_letter(word): 
    for i in range(0, len(word)): 
     if ord(word[i]) != 32: 
      word.replace(word[i], '_') 
    print(word) 
convert_letter(word) 

Когда я запускаю код он просто возвращает слово или строку, и я понятия не имею, почему.

На всякий случай вы задаетесь вопросом о цели инструкции if, чтобы она не конвертировала пробелы в «_».

Таким образом, в случае этой функции я ожидаю следующее:

_ _ _ _ _ _ _ _ _ 
+1

Использовать 're.replace', проще – Leb

+0

Можете ли вы [изменить] (http://stackoverflow.com/posts/32960141/edit) свой вопрос и добавить примерный пример вывода? –

+0

Я прочитал ваши комментарии, и я думаю, вы должны указать свою проблему. Вы сказали, что это для игры в Hangman. По сути, вы хотите, чтобы количество символов подчеркивалось как буквы.Для этого было бы, например, вообще не нужно ничего заменять :) – enpenax

ответ

0

Попробуйте

new_word = word.replace(word[i], '_ ') 

из документаций в string.replace(): Он возвращает копию строки s все вхождения подстрока старой заменена на новую.

word = "my example" 

def convert_letter(word): 
    new_word = word 
    for i in range(0, len(word)): 
     if ord(word[i]) != 32: 
      new_word = new_word.replace(word[i], '_ ') 
    print(new_word) 
convert_letter(word) 
+0

Это сработало, теперь моя единственная проблема в том, что он возвращает все пробелы как один, так что он выглядит так: __ ________ вместо того, чтобы иметь место между каждым нижнее подчеркивание. – Sebastian

+1

Что вы хотите, чтобы ваш выход был? –

+0

Вместо того, чтобы все это вместе, я хочу пробел между «_», чтобы он выглядел так: _ _ _ _ _ _ _ _ _. Это для игры палача, поэтому нужно четко определить, сколько символов у него есть. Вместо этого я получаю каждое подчеркивание вместе, что делает каждое слово похожим на большую пустую строку. – Sebastian

2

Проблема в коде, что str.replace не изменяет строку на месте, но возвращает копию с заменой сделано. Вы должны назначить его обратно, если вы хотите, чтобы заменить исходную строку

word = word.replace(word[i], '_') 

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

w = 'abc' 
w.replace('a', 'x') # should be w = w.replace(...) 
print(w) # prints 'abc' 

Если взять название вашего вопроса буквально, вы хотите заменить буквы с только подчеркиванием. Это оставило бы все специальные символы и цифры неповрежденными. В этом случае вы можете использовать string.ascii_lettrs и join

def convert_letter(word): 
    ''.join('_' if c in string.ascii_letters else c for c in word) 

Как вы, кажется, сказано в других комментариев, вы на самом деле хотите, подчеркиваний, чтобы иметь пространство между ними, если это так, то использовать ' '.join вместо

0

Если вы хотите пройти регулярное выражение маршрута:

import re 

word = "my example" 
word = re.sub('\w', '_ ', word) 

в зависимости от того, что конкретно вы хотите заменить, возможно, потребуется изменить регулярное выражение. Например, \w включает в себя номера, поэтому вместо этого вы можете выбрать [A-Za-z].

Обратите внимание, что как str.replace(), он также не изменяет оригинал.

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