鱼C论坛

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

[已解决]求问这是怎么回事?

[复制链接]
发表于 2017-10-25 21:59:07 | 显示全部楼层 |阅读模式

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

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

x
  1. #------显示出两个文件不同处的行号------#

  2.                

  3. i= 1
  4. sum = 0
  5. file_name1 = input('请输入需要比较的头一个文件名:')
  6. file_name2 = input('请输入需要比较的另一个文件名:')
  7. f1 = open(file_name1)
  8. f2 = open(file_name2)
  9. while 1:
  10.     if f1.readline() != '' and f2.readline() != '':
  11.         if f1.readline() != f2.readline():
  12.             print('第%d行不一样'%i)
  13.             sum += 1
  14.         
  15.         i += 1
  16.      
  17.     else:
  18.         break

  19. print('两个文件共有【%d】处不同:'%sum)
复制代码


运行程序结果是:第2行不一样
两个文件共有【1】处不同:

但是我的两个文本内容分别是:


求问各位大佬哪里出错了?
最佳答案
2017-10-25 23:18:18
本帖最后由 Amazon 于 2017-10-25 23:19 编辑

楼主你的代码里,一个循环读了两行。

  1. while 1:
  2.     if f1.readline() != '' and f2.readline() != '':
  3.         if f1.readline() != f2.readline():
  4.             print('第%d行不一样' % i)
  5.             sum += 1

  6.         i += 1
复制代码


①按照你的代码,第一个循环:
    if f1第一行 != '' and f2第一行 != '':
        if f1第二行 != f2第二行:
            print('第%d行不一样' % i)  #{实际你的两个文件前两行是相同的,这里不会 print}
            sum += 1 #{实际你的两个文件前两行是相同的,这里 sum 不会加 1}

        i += 1 {i 加 1 变为 2 }

②按照你的代码,第二个循环:
    if f1第三行 != '' and f2第三行 != '':
        if f1第四行 != f2第四行:
            print('第%d行不一样' % i)  #{实际你的两个文件第 4 行是不同的,这里会 print“第2行不一样”,因为上一个循环结束后 i 为 2 }
            sum += 1 #{实际你的两个文件第 4 行是不同的,这里 sum 会加 1,变为 1}

        i += 1 {i 加 1 变为 3 }

③按照你的代码,第三个循环:
    if f1第五行 != '' and f2第五行 != '':
        if f1第六行 != f2第六行: #{实际你的两个文件只有五行,到这里循环就结束了}

没有第四个循环了。

所以,最终结果是,sum = 1

运行程序结果是:
                第2行不一样
                两个文件共有【1】处不同



TIM截图20171025215737.png
TIM截图20171025215805.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-10-25 22:07:55 | 显示全部楼层
  1. i= 1
  2. sum = 0
  3. file_name1 = input('请输入需要比较的头一个文件名:')
  4. file_name2 = input('请输入需要比较的另一个文件名:')
  5. f1 = open(file_name1)
  6. f2 = open(file_name2)
  7. while 1:
  8.     a=f1.readline()
  9.     b=f2.readline()
  10.     if a != '' and b != '':
  11.         if a != b:
  12.             print('第%d行不一样'%i)
  13.             sum += 1
  14.         
  15.         i += 1
  16.      
  17.     else:
  18.         break

  19. print('两个文件共有【%d】处不同:'%sum)
复制代码

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

使用道具 举报

发表于 2017-10-25 23:11:54 | 显示全部楼层
本帖最后由 前路 于 2017-10-25 23:22 编辑
  1. #------显示出两个文件不同处的行号------#
  2. i = 1
  3. sum = 0
  4. file_name1 = input('请输入需要比较的头一个文件名:')
  5. file_name2 = input('请输入需要比较的另一个文件名:')
  6. f1 = open(file_name1)
  7. f2 = open(file_name2)
  8. while 1:
  9.     a=f1.readline()
  10.     b=f2.readline()
  11.     if a != '' and b != '':
  12.         if a != b:
  13.             print('第%d行不一样'%i)
  14.             sum += 1
  15.         
  16.         i += 1
  17.      
  18.     else:
  19.         break

  20. print('两个文件共有【%d】处不同:'%sum)
复制代码

注意  :
        while 1:
                    a=f1.readline()
                    b=f2.readline()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-25 23:18:18 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Amazon 于 2017-10-25 23:19 编辑

楼主你的代码里,一个循环读了两行。

  1. while 1:
  2.     if f1.readline() != '' and f2.readline() != '':
  3.         if f1.readline() != f2.readline():
  4.             print('第%d行不一样' % i)
  5.             sum += 1

  6.         i += 1
复制代码


①按照你的代码,第一个循环:
    if f1第一行 != '' and f2第一行 != '':
        if f1第二行 != f2第二行:
            print('第%d行不一样' % i)  #{实际你的两个文件前两行是相同的,这里不会 print}
            sum += 1 #{实际你的两个文件前两行是相同的,这里 sum 不会加 1}

        i += 1 {i 加 1 变为 2 }

②按照你的代码,第二个循环:
    if f1第三行 != '' and f2第三行 != '':
        if f1第四行 != f2第四行:
            print('第%d行不一样' % i)  #{实际你的两个文件第 4 行是不同的,这里会 print“第2行不一样”,因为上一个循环结束后 i 为 2 }
            sum += 1 #{实际你的两个文件第 4 行是不同的,这里 sum 会加 1,变为 1}

        i += 1 {i 加 1 变为 3 }

③按照你的代码,第三个循环:
    if f1第五行 != '' and f2第五行 != '':
        if f1第六行 != f2第六行: #{实际你的两个文件只有五行,到这里循环就结束了}

没有第四个循环了。

所以,最终结果是,sum = 1

运行程序结果是:
                第2行不一样
                两个文件共有【1】处不同



小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-10-25 23:28:47 | 显示全部楼层
前路 发表于 2017-10-25 23:11
注意  :
        while 1:
                    a=f1.readline()

这是将f1.readline和f2.readline给初始化,避免出现依次执行的结果,从而导致隔行读取和比较.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-26 08:00:41 | 显示全部楼层
Amazon 发表于 2017-10-25 23:18
楼主你的代码里,一个循环读了两行。

谢谢~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-26 10:51:33 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-26 11:43:58 | 显示全部楼层
前路 发表于 2017-10-25 23:28
这是将f1.readline和f2.readline给初始化,避免出现依次执行的结果,从而导致隔行读取和比较.

谢谢谢谢~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-3 09:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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