鱼C论坛

 找回密码
 立即注册
查看: 2164|回复: 10

代码如下:实现输入一段中文,分几个小句子。希望大侠改错并优化

[复制链接]
发表于 2016-5-19 16:51:03 | 显示全部楼层 |阅读模式
1鱼币
a=r''',。"“”;:?!?! ,.'''
b=input()
b=list(b)
c=[]
i=0
k=0
n=0
while i<=len(b):      
    if b[i] in a:
        i+=1
    else:
        k=i
        while b[k] not in a:
            k+=1
        s = "".join(b[i:k])        
        c.append(s)      
        n+=1
        i=k        
print (c)
print ('共有%d个句子'%n)

最佳答案

查看完整内容

借用一下@holdme 兄的例子: 这种方法更python一些
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-5-19 16:51:04 | 显示全部楼层
借用一下@holdme 兄的例子:
  1. text = '''《面朝大海,春暖花开》是海子于1989年所写的一首抒情诗。
  2. 全诗共三节,第一节表现了诗人对质朴、
  3. 单纯而自由的人生境界的向往,
  4. 对“永恒”、未知世界的探寻精神。
  5. 第二节写诗人找到幸福后无法抑制的喜悦之情。
  6. 第三节写诗人对世界的祝福。诗人将直抒胸臆与暗示、象征手法结合起来,使全诗既清澈又深厚,
  7. 既明朗又含蓄,畅快淋漓而又凝重、丰富,抒发了诗人的向往幸福而又孤独凄凉之情。'''
  8. punc=r''',。"“”;:?!?! ,.《》'''
  9. result = text.translate(str.maketrans(punc,' '*16)).split()
  10. print(result)
  11. print(len(result))
复制代码

这种方法更python一些
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-5-19 16:54:47 | 显示全部楼层
就是把一段话分为几个句子,并去除标点符号,把每个句子做为一个元素存入列表C中。
如:把“我爱你,中国!”
分解成['我爱你','中国']
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-5-19 18:37:27 | 显示全部楼层
试试看这样呢:
  1. def clear_punctuation(sentence):
  2.     punc=r''',。"“”;:?!?! ,.'''
  3.     length = len(sentence)
  4.     idx = [] #储存指针
  5.    
  6.     for i in range(length):
  7.         if sentence[i] in punc:
  8.             idx.append(i)

  9.     rsl = [sentence[0:idx[0]]]#储存结果
  10.     for i in range(len(idx)-1):
  11.         rsl += [sentence[idx[i]+1:idx[i+1]].strip()]
  12.     return rsl
  13.    
  14.    

  15. text = '''《面朝大海,春暖花开》是海子于1989年所写的一首抒情诗。
  16. 全诗共三节,第一节表现了诗人对质朴、
  17. 单纯而自由的人生境界的向往,
  18. 对“永恒”、未知世界的探寻精神。
  19. 第二节写诗人找到幸福后无法抑制的喜悦之情。
  20. 第三节写诗人对世界的祝福。诗人将直抒胸臆与暗示、象征手法结合起来,使全诗既清澈又深厚,
  21. 既明朗又含蓄,畅快淋漓而又凝重、丰富,抒发了诗人的向往幸福而又孤独凄凉之情。'''
  22. result = clear_punctuation(text)
  23. print(clear_punctuation(text))
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
slzsxyc + 5 + 5 + 3 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-5-24 14:52:52 | 显示全部楼层
挥舞乾坤 发表于 2016-5-19 20:17
借用一下@holdme 兄的例子:

这种方法更python一些

虽然还有些没看懂,但觉得很漂亮
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-5-24 14:53:46 | 显示全部楼层
holdme 发表于 2016-5-19 18:37
试试看这样呢:

谢谢,还想请教一下我的编码出错在什么地方
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-5-24 17:38:01 | 显示全部楼层
学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-5-25 07:15:01 | 显示全部楼层
slzsxyc 发表于 2016-5-24 14:52
虽然还有些没看懂,但觉得很漂亮

基本看懂了,但maketrans前面为什么要加str.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-5-25 08:34:01 | 显示全部楼层
本帖最后由 挥舞乾坤 于 2016-5-25 08:36 编辑
slzsxyc 发表于 2016-5-25 07:15
基本看懂了,但maketrans前面为什么要加str.


我以前的读书笔记:
3.4.7 translate
在使用translate之前要创建映射表
在python 2.x 中用string模块中的maketrans('要替换的字符集','替换后的字符集'),这个返回的是一个替换后的ascii字符集合,256个字符
在python 3.x 中可以直接使用str.maketrans('要替换的字符集','替换后的字符集'),返回的是一个字典
要替换的和替换后的长度相等,并一一对应

另外3.x种可以用任意字符串接.maketrans()创建映射表,比如''.maketrans(),当然也可以用str了,个人理解为在3.x中,maketrans是str的类方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-5-26 17:01:20 | 显示全部楼层
挥舞乾坤 发表于 2016-5-25 08:34
我以前的读书笔记:
3.4.7 translate
在使用translate之前要创建映射表

谢谢了,虽然暂时还不是很理解,但记下了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-5-28 21:03:26 | 显示全部楼层
不会!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 08:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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