鱼C论坛

 找回密码
 立即注册
查看: 836|回复: 15

零基础学习python的,学到第29讲一个任务时是绝望的

[复制链接]
发表于 2019-1-18 11:42:08 | 显示全部楼层 |阅读模式

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

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

x
我是零基础学的,之前都是一讲一讲听下来,感觉还是大部分给理解。到29号森森的感觉绝望啊!
每一条代码到底是什JB么意思啊!为什么小甲鱼一直说简单啊!
而且按他说的一个个写出来出现报错:
ValueError: not enough values to unpack (expected 2, got 1)
每个英文单词我都认识,为什么会expected 2? 冒号是2吗?检查过了都是英文的冒号啊?

有个帖子专门讲这个: https://fishc.com.cn/thread-69870-1-1.html

我自己的短文放出来有没有大侠看看是不是我短文错了还是代码错了。

可是都不适用啊!

有没负基础学习python的啊!

短文:
Alexander:whatever it takes.
Biology:somebody likes me.
Alexander:I missed you so much. Why you didn’t answer my phone, my WeChat messenger?…
Biology:I don’t want this anymore. Let it be.
====================================================================
Alexander:I still can’t forget you. I love you so muted.
Biology:When there’s sun goes up there’s moon goes down.
Alexander:I know all the sayings but it’s so hard to apply to myself.
Biology:Take care.
====================================================================
Alexander:Would you please answer my phone and/or WeChat?
Biology:It’s all gone. Please continue your life.
Alexander:Even no lover again. No friends anymore?
Biology:Friends. Can you?
Alexander:…………………

f = open('//Users//samhe//Desktop//Untitled.txt')

boy = []
girl = []
count = 1

for each_line in f:
        if each_line[:6]!='======':
                (role, line_spoken) = each_line.split(':', 1)
                if role == 'A':
                        boy.append(line_spoken)
                if role == 'B':
                        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()


PS:我用的mac。这个有关系吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-1-18 11:43:06 | 显示全部楼层
文档可能有空格或者结尾有换行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-18 11:47:11 | 显示全部楼层
本帖最后由 heidern0612 于 2019-1-18 12:10 编辑

你代码中两个角色名也不叫A和B啊。

名字写全了就对了,:

P.S错误提示:ValueError: not enough values to unpack (expected 2, got 1)     值错误,没有足够的值去解包(应该提供两个,只提供了一个)。

一般情况下这种错误,要么就是参数提供的不够;另外一种就是参数提供了,但是不符合,就像你之前统计那种。



  1. f = open('a.txt')

  2. boy = []
  3. girl = []
  4. count = 1

  5. for each_line in f:
  6.         if each_line[:6]!='======':
  7.                 (role, line_spoken) = each_line.split(':', 1)
  8.                 if role == 'Alexander':
  9.                         boy.append(line_spoken)
  10.                 if role == 'Biology':
  11.                         girl.append(line_spoken)
  12.         else:
  13.                 file_name_boy = 'boy_' + str(count) + '.txt'
  14.                 file_name_girl = 'girl_' + str(count) + '.txt'

  15.                 boy_file = open(file_name_boy, 'w')
  16.                 girl_file = open(file_name_girl, 'w')

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

  19.                 boy_file.close()
  20.                 girl_file.close()

  21.                 boy = []
  22.                 girl = []
  23.                 count += 1

  24. f.close()
复制代码



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

使用道具 举报

发表于 2019-1-18 13:45:54 | 显示全部楼层
@heidern0602的回复很对,他所说的是你的程序的一个错误,但是没有说出你的程序报错的原因。
程序的问题就在于你对split()函数的理解有偏差,该函数有两个参数,第一个参数是切片的依据(你的程序中是以:作为切片分割符号),第二个参数是切几次。
出现的这个错误很大一部分原因是在你的这个txt文件的末尾有空行。空行内容是符合你的if条件的(each_line[:6]!='======'),但是空行中没有‘:’字符,所以在用split()的时候报错。

你的程序以':'切片,所以role的值是'Alexander'或者'Biology',而不是'A' 或者 'B'

你的程序还有一个问题就是文件中的最后一段对话好像没有被写入文件吧。因为你将读取到的字符串写入文件是在读到‘======’之后进行的。最后一次读取到的对话,没有被写入文件。
简单的修改方式就是在for循环解释后写一个else段,将最后一次度的内容写入文件。
  1. else: #这个else是for...else...的后半部分,注意缩进
  2.     file_name_boy = 'boy_' + str(count) + '.txt'
  3.     file_name_girl = 'girl_' + str(count) + '.txt'

  4.     boy_file = open(file_name_boy, 'w')
  5.     girl_file = open(file_name_girl, 'w')

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

  8.     boy_file.close()
  9.     girl_file.close()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-18 14:53:33 | 显示全部楼层
heidern0612 发表于 2019-1-18 11:47
你代码中两个角色名也不叫A和B啊。

