鱼C论坛

 找回密码
 立即注册
查看: 1384|回复: 9

[已解决]课后作业

[复制链接]
发表于 2018-4-26 21:09:14 | 显示全部楼层 |阅读模式

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

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

x
import 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') # 记得一定要加 b 吖

    girl_file = open(file_name_girl, 'wb') # 记得一定要加 b 吖


    pickle.dump(boy, boy_file)

    pickle.dump(girl, girl_file)


    boy_file.close()

    girl_file.close()


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)

            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')

上面大字显示的红色代码是什么意思,左边是元组  右边是列表??(把答案原封不动的复制到pycharm里也报错,但是为啥甲鱼哥的视频里就可以运行)
(最后想不出原因就改成这样了:
split_list = each_line.split(':',1)
        if split_list[0] == '小客服':
            girl.append(split_list[1])
        if split_list[0] == '小甲鱼':
            boy.append(split_list[1]))
最佳答案
2018-4-30 19:43:57
本帖最后由 ABC23 于 2018-4-30 20:05 编辑

没有课后习题,我就自己随便写了个文件
===========================
>>> paragraph = '''张三:你好,我是张三。
李四:你好,我是李四。'''
>>> with open('foo.txt', 'w') as f:
        f.write(paragraph)

23

>>> with open('foo.txt', 'r') as f:
        zhang = []
        li = []
        paragraph = f.readlines()
        for line in paragraph:
                (role, saying) = line.split(':', 1)
                if role == '张三':
                        zhang.append(saying.rstrip())
                else:
                        li.append(saying.rstrip())

                       
>>> for line1 in zhang:
        for line2 in li:
                print(line1)
                print(line2)

               
你好,我是张三。
你好,我是李四。

没有问题啊。
============================
看你的反馈是因为参数数目不匹配造成的,这究竟是为什么呢???

>>> with open('foo.txt', 'r') as f:
        zhang = []
        li = []
        paragraph = f.readlines()
        for line in paragraph:
                (role, saying) = line.split(':', 1)
                if role == '张三':
                        zhang.append(saying.rstrip())
                else:
                        li.append(saying.rstrip())

                       
Traceback (most recent call last):
  File "<pyshell#37>", line 6, in <module>
    (role, saying) = line.split(':', 1)
ValueError: not enough values to unpack (expected 2, got 1)

哈哈,我想了下终于明白了(看上面第六行,元组解包那一行)——原来是因为【误把中文输入的:当作了英文输入的:】,这样在【元组解包】后,右边只有一个(相当于没有解包),而左边有两个,这就造成了数目上的不匹配。

应该就是这个了。选我为最佳答案吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-27 08:48:07 | 显示全部楼层
请问楼主用什么做的课后习题,我鱼币不够
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-27 09:01:05 | 显示全部楼层
元组解包
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-30 18:30:14 | 显示全部楼层
爬虫天下第一 发表于 2018-4-27 08:48
请问楼主用什么做的课后习题,我鱼币不够

就是0基础python入门课后作业
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-30 18:31:25 | 显示全部楼层

为啥答案在pycharm里运行不了呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-30 18:38:03 | 显示全部楼层
我叫枫剑 发表于 2018-4-30 18:31
为啥答案在pycharm里运行不了呢

请把TraceBack贴出来,看看是怎么回事
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-30 18:52:52 | 显示全部楼层
ABC23 发表于 2018-4-30 18:38
请把TraceBack贴出来,看看是怎么回事

Traceback (most recent call last):
  File "E:/变秃才能变得更强/test.py", line 58, in <module>
    split_file('E://PY文本//record.txt')
  File "E:/变秃才能变得更强/test.py", line 35, in split_file
    (role, line_spoken) = each_line.split(':', 1)
ValueError: not enough values to unpack (expected 2, got 1)

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

使用道具 举报

发表于 2018-4-30 19:19:13 | 显示全部楼层
我的理解是调用splite函数将each_line以:切割成两段,这两段分别存在两个字符串变量role和line_spoken中,我觉得这个括号并不代表元组,应该只是因为切割返回的两个字符串是一个整体,用括号比较好理解,楼主其实可以验证,比图用print(type(   ))就可以输出变量的类型。
另外小甲鱼的源代码运行却发生错误我之前也有遇到过,其实问题可能是由于编码格式的问题,当时的我当时的解决方法其实open('filename', encoding='utf-8'),这里需要改一下,具体的可以自己去试试。希望有帮助。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2018-4-30 19:43:57 | 显示全部楼层    本楼为最佳答案   
本帖最后由 ABC23 于 2018-4-30 20:05 编辑

没有课后习题,我就自己随便写了个文件
===========================
>>> paragraph = '''张三:你好,我是张三。
李四:你好,我是李四。'''
>>> with open('foo.txt', 'w') as f:
        f.write(paragraph)

23

>>> with open('foo.txt', 'r') as f:
        zhang = []
        li = []
        paragraph = f.readlines()
        for line in paragraph:
                (role, saying) = line.split(':', 1)
                if role == '张三':
                        zhang.append(saying.rstrip())
                else:
                        li.append(saying.rstrip())

                       
>>> for line1 in zhang:
        for line2 in li:
                print(line1)
                print(line2)

               
你好,我是张三。
你好,我是李四。

没有问题啊。
============================
看你的反馈是因为参数数目不匹配造成的,这究竟是为什么呢???

>>> with open('foo.txt', 'r') as f:
        zhang = []
        li = []
        paragraph = f.readlines()
        for line in paragraph:
                (role, saying) = line.split(':', 1)
                if role == '张三':
                        zhang.append(saying.rstrip())
                else:
                        li.append(saying.rstrip())

                       
Traceback (most recent call last):
  File "<pyshell#37>", line 6, in <module>
    (role, saying) = line.split(':', 1)
ValueError: not enough values to unpack (expected 2, got 1)

哈哈,我想了下终于明白了(看上面第六行,元组解包那一行)——原来是因为【误把中文输入的:当作了英文输入的:】,这样在【元组解包】后,右边只有一个(相当于没有解包),而左边有两个,这就造成了数目上的不匹配。

应该就是这个了。选我为最佳答案吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-5-2 18:31:09 | 显示全部楼层
没见过海爱尔兰 发表于 2018-4-30 19:19
我的理解是调用splite函数将each_line以:切割成两段,这两段分别存在两个字符串变量role和line_spoken中, ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 09:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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