鱼C论坛

 找回密码
 立即注册
查看: 1629|回复: 5

[已解决]课后习题疑问

[复制链接]
发表于 2018-5-1 07:58:01 | 显示全部楼层 |阅读模式

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

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

x
题目:
0、编写一个程序,这次要求使用pickle将文件(record.txt)里的对话按照以下的要求,腌制成不同的文件。
-小甲鱼的对话单独保存为boy_*.txt的文件(去掉"小甲鱼:")
-小客服的对话单独保存为girl_*.txt的文件(去掉"小客服:")
-文件中总共有三段对话,分别保存为boy_1.txt, girl_1.txt, boy_2.txt, girl_2.txt, boy_3.txt, girl_3.txt共6个文件
(提示:文件中不同的对话间已经使用“==============”分割)

代码:
import pickle

# 创建pickle方法的存储函数,到文件
def save_file(boy, girl, count):
    file_name_boy = 'boy_' + str(count) + '.txt'
    file_name_girl = 'girl_' + str(count) + '.txt'

    boy_file = open(file_name_boy, 'wb')
    girl_file = open(file_name_girl, 'wb')

    pickle.dump(boy, boy_file)
    pickle.dump(girl, girl_file)

    boy_file.close()
    girl_file.close()


#根据条件分隔6个文件   
def split_file(file_name):
    count  = 1
    boy = []
    girl = []

    f = open(file_name)

    for each_line in f:
        if each_line[:6] != '=====':
            (role, line_spoken)  = each_line.split(':', 1) #从位置1开始用:进行切片
            if role == '小甲鱼':
                boy.append(line_spoken)
            if role == '小客服':
                girl.append(line_spoken)
        else:
            save_file(boy, girl, count)

            boy = []
            girl  = []
            count  += 1


    save_file(boy, girl, count)
    f.close()

split_file('record.txt')

问题1:
(role, line_spoken)  = each_line.split(':', 1) 代码能呈现什么效果?
问题2:boy.append(line_spoken) 添加的是什么内容?
问题3:else主要是表达什么意思?
最佳答案
2018-5-1 09:56:16
1、假如文件写的是“小甲鱼:xxxxx”---each_line.split(':', 1)是按第一个:进行分割,将小甲鱼与xxx分开
        role为分割后“ : ”前面的字符;即:小甲鱼
         line_spoken为分割后“ : ”后面面的字符;即:xxxx

2、boy.append(line_spoken) 添加的是“小甲鱼:” 后面的字符;即:xxxxxxxxxxxxxx

3、else主要是如果if  each_line[:6] != '====='条件不成立,就执行else语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-5-1 09:56:16 | 显示全部楼层    本楼为最佳答案   
1、假如文件写的是“小甲鱼:xxxxx”---each_line.split(':', 1)是按第一个:进行分割,将小甲鱼与xxx分开
        role为分割后“ : ”前面的字符;即:小甲鱼
         line_spoken为分割后“ : ”后面面的字符;即:xxxx

2、boy.append(line_spoken) 添加的是“小甲鱼:” 后面的字符;即:xxxxxxxxxxxxxx

3、else主要是如果if  each_line[:6] != '====='条件不成立,就执行else语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-1 09:58:16 | 显示全部楼层
(':', 1) 按“ :  ”分割一次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-1 09:59:09 | 显示全部楼层
故梦L 发表于 2018-5-1 09:56
1、假如文件写的是“小甲鱼:xxxxx”---each_line.split(':', 1)是按第一个:进行分割,将小甲鱼与xxx分开
...

        else:
            save_file(boy, girl, count)

            boy = []
            girl  = []
            count  += 1


    save_file(boy, girl, count)
    f.close()
它这一段是表达的什么意思呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-1 10:15:06 | 显示全部楼层
1、
(1)string.split(str="",num)
根据指定的分隔符str,对字符串进行切片。不带参数,则默认为以空格为分隔符。num指分割次数,如果参数 num 有指定值,则仅分隔 num 个子字符串
(2)string.split(str="",num)[n]
切割后,读取第n片内容。
代码演示:
(A)按空格切分2次,即分3端,分别给a,b,c
  1. >>> str = "Line1-abcdef \nLine2-abc \nLine4-abcd"
  2. >>> [a,b,c]=str.split(' ',2)
  3. >>> a
  4. 'Line1-abcdef'
  5. >>> b
  6. '\nLine2-abc'
  7. >>> c
  8. '\nLine4-abcd'
复制代码


(B)按空格切分1次,即分2端,给a,b
  1. >>> str = "Line1-abcdef \nLine2-abc \nLine4-abcd"
  2. >>> [a,b]=str.split(' ',1)
  3. >>> a
  4. 'Line1-abcdef'
  5. >>> b
  6. '\nLine2-abc \nLine4-abcd'
复制代码


(C)按空格切分1次,内容全部给a,然后分别取出a中位置0,1的内容
  1. >>> str = "Line1-abcdef \nLine2-abc \nLine4-abcd"
  2. >>> a=str.split(' ',1)
  3. >>> a
  4. ['Line1-abcdef', '\nLine2-abc \nLine4-abcd']
  5. >>> a=str.split(' ',1)[0]
  6. >>> a
  7. 'Line1-abcdef'
  8. >>> a=str.split(' ',1)[1]
  9. >>> a
  10. '\nLine2-abc \nLine4-abcd'
复制代码


2、理解了函数split(),第二问就能解决。意思是,按照“:”切分,切分1次,分成两端,分别给前面两个参数。
  1. >>> each_line='小甲鱼:你好!'
  2. >>> (role, line_spoken)  = each_line.split(':', 1)
  3. >>> role
  4. '小甲鱼'
  5. >>> line_spoken
  6. '你好!'
复制代码


3、else意思是上面不成立,即没有遇见====号分界线

评分

参与人数 1荣誉 +5 收起 理由
a3522661110 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-5-1 10:23:24 | 显示全部楼层
else:保存文件与将清空列表
save_file(boy, girl, count):调用函数将列表打印
f.close()关闭文件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 16:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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