我的要求
使用Python创建函数cleanstring(S)
来“清理”句子S
中的空格。
该程序与您编写代码以搜索字符串以查找单词有关,因此您不可以在Python中使用split函数。
您可以使用if和while语句的基本功能以及len和concatentation的字符串操作来解决此问题。
例如:如果输入为:“世界你好!”那么输出应该是:“世界你好!”
问题
我的程序删除了程序中多余的字符。
输入:“ Hello World!”
输出:“ HellWorl”
如何解决程序中的错误?
def cleanupstring (S):
newstring = ["", 0]
j = 1
for i in range(len(S) - 1):
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 :(得分:2)
欢迎使用Stackoverflow。当我开始阅读时,尽管这将是一个“请回答我的作业”问题,但实际上您在解决问题上已经做出了相当大的努力,因此,我很乐于尝试并提供帮助(只有您可以说出是否我实际上是这样做的。)
当您学习一种新语言时,有时很难放弃其他语言更合适的技术。通常一个字符一个字符地完成操作,通常只使用for c in s
而不是像在C语言中那样递增索引值(尽管这两种方法都行得通,有时将不必要的索引递增有时视为“ unpythonic”)。您的基本想法似乎是先检测一个空格,再检测另一个空格,否则将字符从输入复制到输出。
可以通过保留发送到输出的最后一个字符来简化逻辑。如果是空格,请不要再发送空格。前面的一个循环消除了任何前导空格,并且由于末尾最多可以有一个空格,因此如果存在,可以很容易地消除。
我不确定您为什么使用列表来保留结果,因为这会使代码更难以理解。如果您需要返回多条信息,则在单个变量中计算它们然后在return
语句中构造结果要容易得多。
因此,一种理想的修改是将newstring[0]
替换为out_s
,将newstring[1]
替换为count
。这将使事情更加清晰。然后,如果确实需要列表,请在return [out_s, count]
结尾。使用return out_s, count
的元组会更常见。
def cleanupstring (s):
out_s = ''
count = 0
last_out = ' '
for c in s:
if c != ' ' or last_out != ' ':
last_out = c
out_s += c
else:
count += 1
if last_out == ' ':
count -= 1
out_s = out_s[:-1]
return out_s, count
# 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])
有时候,您只是没有某些信息可以帮助您非常简洁地回答问题。您很可能尚未听说过strip
和replace
方法,因此我想像一下以下(未经测试的)代码
def cleanupstring(s):
out_s = s
while ' ' in out_s:
out_s = out_s.strip().replace(' ', ' ')
return out_s, len(s)-len(out_s)
马上就解决。
此外,您可以使用“拆包分配”将功能输出的不同元素直接通过写操作绑定到名称上
s, c = cleanupstring(...)
我确定你会同意
print("A total of", c, "characters have been removed from your string.")
print("The new string is:", s)
更容易阅读。 Python高度重视可读性,因为使用可读代码可以更轻松地理解作者的意图。如果您的代码难以理解,那么您仍有很大的机会要做重构!
答案 1 :(得分:1)
如果“空格”实际上是空格而不是空格,则可以执行以下操作:
import re
def clean_string(value):
return re.sub('[ ]{2,}', ' ', value.strip())
如果剥离的值包含连续的空格,则替换为一个空格。
答案 2 :(得分:0)
我的方法是保持最后一个字符可用,并确定是否为空格:
def cleanupstring (S):
newstring = ["", 0]
last_character = ' ' # catch initial spaces
for i in range(len(S)-1):
char = S[i]
if char is ' ' and last_character is ' ':
continue # ignore
else:
last_character = char
newstring [0] = newstring[0] + char
return newstring