鱼C论坛

 找回密码
 立即注册
查看: 2232|回复: 3

【重发】第29课作业有个比较文件的作业,请问我的代码有什么问题?

[复制链接]
发表于 2016-4-13 20:12:09 | 显示全部楼层 |阅读模式

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

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

x
刚才发了问题后手贱点了个已解决,请允许在发一次

这段代码总是得不到正确的结果,而下面小甲鱼老师的方法可行,为什么啊?

我的代码:
  1. def file_compare(file_name1, file_name2):
  2.         list1 = []
  3.         count = 0

  4.         fp1 = open(file_name1)
  5.         fp2 = open(file_name2)

  6.         while True:
  7.                 count += 1
  8.                 line1 = fp1.readline()
  9.                 line2 = fp2.readline()
  10.                 if line1 != line2:
  11.                         print(line1+ '+' +line2+ '+%d' %count)
  12.                         list1.append(count)
  13.                 elif (fp1.readline() == '') and (fp2.readline() == ''):
  14.                         break
  15.         
  16.         fp1.close()
  17.         fp2.close()
  18.         return list1
  19.                         
  20.                
  21. file_name1 = input('输入一个文件名:')
  22. file_name2 = input('输入另一个文件名:')

  23. list_out = file_compare(file_name1, file_name2)
  24. if len(list_out) == 0:
  25.         print('相同')
  26. else:
  27.         for each in list_out:
  28.                 print('第%d行不同' % each)
复制代码


小甲鱼老师方法:
  1. def file_compare(file_name1, file_name2):
  2.         list1 = []
  3.         count = 0

  4.         fp1 = open(file_name1)
  5.         fp2 = open(file_name2)

  6.         for line1 in fp1:
  7.                 line2 = fp2.readline()
  8.                 count += 1
  9.                 if line1 != line2:
  10.                         print(line1+ '+' +line2+ '+%d' %count)
  11.                         list1.append(count)
  12.        
  13.         fp1.close()
  14.         fp2.close()
  15.         return list1
  16.                        
  17.                
  18. file_name1 = input('输入一个文件名:')
  19. file_name2 = input('输入另一个文件名:')

  20. list_out = file_compare(file_name1, file_name2)
  21. if len(list_out) == 0:
  22.         print('相同')
  23. else:
  24.         for each in list_out:
  25.                 print('第%d行不同' % each)
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-4-13 21:53:26 | 显示全部楼层
你是用while循环代替了for循环,问题应该出在15行的elif判断上,如果文本文件的最后没有空行,就会出错。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-13 22:15:31 | 显示全部楼层
  1. def file_compare(file_name1, file_name2):
  2.         list1 = []
  3.         count = 0

  4.         fp1 = open(file_name1)
  5.         fp2 = open(file_name2)

  6.         while True:
  7.                 count += 1
  8.                 line1 = fp1.readline()
  9.                 line2 = fp2.readline()
  10.                 if line1 != line2:
  11.                         #print(line1+ '+' +line2+ '+%d' %count)
  12.                         list1.append(count)
  13.                # elif (fp1.readline() == '') and (fp2.readline() == ''):#虽然是判断,这里会执行一次readline()会读取一行,又根据短路逻辑,and前面为假的话,后面的不会执行,这样两个文件之后读取的行就错开了
  14.                 elif (line1 == '') and (line2== ''):
  15.                         break
  16.         
  17.         fp1.close()
  18.         fp2.close()
  19.         return list1
  20.                         
  21.                
  22. file_name1 = input('输入一个文件名:')
  23. file_name2 = input('输入另一个文件名:')

  24. list_out = file_compare(file_name1, file_name2)
  25. if len(list_out) == 0:
  26.         print('相同')
  27. else:
  28.         for each in list_out:
  29.                 print('第%d行不同' % each)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-4-13 22:53:58 | 显示全部楼层

非常感谢!最开始的时候我第一个if判断也是直接read的,以为那里出错了改成了line1和line2,没有注意到后面这里...
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-20 16:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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