| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
动动手: 
课后作业动动手: 
0. 编写一个程序,这次要求使用pickle将文件(record.txt)里的对话按照以下要求腌制成不同文件(没错,是第29讲的内容小改,考考你自己能写出来吗?): 
小甲鱼的对话单独保存为boy_*.txt的文件(去掉“小甲鱼:”) 
小客服的对话单独保存为girl_*.txt的文件(去掉“小客服:”) 
文件中总共有三段对话,分别保存为boy_1.txt, girl_1.txt,boy_2.txt, girl_2.txt, boy_3.txt, gril_3.txt共6个文件 
(提示:文件中不同的对话间已经使用“==========”分割) 
根据题目,自己写的代码如下: 
- import pickle
 
 - import os
 
 - def save_file(n):
 
 -     f2 = open('boy_' + str(n) + '.txt', 'wb')
 
 -     f3 = open('girl_' + str(n) + '.txt', 'wb')
 
 -     pickle.dump(boy, f2)
 
 -     pickle.dump(girl, f3)
 
 -     f2.close()
 
 -     f3.close()
 
 - def split_file(file_dir):
 
 -     os.chdir(file_dir)
 
 -     f1 = open(file_dir + 'record.txt')
 
 -     boy = []
 
 -     girl = []
 
 -     count = 0
 
 -     for each_line in f1:
 
 -         if each_line[:6] == '======':
 
 -             count += 1
 
 -             save_file(count)
 
 -             boy = []
 
 -             girl = []
 
 -         elif ':' in each_line:
 
 -             (sex, line) = each_line.split(':')
 
 -             if sex == '小甲鱼':
 
 -                 boy.append(line)
 
 -             elif sex == '小客服':
 
 -                 girl.append(line)
 
 -     count += 1
 
 -     save_file(count)
 
 -     f1.close()
 
 - file_dir = input('请输入需要腌制的文件目录:')
 
 - split_file(file_dir)
 
  复制代码 
结果出错了,出错信息如下: 
- 请输入需要腌制的文件目录:E:\\
 
 - ---------------------------------------------------------------------------
 
 - NameError                                 Traceback (most recent call last)
 
 - <ipython-input-46-73a63936ee74> in <module>()
 
 -      30     f1.close()
 
 -      31 file_dir = input('请输入需要腌制的文件目录:')
 
 - ---> 32 split_file(file_dir)
 
  
- <ipython-input-46-73a63936ee74> in split_file(file_dir)
 
 -      17         if each_line[:6] == '======':
 
 -      18             count += 1
 
 - ---> 19             save_file(count)
 
 -      20             boy = []
 
 -      21             girl = []
 
  
- <ipython-input-46-73a63936ee74> in save_file(n)
 
 -       4     f2 = open('boy_' + str(n) + '.txt', 'wb')
 
 -       5     f3 = open('girl_' + str(n) + '.txt', 'wb')
 
 - ----> 6     pickle.dump(boy, f2)
 
 -       7     pickle.dump(girl, f3)
 
 -       8     f2.close()
 
  
- NameError: name 'boy' is not defined
 
 
  复制代码 
错误提示是函数内的变量'boy'没有被定义,可是我引用了上一级函数的变量啊,下级函数不是直接可以引用上级函数变量的吗?
 本帖最后由 拉了盏灯 于 2018-9-11 05:38 编辑 
stone1005 发表于 2018-9-11 00:13 
是这样的,错误依旧  
我记错了,  nonlocal是嵌套函数里用来访问外层变量的值,,,,
 
可以用global boy 
来申明全局 
也可以在save_file多传入两个参数  
 
 
 |   
 
 
 
 |