鱼C论坛

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

[已解决]课后作业第29讲

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

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

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

x
问题:编写一个程序,比较用户输入的两个文件,如果不同,显示出所有不同处的行号与第一个不同字符的位置

最佳答案
2021-10-9 22:08:35
本帖最后由 大马强 于 2021-10-9 22:15 编辑
  1. def find_out(f1, f2):

  2.     count = 0  # 接收两个文件行数最小的一个
  3.     ff1 = list(f1)
  4.     ff2 = list(f2)
  5.     len_ = len(ff1)
  6.     if len(ff2) < len(ff1):
  7.         len_ = len(ff2)

  8.     for i in range(len_):
  9.         if ff1[i] != ff2[i]:
  10.             count += 1
  11.             print('第 %d 行不一样' % i)
  12.     count += abs(len(ff1) - len(ff2))  # 加上两者差绝对值
  13.     f1.close()
  14.     f2.close()
  15.     # for each_line1 in f1:
  16.     #     for each_line2 in f2:

  17.     #         allcount += 1

  18.     #         if each_line1 == each_line2:
  19.     #             continue
  20.     #         else:
  21.     #             count += 1
  22.     #             print('第 %d 行不一样' % allcount)

  23.     print('两个文件中共有【%d】处不同' % count)


  24. file1 = input('请输入需要比较的第一个文件名字: ')
  25. f1 = open('./1.txt', encoding="utf-8")
  26. file2 = input('请输入需要比较的第一个文件名字: ')
  27. f2 = open('2.txt', encoding="utf-8")

  28. find_out(f1, f2)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-9 21:22:00 | 显示全部楼层
这是我写的代码,但是执行报错了,希望可以指点一下,万分感谢!!!!
allcount = 0
count = 0


def find_out(f1,f2):
    for each_line1 in f1:
        for each_line2 in f2:
            allcount += 1

            if each_line1 == each_line2 :
                continue
            else :
                count += 1
                print('第 %d 行不一样' % allcount)
               
               
    print('两个文件中共有【%d】处不同' % count)
    f1.close()
    f2.close()

file1 = input('请输入需要比较的第一个文件名字: ')
f1 = open('E:/py/小甲鱼课后作业/029/file1')
file2 = input('请输入需要比较的第一个文件名字: ')
f2 = open('E:/py/小甲鱼课后作业/029/file2')

find_out(f1,f2)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-9 22:07:22 | 显示全部楼层
我先说你代码可能会发生的问题
1、open()打开文件最好设置好encoding的参数,容易报错
2、在两个文件比较时,你用的是嵌套循环是有问题的,因为f1的每一行都会遍历f2的每一行
我的想法(open参数不说了)
1、先将其列表化,用一个变量的值去遍历两个列表去找到它们不相等的行数
2、假设f1和f2并不相等(尤其是行数),那就遍历完函数少的那个文件就好了,先找到它们不等的行数,然后加上它们差
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-9 22:08:35 | 显示全部楼层    本楼为最佳答案   
本帖最后由 大马强 于 2021-10-9 22:15 编辑
  1. def find_out(f1, f2):

  2.     count = 0  # 接收两个文件行数最小的一个
  3.     ff1 = list(f1)
  4.     ff2 = list(f2)
  5.     len_ = len(ff1)
  6.     if len(ff2) < len(ff1):
  7.         len_ = len(ff2)

  8.     for i in range(len_):
  9.         if ff1[i] != ff2[i]:
  10.             count += 1
  11.             print('第 %d 行不一样' % i)
  12.     count += abs(len(ff1) - len(ff2))  # 加上两者差绝对值
  13.     f1.close()
  14.     f2.close()
  15.     # for each_line1 in f1:
  16.     #     for each_line2 in f2:

  17.     #         allcount += 1

  18.     #         if each_line1 == each_line2:
  19.     #             continue
  20.     #         else:
  21.     #             count += 1
  22.     #             print('第 %d 行不一样' % allcount)

  23.     print('两个文件中共有【%d】处不同' % count)


  24. file1 = input('请输入需要比较的第一个文件名字: ')
  25. f1 = open('./1.txt', encoding="utf-8")
  26. file2 = input('请输入需要比较的第一个文件名字: ')
  27. f2 = open('2.txt', encoding="utf-8")

  28. find_out(f1, f2)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 18:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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