jcpython2 发表于 2022-10-8 23:45:51

去除多余空格

本帖最后由 jcpython2 于 2022-10-8 23:51 编辑

输入多空格字符串,过滤多余空格,只留下一个空格

输入
aa bb   cc   dd   ffff
输出
aa bb cc dd ffff



解题法应该是有很多方法的,但请先指出我的代码的错误,因为我只学到字符串处理阶段


我的代码,打什么输出什么

思路是在循环中用j=0 或者 j=1判断前面是否有过空格

a = list(input())
b = ''
j = 0

#j =0 则本次循环未曾检测到空格,输出一个空格。j=1则已经输出过空格,跳过。输出过非空格元素后重置j
for i in a:
    if i.isspace() == True and j == 0: #如果i为空格 且上衣循环未为空(j =0),j == 1表示已经输出过一次空格
      b += i
      j == 1
    elif i.isspace() == True and j == 1: #i为空格 j=1则已经输出过空格,跳过合并
      pass
    else:                        #不为空格,直接合并,并且重置j==0,后续可加空格
      b += i
      j == 0
print(b)

lassiter 发表于 2022-10-9 00:03:19

不用编写那么长,活用split和join两个方法。
a=input("请随意输入带空格的字符串:")
b=' '.join(a.split())

print(b)

jcpython2 发表于 2022-10-9 00:11:47

lassiter 发表于 2022-10-9 00:03
不用编写那么长,活用split和join两个方法。

split学了经常用,join学了没想到这种用法

那么我的代码错在那里呢,还是想知道

lassiter 发表于 2022-10-9 00:34:30

看了半天终于发现你的代码问题了,第9、14行,应该是一个等号,你用了2个等号

临时号 发表于 2022-10-9 00:36:11

a = list(input())
b = ''
j = 0

#j =0 则本次循环未曾检测到空格,输出一个空格。j=1则已经输出过空格,跳过。输出过非空格元素后重置j
for i in a:
    if i.isspace() == True and j == 0: #如果i为空格 且上衣循环未为空(j =0),j == 1表示已经输出过一次空格
      b += i
      j = 1# 谁告诉你赋值用==的
    elif i.isspace() == True and j == 1: #i为空格 j=1则已经输出过空格,跳过合并
      pass
    else:                        #不为空格,直接合并,并且重置j==0,后续可加空格
      b += i
      j = 0# 谁告诉你赋值用==的
print(b)

临时号 发表于 2022-10-9 00:37:53

我看了好久,调试了n多次,结果竟然是这里的问题

jcpython2 发表于 2022-10-9 00:59:03

临时号 发表于 2022-10-9 00:37
我看了好久,调试了n多次,结果竟然是这里的问题

辛苦了老哥,这种低级错误我也看着惭愧,而且我还是调试多次才复制过来的求助的,真的抱歉了

人造人 发表于 2022-10-9 09:27:00

>>> import re
>>> str_ = 'aa bb   cc   dd   ffff'
>>> pattern = r' +'
>>> re.sub(pattern, ' ', str_)
'aa bb cc dd ffff'
>>>
页: [1]
查看完整版本: 去除多余空格