鱼C论坛

 找回密码
 立即注册
查看: 2388|回复: 6

[已解决]新手小白求助python 关于分割解析字符串的问题

[复制链接]
发表于 2020-7-8 09:49:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目要求是Write code using find() and string slicing  to extract the number at the end of the line below(text = "X-DSPAM-Confidence:    0.8475"). Convert the extracted value to a floating point number and print it out.

我写的code是
text = "X-DSPAM-Confidence:    0.8475";
a = data.find(" ",:)
print(a)
b = data.find(5)
print(b)
c = data[a+1:b+1]
print(c)

最后答案应该是0.8475

求问1)这代码第二行为啥有问题, 2)怎样改这段代码比较好, 谢谢🙏
最佳答案
2020-7-8 10:01:00
本帖最后由 Twilight6 于 2020-7-8 10:25 编辑

[b]

find 第一个参数填的是需要查找的字符,第二个参数是开始的位置参数,第三个是结束的位置参数,都是指查找的范围,如果没填默认是整个字符串范围,所以这里的find 用法错了

你的 data 参数应该改成 text ,因为你data 都没有定义

最后一步列表切片是包含左端不包含右端的元素,所以应该改成 [a:b+1] ,还有题目要求提取出来后i转为浮点型,那么要加上 float 转化为浮点型下

  1. text = "X-DSPAM-Confidence:    0.8475"
  2. a = text.find("0")
  3. print(a)
  4. b = text.find("5")
  5. print(b)
  6. c = float(text[a:b+1])
  7. print(c)
复制代码


在这里单纯提取最后的数字这样改就行:
  1. text = "X-DSPAM-Confidence:    0.8475"
  2. a = text.find("0")
  3. c = float(text[a:])
  4. print(c)
复制代码

输出结果:
  1. 0.8475
复制代码






[/b]
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-8 09:53:05 | 显示全部楼层
是这个意思吗

>>> text = "X-DSPAM-Confidence:    0.8475"
>>> print(text.split(":")[-1])
    0.8475
>>>
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-8 09:55:02 | 显示全部楼层
你这代码写的...
首先,字符串叫text,你用data.find???
其次,谁教你find是那么用的??
还有,find的参数必须是字符串,填个数字??
  1. data = "X-DSPAM-Confidence:    0.8475";
  2. a = data.find(" ")
  3. print(a)
  4. b = data.find('5')
  5. print(b)
  6. c = data[a+4:b+1]
  7. print(c)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-8 09:57:07 | 显示全部楼层
本帖最后由 赚小钱 于 2020-7-8 10:02 编辑

1. data 是什么玩意
2. data.find(" ")
3. find 接受字符串,5是什么鬼
4. "X-DSPAM-Confidence:    0.8475" 里面究竟有几个空格

  1. In [9]: text = "X-DSPAM-Confidence:    0.8475";

  2. In [10]: a = text.find(" ")

  3. In [11]: print(a)
  4. 19

  5. In [12]: b = text.find("5")

  6. In [13]: print(b)
  7. 28

  8. In [14]: c = text[a+1:b+1]

  9. In [15]: print(c)
  10.    0.8475
复制代码


当然,如果是我写的话,会是这个样子
  1. float(text.split(":")[1].strip())
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-8 09:57:41 | 显示全部楼层
本帖最后由 yhhpf 于 2020-7-8 10:00 编辑
  1. >>> text = "X-DSPAM-Confidence:    0.8475"
  2. >>> a = text.find(".")
  3. >>> a
  4. 24
  5. >>> b = text[a-1:]
  6. >>> b
  7. '0.8475'
  8. >>> type(b)
  9. <class 'str'>
  10. >>> b = float(b)
  11. >>> type(b)
  12. <class 'float'>
  13. >>> print(b)
  14. 0.8475
复制代码

第一,题目没让你用正则表达式,让你用find()函数和切片去将text中的浮点数值取出,并转成浮点类型打印出来;

通过find找到"."(因为好多空格呀,哈哈),然后用切片取出.左边一位到最后,取出之后用type()查看会发现是str字符串,所以通过b=float(b)转换为浮点类型,最后打印出来;
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-8 10:01:00 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-7-8 10:25 编辑

[b]

find 第一个参数填的是需要查找的字符,第二个参数是开始的位置参数,第三个是结束的位置参数,都是指查找的范围,如果没填默认是整个字符串范围,所以这里的find 用法错了

你的 data 参数应该改成 text ,因为你data 都没有定义

最后一步列表切片是包含左端不包含右端的元素,所以应该改成 [a:b+1] ,还有题目要求提取出来后i转为浮点型,那么要加上 float 转化为浮点型下

  1. text = "X-DSPAM-Confidence:    0.8475"
  2. a = text.find("0")
  3. print(a)
  4. b = text.find("5")
  5. print(b)
  6. c = float(text[a:b+1])
  7. print(c)
复制代码


在这里单纯提取最后的数字这样改就行:
  1. text = "X-DSPAM-Confidence:    0.8475"
  2. a = text.find("0")
  3. c = float(text[a:])
  4. print(c)
复制代码

输出结果:
  1. 0.8475
复制代码






[/b]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-8 10:51:30 | 显示全部楼层
感谢各位大神指导
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-29 07:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表