关于python:索引之外的字符串

String out of index

我的要求

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

  • 句子可以在前面和/或末尾和/或单词之间具有额外的空格。
  • 子例程返回句子的新版本而没有额外的空格。

    • 也就是说,在新字符串中,单词应该相同但开头不应有空格,每个单词之间只有一个空格,末尾没有空格。

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

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

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

我的程序会产生错误。

如何修复程序中的错误?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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])


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

仅循环到倒数第二个元素

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

建议

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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])

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

1
2
3
4
5
6
7
8
9
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)

输出:

1
2
  Hello  .       To  ,   the world !  
Hello. To, the world!