鱼C论坛

 找回密码
 立即注册
查看: 990|回复: 4

[已解决]求助《零基础入门学习Python》31讲课后习题里动动手那一题

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

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

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

x
题目要求把‘“record.txt”的文件里的文本按照不同人分为boy_X.txt和girl_X.txt,但是答案的写法是已经知道只有“小甲鱼”和“小客服”两个人。
我想在这基础上,改成自动识别所有说话的人,并按照人的名字生成以人名开头的文件名,但我把下面代码运行后vs code没有告诉我哪里语句错了,就给了“NameError: name '小客服_1' is not defined”。
请大神帮忙看下我哪里错了
我的record.txt放在‘E:\a’文件夹里

  1. import os

  2. path = r'E:\a'
  3. os.chdir(path)
  4. text = open('record.txt')

  5. count = 1
  6. mans = []
  7. spokens = []

  8. for each_line in text:
  9.     if each_line[:6] != '======':
  10.         man,spoken = each_line.split(':',1)
  11.         if man not in mans:
  12.             mans.append(man)
  13.             spokens.append([spoken])
  14.         else:
  15.             spokens[mans.index(man)].append(spoken)
  16.     else:
  17.         for i in range(len(mans)):
  18.             exec('man%d_file_name = %s_%d.txt' %(i,mans[i],count))
  19.             exec('man%d_file = open(man%d_file_name,%s)' %(i,i,'w'))
  20.             exec('man%d_file.writelines(spokens[mans.index(man)])' %i)
  21.             exec('man%d_file.close()' %i)

  22.         mans = []
  23.         spokens = []
  24.         count += 1
  25.         
  26. for i in range(len(mans)):
  27.     exec('man%d_file_name = %s_%d.txt' %(i,mans[i],count))
  28.     exec('man%d_file = open(man%d_file_name,%s)' %(i,i,'w'))
  29.     exec('man%d_file.writelines(spokens[mans.index(man)])' %i)
  30.     exec('man%d_file.close()' %i)
复制代码
最佳答案
2020-6-7 23:22:31
思路应该没什么问题 不过emmm
  1. exec('man%d_file_name = %s_%d.txt' %(i,mans[i],count))
  2.             exec('man%d_file = open(man%d_file_name,%s)' %(i,i,'w'))
  3.             exec('man%d_file.writelines(spokens[mans.index(man)])' %i)
  4.             exec('man%d_file.close()' %i)
复制代码
这几句可以这样用吗?没学过这种用法,感觉有语法错误
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-7 23:22:31 | 显示全部楼层    本楼为最佳答案   
思路应该没什么问题 不过emmm
  1. exec('man%d_file_name = %s_%d.txt' %(i,mans[i],count))
  2.             exec('man%d_file = open(man%d_file_name,%s)' %(i,i,'w'))
  3.             exec('man%d_file.writelines(spokens[mans.index(man)])' %i)
  4.             exec('man%d_file.close()' %i)
复制代码
这几句可以这样用吗?没学过这种用法,感觉有语法错误
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-8 11:04:45 | 显示全部楼层
沐羽尘 发表于 2020-6-7 23:22
思路应该没什么问题 不过emmm这几句可以这样用吗?没学过这种用法,感觉有语法错误

我试过下面的代码,运用exec()和格式化能够成功完成var1 = 1的变量赋值,就按照这思路进行了操作。
  1. jak = 1
  2. exec('var%s = %d' %(jak, jak))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-8 11:44:56 | 显示全部楼层
Nmbh 发表于 2020-6-8 11:04
我试过下面的代码,运用exec()和格式化能够成功完成var1 = 1的变量赋值,就按照这思路进行了操作。

你有没有想过,你给他赋值的类型是int还是str类型,能不能实现,如果只是试验一次是不够的,代码是需要多次调试的吧,就说一下这一条
  1. exec('man%d_file_name = %s_%d.txt' %(i,mans[i],count))
复制代码
肯定是会报错的,因为无法识别是什么类型的赋值,可以这么改
  1. exec(' man%d_file_name = "%s_%d.txt" ' %(i,mans[i],count)) #在里面加一个括号表示"%s_%d.txt"是str类型,这样才可以执行
复制代码

看上去你的代码应该没什么大问题,可以善用vs code的分步调试,看看哪一步出错,改起来比较容易
还有你打开文件记得close一下,比如你的text = open('record.txt')文件就没看到有关闭
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-8 12:21:07 | 显示全部楼层
沐羽尘 发表于 2020-6-8 11:44
你有没有想过,你给他赋值的类型是int还是str类型,能不能实现,如果只是试验一次是不够的,代码是需要多 ...

谢谢提醒,我分部测试下看看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-19 23:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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