鱼C论坛

 找回密码
 立即注册
查看: 1937|回复: 8

[已解决]零基础入门学习python第29课“一个任务”求助

[复制链接]
发表于 2020-7-10 17:16:45 | 显示全部楼层 |阅读模式

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

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

x
各位大佬,小弟按照课件中程序编辑如下:
f = open('record.txt')

boy = []
girl = []
count = 1

for each_line in f:
    if each_line != '======':
        # 这里进行字符串分割操作
        (role, line_spoken) = each_line.split(' : ', 1)
        if role == '小甲鱼':
            boy.append(line_spoken)
        if role == '小客服':
            girl.append(line_spoken)      
    else:
        # 文件的分别保存操作
        file_name_boy = 'boy_' + str(count) + '.txt'
        file_name_girl = 'girl_' + str(count) + '.txt'

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

        boy_file.writelines(boy)
        girl_file.writelines(girl)

        boy_file.close()
        girl_file.close()

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

f.close()

结果在执行时有如下报错:
Traceback (most recent call last):
  File "E:/python/test_1.py", line 10, in <module>
    (role, line_spoken) = each_line.split(' : ', 1)
ValueError: not enough values to unpack (expected 2, got 1)

请问主要是什么原因引发的,以及如何解决呢?
最佳答案
2020-7-10 17:26:11
Pugss_风 发表于 2020-7-10 17:21
您好,还是不行哦,依然是split函数那里提示缺少参数。

(role, line_spoken) = each_line.split(':', 1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-10 17:18:27 | 显示全部楼层
本帖最后由 Twilight6 于 2020-7-10 17:21 编辑


if each_line != '======':  这里错了 需要列表切片前6 个 ,因为你后面判断的是 6 个等号

否则你 for 循环每次都是读取一行的,会把一行内所有的 = 号都读取出来,导致 if 条件始终成立

而 if 条件成立了 通过 split 切割发现没有 :冒号,所以只返回一个值,而你设置了两个参数来接收导致报错

f = open('record.txt')

boy = []
girl = []
count = 1

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:
        # 文件的分别保存操作
        file_name_boy = 'boy_' + str(count) + '.txt'
        file_name_girl = 'girl_' + str(count) + '.txt'

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

        boy_file.writelines(boy)
        girl_file.writelines(girl)

        boy_file.close()
        girl_file.close()

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

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

使用道具 举报

 楼主| 发表于 2020-7-10 17:21:59 | 显示全部楼层
Twilight6 发表于 2020-7-10 17:18
if each_line != '======':  这里错了 需要列表切片前6 个 ,因为你后面判断的是 6 个等号

否则你 for ...

您好,还是不行哦,依然是split函数那里提示缺少参数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-10 17:22:17 | 显示全部楼层
还没学到这一步,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-10 17:25:01 | 显示全部楼层
Pugss_风 发表于 2020-7-10 17:21
您好,还是不行哦,依然是split函数那里提示缺少参数。



那你把 split 切片的冒号改成英文的,而且不能有空格,你有空格肯定切片会失败
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-10 17:26:11 | 显示全部楼层    本楼为最佳答案   
Pugss_风 发表于 2020-7-10 17:21
您好,还是不行哦,依然是split函数那里提示缺少参数。

(role, line_spoken) = each_line.split(':', 1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-10 17:26:40 | 显示全部楼层
Twilight6 发表于 2020-7-10 17:25
那你把 split 切片的冒号改成英文的,而且不能有空格,你有空格肯定切片会失败

找到原因了,感谢感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-10 17:29:14 | 显示全部楼层
程序中有两个问题:
1、if each_line != '======':条件句中,未设定字符串长度,应改为:if each_line[:6] != '======':
2、split函数中的" : "包含了空格,所以导致无法完成字符串分割的操作,应去掉空格。此外还应注意是英文冒号。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-10 17:29:47 | 显示全部楼层
Pugss_风 发表于 2020-7-10 17:29
程序中有两个问题:
1、if each_line != '======':条件句中,未设定字符串长度,应改为:if each_line[:6] ...


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 12:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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