鱼C论坛

 找回密码
 立即注册
查看: 1307|回复: 7

[已解决]差一个缩进,结果怎么会差这么多,不能理解为什么!求分析!

[复制链接]
发表于 2020-11-22 10:12:55 | 显示全部楼层 |阅读模式

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

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

x
程序1:
fff=open("E:\\python\\课件资料\\record.txt","rt")
num=1
boy=[]
girl=[]
for each in fff :
    boy_file_name="boy_"+str(num)+".txt"
    girl_file_name="girl_"+str(num)+".txt"
    if each[:3] !="===":
        txt=each.split(":")
        
        if  txt[0]=="小甲鱼":
            boy.append(txt[1])
            
            
        
        elif txt[0]=="小客服":
            girl.append(txt[1])
            
            
    else:
        boy_file=open("E:\\python\\课件资料\\"+boy_file_name,"at")
        girl_file=open("E:\\python\\课件资料\\"+girl_file_name,"at")
        boy_file.writelines(boy)
        girl_file.writelines(girl)
    boy=[]
    girl=[]
    num+=1
boy_file=open("E:\\python\\课件资料\\"+boy_file_name,"at")
girl_file=open("E:\\python\\课件资料\\"+girl_file_name,"at")
boy_file.writelines(boy)
girl_file.writelines(girl)
fff.close()
boy_file.close()
girl_file.close()

程序2:
fff=open("E:\\python\\课件资料\\record.txt","rt")
num=1
boy=[]
girl=[]
for each in fff :
    boy_file_name="boy_"+str(num)+".txt"
    girl_file_name="girl_"+str(num)+".txt"
    if each[:3] !="===":
        txt=each.split(":")
        
        if  txt[0]=="小甲鱼":
            boy.append(txt[1])
            
            
        
        elif txt[0]=="小客服":
            girl.append(txt[1])
            
            
    else:
        boy_file=open("E:\\python\\课件资料\\"+boy_file_name,"at")
        girl_file=open("E:\\python\\课件资料\\"+girl_file_name,"at")
        boy_file.writelines(boy)
        girl_file.writelines(girl)
        boy=[]
        girl=[]
        num+=1
boy_file=open("E:\\python\\课件资料\\"+boy_file_name,"at")
girl_file=open("E:\\python\\课件资料\\"+girl_file_name,"at")
boy_file.writelines(boy)
girl_file.writelines(girl)
fff.close()
boy_file.close()
girl_file.close()

最佳答案
2020-11-22 11:55:24
zhu_lizhang 发表于 2020-11-22 11:27
道理明白,但是我怎么看两个程序应该结果是一样的,但是运行起来就不是,不明白啊


注意以下两种情况的比较:

  1. else:
  2.     boy_file=open("E:\\python\\课件资料\"+boy_file_name,"at")
  3.     girl_file=open("E:\\python\\课件资料\"+girl_file_name,"at")
  4.     boy_file.writelines(boy)
  5.     girl_file.writelines(girl)
  6. boy=[]
  7. girl=[]
  8. num+=1


  9. else:
  10.     boy_file=open("E:\\python\\课件资料\"+boy_file_name,"at")
  11.     girl_file=open("E:\\python\\课件资料\"+girl_file_name,"at")
  12.     boy_file.writelines(boy)
  13.     girl_file.writelines(girl)
  14.     boy=[]
  15.     girl=[]
  16.     num+=1
复制代码


区别在于,列表清空是在else里还是在else外

观察代码不难发现,在for循环内
if判断遇到‘===’后,分割隔断内容,将各自对话去除角色添加在各自的列表里
else则是对应 将各自列表里的东西写入各自文件,写完后清空列表,等待下次循环时新建一对txt文件,重新读取对话,存入列表,并写入
也就是意味着,列表的清空必须紧跟写入
  1.        boy_file.writelines(boy)
  2.         girl_file.writelines(girl)
复制代码

假设你放在外面(与else缩进平齐),也就意味着,每执行一次循环都会清空一次
如果这次循环中,没有执行else,而只是执行了if,,刚刚append进去的内容,不等写入文件,就都没了

这好吗?这不好!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-22 10:20:35 | 显示全部楼层
当然会差很多
python严格要求缩进
缩进的不同会直接影响到执行顺序、循环次数、判断先后等
所以还是不要乱改缩进了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-22 11:27:47 | 显示全部楼层
昨非 发表于 2020-11-22 10:20
当然会差很多
python严格要求缩进
缩进的不同会直接影响到执行顺序、循环次数、判断先后等

道理明白,但是我怎么看两个程序应该结果是一样的,但是运行起来就不是,不明白啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-22 11:55:24 | 显示全部楼层    本楼为最佳答案   
zhu_lizhang 发表于 2020-11-22 11:27
道理明白,但是我怎么看两个程序应该结果是一样的,但是运行起来就不是,不明白啊


注意以下两种情况的比较:

  1. else:
  2.     boy_file=open("E:\\python\\课件资料\"+boy_file_name,"at")
  3.     girl_file=open("E:\\python\\课件资料\"+girl_file_name,"at")
  4.     boy_file.writelines(boy)
  5.     girl_file.writelines(girl)
  6. boy=[]
  7. girl=[]
  8. num+=1


  9. else:
  10.     boy_file=open("E:\\python\\课件资料\"+boy_file_name,"at")
  11.     girl_file=open("E:\\python\\课件资料\"+girl_file_name,"at")
  12.     boy_file.writelines(boy)
  13.     girl_file.writelines(girl)
  14.     boy=[]
  15.     girl=[]
  16.     num+=1
复制代码


区别在于,列表清空是在else里还是在else外

观察代码不难发现,在for循环内
if判断遇到‘===’后,分割隔断内容,将各自对话去除角色添加在各自的列表里
else则是对应 将各自列表里的东西写入各自文件,写完后清空列表,等待下次循环时新建一对txt文件,重新读取对话,存入列表,并写入
也就是意味着,列表的清空必须紧跟写入
  1.        boy_file.writelines(boy)
  2.         girl_file.writelines(girl)
复制代码

假设你放在外面(与else缩进平齐),也就意味着,每执行一次循环都会清空一次
如果这次循环中,没有执行else,而只是执行了if,,刚刚append进去的内容,不等写入文件,就都没了

这好吗?这不好!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-22 13:40:11 | 显示全部楼层
昨非 发表于 2020-11-22 11:55
注意以下两种情况的比较:

今天脑子断路了 想了好一会没想出来。。。。唉。。。。大哥你现在学到那个阶段了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-22 13:43:41 From FishC Mobile | 显示全部楼层
zhu_lizhang 发表于 2020-11-22 13:40
今天脑子断路了 想了好一会没想出来。。。。唉。。。。大哥你现在学到那个阶段了?

半吊子阶段
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-22 14:18:15 | 显示全部楼层

我现在卡在第30课,最后一题上,感觉脑子开始罢工了。。。。不想看题目想题目了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-22 14:26:09 | 显示全部楼层
zhu_lizhang 发表于 2020-11-22 14:18
我现在卡在第30课,最后一题上,感觉脑子开始罢工了。。。。不想看题目想题目了

能坚持还是坚持一下吧,不理解的可以来问
大家都是一脸蒙蔽过来的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 05:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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