W1ND123 发表于 2021-10-9 21:21:25

课后作业第29讲

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

W1ND123 发表于 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)

大马强 发表于 2021-10-9 22:07:22

我先说你代码可能会发生的问题
1、open()打开文件最好设置好encoding的参数,容易报错
2、在两个文件比较时,你用的是嵌套循环是有问题的,因为f1的每一行都会遍历f2的每一行
我的想法(open参数不说了)
1、先将其列表化,用一个变量的值去遍历两个列表去找到它们不相等的行数
2、假设f1和f2并不相等(尤其是行数),那就遍历完函数少的那个文件就好了,先找到它们不等的行数,然后加上它们差

大马强 发表于 2021-10-9 22:08:35

本帖最后由 大马强 于 2021-10-9 22:15 编辑

def find_out(f1, f2):

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

    for i in range(len_):
      if ff1 != ff2:
            count += 1
            print('第 %d 行不一样' % i)
    count += abs(len(ff1) - len(ff2))# 加上两者差绝对值
    f1.close()
    f2.close()
    # 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)


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

find_out(f1, f2)
页: [1]
查看完整版本: 课后作业第29讲