zhu_lizhang 发表于 2020-11-22 10:12:55

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

程序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(":")
      
      iftxt=="小甲鱼":
            boy.append(txt)
            
            
      
      elif txt=="小客服":
            girl.append(txt)
            
            
    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(":")
      
      iftxt=="小甲鱼":
            boy.append(txt)
            
            
      
      elif txt=="小客服":
            girl.append(txt)
            
            
    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 10:20:35

当然会差很多
python严格要求缩进
缩进的不同会直接影响到执行顺序、循环次数、判断先后等
所以还是不要乱改缩进了

zhu_lizhang 发表于 2020-11-22 11:27:47

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


道理明白,但是我怎么看两个程序应该结果是一样的,但是运行起来就不是,不明白啊

昨非 发表于 2020-11-22 11:55:24

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

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

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


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

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

观察代码不难发现,在for循环内
if判断遇到‘===’后,分割隔断内容,将各自对话去除角色添加在各自的列表里
else则是对应 将各自列表里的东西写入各自文件,写完后清空列表,等待下次循环时新建一对txt文件,重新读取对话,存入列表,并写入
也就是意味着,列表的清空必须紧跟写入
       boy_file.writelines(boy)
      girl_file.writelines(girl)
假设你放在外面(与else缩进平齐),也就意味着,每执行一次循环都会清空一次
如果这次循环中,没有执行else,而只是执行了if,,刚刚append进去的内容,不等写入文件,就都没了

这好吗?这不好!

zhu_lizhang 发表于 2020-11-22 13:40:11

昨非 发表于 2020-11-22 11:55
注意以下两种情况的比较:




今天脑子断路了 想了好一会没想出来。。。。唉。。。。大哥你现在学到那个阶段了?

昨非 发表于 2020-11-22 13:43:41

zhu_lizhang 发表于 2020-11-22 13:40
今天脑子断路了 想了好一会没想出来。。。。唉。。。。大哥你现在学到那个阶段了?

半吊子阶段

zhu_lizhang 发表于 2020-11-22 14:18:15

昨非 发表于 2020-11-22 13:43
半吊子阶段

我现在卡在第30课,最后一题上,感觉脑子开始罢工了。。。。不想看题目想题目了

昨非 发表于 2020-11-22 14:26:09

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

能坚持还是坚持一下吧,不理解的可以来问
大家都是一脸蒙蔽过来的{:10_277:}
页: [1]
查看完整版本: 差一个缩进,结果怎么会差这么多,不能理解为什么!求分析!