我怎么不计算字符串之间的间隔

时间:2019-03-17 16:02:59

标签: 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)

我现在的问题是删除这些外部空间。我想到的是在字符串的开头和结尾处为我运行另一个,并停下来直到他们找到一个非空间角色。但是不幸的是我还没能做到这一点...

感谢您提供的所有帮助!

3 个答案:

答案 0 :(得分:1)

我想出了以下解决方案:

您可以遍历字符串,但是不必立即用下划线替换空格,而是存储遇到的空格数量。然后,一旦达到非空格字符,则将找到的空格量添加到字符串中。因此,如果字符串以很多空格结尾,则它将永远不会到达非空格字符,因此永远不会添加下划线。

为了在开始时删除空格,我只是添加了一个条件,以添加下划线为:“我之前是否遇到过非空格字符?”

代码如下:

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="container">
  <select v-model="selected">
    <option
      v-for="item in items"
      :value="item">
      {{ item.name }}
    </option>
  </select>
  
  <mini-card :item="selected" />
</div>

答案 1 :(得分:0)

您可以使用以下技巧来删除字符串中的前导和尾随空格:

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*

答案 2 :(得分:-1)

如果不允许使用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查找第一个非空格字符和最后一个非空格字符
  • 使用上面找到的索引获取子字符串
  • 在上面的子字符串中用_替换所有空格