String out of index
我的要求
使用Python创建一个函数
- 句子可以在前面和/或末尾和/或单词之间具有额外的空格。
-
子例程返回句子的新版本而没有额外的空格。
- 也就是说,在新字符串中,单词应该相同但开头不应有空格,每个单词之间只有一个空格,末尾没有空格。
这个程序是关于你编写代码来搜索字符串来查找单词,所以你不能在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! |