名字写全了就对了,:

对对,当时用的是A和B,后来报错以为名字字符串太短所以改了A和B开头的。
我把你的代码复制再建一个还是不行。

Traceback (most recent call last):
  File "/Users/samhe/Desktop/Sam/Python/split2.py", line 9, in <module>
    (role, line_spoken) = each_line.split(':', 1)
ValueError: not enough values to unpack (expected 2, got 1)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-18 14:56:21 | 显示全部楼层
sunrise085 发表于 2019-1-18 13:45
@heidern0602的回复很对,他所说的是你的程序的一个错误,但是没有说出你的程序报错的原因。
程序的问题就 ...

末尾没有空格,一个光标一个光标确认过了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-18 14:56:51 | 显示全部楼层
samhe10 发表于 2019-1-18 14:53
对对,当时用的是A和B,后来报错以为名字字符串太短所以改了A和B开头的。
我把你的代码复制再建一个还是 ...

? 我运行没毛病啊,图都贴上了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-18 15:06:10 | 显示全部楼层
heidern0612 发表于 2019-1-18 14:56
? 我运行没毛病啊,图都贴上了。

一共存储了几个文件?有boy3和gilr3文件吗?
Alexander:Would you please answer my phone and/or WeChat?
Biology:It’s all gone. Please continue your life.
Alexander:Even no lover again. No friends anymore?
Biology:Friends. Can you?
Alexander:…………………
这一段对被写进文件了么?
我没有运行程序,是看程序进行的回答。难道有哪一句看错了?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-18 15:10:12 | 显示全部楼层
sunrise085 发表于 2019-1-18 15:06
一共存储了几个文件?有boy3和gilr3文件吗?
Alexander:Would you please answer my phone and/or WeCha ...

没有boy3和girl3,因为你就两行“==”号,解决的办法老师在课程里说了。

对话写进去了,上面图上不是有吗?


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

使用道具 举报

发表于 2019-1-18 15:14:25 | 显示全部楼层
heidern0612 发表于 2019-1-18 15:10
没有boy3和girl3,因为你就两行“==”号,解决的办法老师在课程里说了。

对话写进去了,上面图上不是 ...

抱歉,大神。刚刚看错消息了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-18 15:20:49 | 显示全部楼层
本帖最后由 sunrise085 于 2019-1-18 15:23 编辑
samhe10 发表于 2019-1-18 14:56
末尾没有空格,一个光标一个光标确认过了。


这个错误的确是split()函数导致的。
看一下下面的小例子:
  1. str1='wahaha:How old are you?'
  2. str2='nihao!'
  3. (name1,words1)=str1.split(':',1)
  4. print(name1)
  5. print(words1)
  6. (name2,words2)=str2.split(':',1)
  7. print(name2)
  8. print(words2)
复制代码

结果:
  1. wahaha
  2. How old are you?
  3. Traceback (most recent call last):
  4.   File "/tmp/288353047/main.py", line 7, in
  5.     (name2,words2)=str2.split(':',1)
  6. ValueError: not enough values to unpack (expected 2, got 1)

  7. exit status 1
复制代码

这个就是因为在str2中没有找到切片的字符':',所以报错了。你的程序报这个错误,应该也是这个原因。你检测一下你的元txt文件是否存在写错':'的问题,中英文字符问题,或者文件末尾有没有空行。若没有这两个问题的话,你可以在程序中if模块中先print(each_line)看看每一行的内容,看看到哪一行出错。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-18 15:25:59 | 显示全部楼层
这道题就这样,容易出现这个解包错误。

一般都是以下两个错误:

1、文件内有空格或换行符导致解包错误;

2、文件内split的冒号和代码中的冒号不一致导致错误;


你要是实在检查不出来,把自己的txt上传上来让人分析下。

或者干脆就放着,等以后学深了学好了有机会了再回来处理。

这个机制懂了就行。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-18 15:26:36 | 显示全部楼层
sunrise085 发表于 2019-1-18 15:14
抱歉,大神。刚刚看错消息了。

啊,不是你提问的,我以为是你提问的,抱歉抱歉。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-18 15:47:53 | 显示全部楼层
heidern0612 发表于 2019-1-18 15:25
这道题就这样,容易出现这个解包错误。

一般都是以下两个错误:

我逛了好像都是说这两个问题。
没找到哪里能上传附件啊?只能上传链接
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-18 15:49:00 | 显示全部楼层
heidern0612 发表于 2019-1-18 14:56
? 我运行没毛病啊,图都贴上了。

是的,不知怎么回事。我一个个对了你的代码。都一样了还是不行。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-18 15:56:48 | 显示全部楼层
samhe10 发表于 2019-1-18 15:47
我逛了好像都是说这两个问题。
没找到哪里能上传附件啊?只能上传链接

你级别不够,不能上传图和附件。

代码都一样没问题的话,有问题的就只能是你的文件了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-13 11:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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