鱼C论坛

 找回密码
 立即注册
查看: 890|回复: 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’文件夹里
import os

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

count = 1
mans = []
spokens = []

for each_line in text:
    if each_line[:6] != '======':
        man,spoken = each_line.split(':',1)
        if man not in mans:
            mans.append(man)
            spokens.append([spoken])
        else:
            spokens[mans.index(man)].append(spoken)
    else:
        for i in range(len(mans)):
            exec('man%d_file_name = %s_%d.txt' %(i,mans[i],count))
            exec('man%d_file = open(man%d_file_name,%s)' %(i,i,'w'))
            exec('man%d_file.writelines(spokens[mans.index(man)])' %i)
            exec('man%d_file.close()' %i)

        mans = []
        spokens = []
        count += 1
        
for i in range(len(mans)):
    exec('man%d_file_name = %s_%d.txt' %(i,mans[i],count))
    exec('man%d_file = open(man%d_file_name,%s)' %(i,i,'w'))
    exec('man%d_file.writelines(spokens[mans.index(man)])' %i)
    exec('man%d_file.close()' %i)
最佳答案
2020-6-7 23:22:31
思路应该没什么问题 不过emmm
exec('man%d_file_name = %s_%d.txt' %(i,mans[i],count))
            exec('man%d_file = open(man%d_file_name,%s)' %(i,i,'w'))
            exec('man%d_file.writelines(spokens[mans.index(man)])' %i)
            exec('man%d_file.close()' %i)
这几句可以这样用吗?没学过这种用法,感觉有语法错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

我试过下面的代码,运用exec()和格式化能够成功完成var1 = 1的变量赋值,就按照这思路进行了操作。
jak = 1
exec('var%s = %d' %(jak, jak))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你有没有想过,你给他赋值的类型是int还是str类型,能不能实现,如果只是试验一次是不够的,代码是需要多次调试的吧,就说一下这一条
exec('man%d_file_name = %s_%d.txt' %(i,mans[i],count))
肯定是会报错的,因为无法识别是什么类型的赋值,可以这么改
exec(' man%d_file_name = "%s_%d.txt" ' %(i,mans[i],count)) #在里面加一个括号表示"%s_%d.txt"是str类型,这样才可以执行
看上去你的代码应该没什么大问题,可以善用vs code的分步调试,看看哪一步出错,改起来比较容易
还有你打开文件记得close一下,比如你的text = open('record.txt')文件就没看到有关闭
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢提醒,我分部测试下看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 20:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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