今天遇到了一个题目记录一下,提取字符串中整数和浮点数。
下方是我的代码
# 提取字符串中的整数或者浮点数
s = input()
res = []
count = 0
for i in range(len(s)):
# 避免下次从s[i+1]继续循环,应从s[i+count]开始循环
if s[i] in '0123456789' and (i > count or i == 0):
d = ''
# 判断s[i]后面是否有数字若有则加入s[i],然后将count赋值,避免下次从s[i+1]继续循环,应从s[i+count]开始循环
count1 = 0
for j in range(i + 1, len(s)):
# 过滤结果中。出现超过1次以上的字符串
if s[j] == '.' and d.count('.') == 1:
break
else:
if s[j] in '0123456789.':
d += s[j]
count = j
else:
break
res.append(s[i] + d)
# 过滤结果中含有例如88.的数字,将.去除
for x in range(len(res)):
if res[x][-1] == '.':
res[x] = res[x][:-1]
print(','.join(res))
核心思路就是,我们遍历字符串过程中,如果遇到数字就要判断他接下来遇到的是不是数字,所以会从当前遇到数字索引继续开始遍历,直到字符串结束
但第二次遍历中,中间有小数点的我们也要判断,因为小数也是数字。
但是我们不能一直加小数点,如果我们再次此次遍历再遇到小数点并且字符串里小数点数超过1我们就要退出子循环,因为这样才能保证我们的小数是正常的,不然会出现88....888这种情况。
最后我们得到的列表中包含了我们所有的数字,但是还会有一种情况,那就是88.这种情况,最后一位是小数点,我们也要把他去掉。
这样我们就得到了完成数字啦