我的要求
使用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])
答案 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])