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

#python #python-3.x

#python #python-3.x

Вопрос:

Итак, у меня есть, например, эта строка: ‘I love python’, и я хочу преобразовать все пробелы в ‘_’. Моя проблема в том, что мне также нужно удалить внешние пробелы, поэтому я не заканчиваю с результатом: ‘_I_love_python__’ и больше похоже на это ‘I_love_python’ Я поискал и обнаружил, что могу разработать его с помощью одной строки кода mystring.strip().replace(" ", "_") , что, к сожалению, является синтаксисом, который я не могу применить в своем эссе. Итак, что я получил, так это:

 frase= str(input('Introduza: '))

aux=''


for car in frase:
    if car==' ':
        car='_'
        aux =car
    else:
        aux =car



print(aux)
  

Моя проблема сейчас заключается в удалении этих внешних пробелов. О чем я думал, так это о запуске другого for i в начале и другого в конце строки и останавливаться, пока они не найдут символ без пробела. Но, к сожалению, я не смог этого сделать…

Ценю всю возможную помощь!

Комментарии:

1. aux = frase.strip().replace(" ", "_") Сначала вы должны удалить внешние пробелы, затем заменить то, что осталось, на _ .

2. @chepner, OP говорит, что он не может это использовать.

3. Приведенная причина для того, чтобы не использовать это, не имеет смысла.

4. Разрешено ли вам использовать regex?

5. Можем ли мы получить более подробную информацию о том, что вам разрешено использовать? Можете ли вы сделать frase = frase.strip() , чтобы избавиться от внешних пробелов?

Ответ №1:

Я пришел к следующему решению:

Вы выполняете итерацию по строке, но вместо замены пробела подчеркиванием, как только оно появляется, вы сохраняете количество встречающихся пробелов. Затем, как только достигнут символ, не являющийся пробелом, вы добавляете количество найденных пробелов к строке. Итак, если строка заканчивается большим количеством пробелов, она никогда не достигнет символа, отличного от пробела, и, следовательно, никогда не добавит подчеркивания.

Чтобы убрать пробелы в начале, я просто добавил условие для добавления подчеркиваний: «Сталкивался ли я раньше с символом без пробела?»

Вот код:

 text = "   I love   python    e  "

out = ""

string_started = False
underscores_to_add = 0
for c in text:
    if c == " ":
        underscores_to_add  = 1
    else:
        if string_started:
            out  = "_" * underscores_to_add
        underscores_to_add = 0
        string_started = True
        out  = c

print(out)  # prints "I_love___python____e"
  

Комментарии:

1. Большое вам спасибо! Из всех отправлений ваше содержит словарь, который я знаю и использую. Еще раз спасибо, что потратили некоторое время на мою проблему! Приветствую m8!

Ответ №2:

Вы можете использовать следующий трюк, чтобы удалить начальные и конечные пробелы в вашей строке:

 s = ' I love python   '

ind1 = min(len(s) if c == ' ' else n for n, c in enumerate(s))
ind2 = max(0 if c == ' ' else n for n, c in enumerate(s))

s = ''.join('_' if c == ' ' else c for c in s[ind1:ind2   1])

print('*', s, '*', sep='')
  

Вывод:

 *I_love_python*
  

Ответ №3:

Если вам не разрешено использовать метод strip ()

 def find(text):
    for i, s in enumerate(text):
        if s !=  " ":
            break
    return i

text = "   I love   python    e  "
text[find(text):len(text)-find(text[::-1])].replace(" ","_")

texts = ["   I love   python    e  ","I love   python    e"," I love   python    e","I love   python    e ", "I love   python    e"]
for text in texts:
    print (text[find(text):len(text)-find(text[::-1])].replace(" ","_"))
  

вывод:


I_love___python____e
I_love___python____e
I_love___python____e
I_love___python____e
I_love___python____e

  • Заданная строка find найдет первый символ без пробела в строке
  • Используйте find , чтобы найти первый символ без пробела и последний символ без пробела
  • Получите подстроку, используя найденные выше индексы
  • Замените все пробелы на _ в приведенной выше подстроке

Комментарии:

1. Любопытно узнать, почему за это проголосовали и в чем моя ошибка 🙂 Это поможет мне в моих будущих ответах 🙂