字符串超出索引

时间:2017-11-20 03:40:17

标签: python string indexing

我的要求

使用Python创建一个函数cleanstring(S)来“清理”句子S中的空格。

  • 句子可能在前面和/或末尾和/或单词之间有额外的空格。
  • 子例程返回句子的新版本,没有多余的空格。
    • 也就是说,在新字符串中,单词应该相同,但开头不应有空格,每个单词之间只有一个空格,最后没有空格。

这个程序是关于你编写代码来搜索字符串来查找单词,所以你不能在Python中使用split函数。

您可以使用if和while语句的基本功能以及len和concatentation的字符串操作来解决此问题。

例如:如果输入是:“Hello to the world!”那么输出应该是:“向世界问好!”

问题

我的程序会产生错误。

如何修复程序中的错误?

def cleanupstring (S):
newstring = ["", 0]
j = 1
for i in range(len(S)):
    if S[i] != " " and S[i+1] != " ":
        newstring[0] = newstring[0] + S[i]
    else:
        newstring[1] = newstring [1] + 1

return newstring


# main program

sentence = input("Enter a string: ")

outputList = cleanupstring(sentence)

print("A total of", outputList[1], "characters have been removed from your 
string.")
print("The new string is:", outputList[0]) 

2 个答案:

答案 0 :(得分:0)

可以使用不同的方法来删除前导空格和尾随空格,将多个空格转换为一个空格,并在感叹号,逗号等之前删除空格:

mystr = "  Hello  .       To  ,   the world !  "
print(mystr)

mystr = mystr.strip()               # remove leading and trailing spaces

import re                           # regex module
mystr = re.sub(r'\s+'," ", mystr)   # convert multiple spaces to one space.
mystr = re.sub(r'\s*([,.!])',"\\1", mystr)  # remove spaces before comma, period and exclamation etc.
print(mystr)

输出:

  Hello  .       To  ,   the world !  
Hello. To, the world!

答案 1 :(得分:0)

评论中的解决方案是正确的。你得到一个错误,因为你尝试在范围(len(S))中的循环中访问 S [i + 1]

<强>解决方案

仅循环到倒数第二个元素

for i in range(len(S) - 1):

<强>建议

正如你所说,你不能使用 spit()函数,所以假设你可以使用其他函数(修改字符串,而不是提取单词), strip()函数和一些正则表达式将执行 cleanupstring()尝试执行的操作。

<强>代码

def cleanupstring (S):
    newstring = ["", 0]
    init_length = len(S)
    S = S.strip()    #remove space from front and end
    S = re.sub(r'\s+'," ", S)   #remove extra space from between words
    newstring[0] = S
    newstring[1] = init_length - len(S)
    return newstring

# main program
sentence = input("Enter a string: ")
outputList = cleanupstring(sentence)

print("A total of", outputList[1], "characters have been removed from your 
string.")
print("The new string is:", outputList[0])