鱼C论坛

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

[已解决]第29讲 动动手01题

[复制链接]
发表于 2020-7-5 01:12:49 | 显示全部楼层 |阅读模式

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

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

x
题目是:编写一个程序,比较用户输入的两个文件,如果不同,显示出所有不同处的行号与第一个不同字符的位置。
这里题目要求还要找出第一个不同字符的位置,所有我自己的程序如下:
file1 = input('请输入需要比较的头一个文件名:')
file2 = input('请输入需要比较的另一个文件名:')
count = 0
p=0
list3 =[]
list4 =[]
f1 = list(open(file1,'r',encoding='UTF-8'))
f2 = list(open(file2,'r',encoding='UTF-8'))
l1 = len(f1)
l2 = len(f2)
short = l1 if l1<=l2 else l2
long = l1 if l1>=l2 else l2
for i in range(0,short):
    if f1[i] != f2[i] :
        n = len(f1[i])
        for m in range(0,n):
            if f1[i][m] != f2[i][m]:
                list4.append(m+1)
                break
            else:
                continue
        count +=1
        list3.append(i+1)
    else:
        continue

print('两个文件共有【%d】处不同:'% (count+(long-short)))
for j in list3:
    print('第',j,'行不一样',' 第',list4[p],'个字符开始不一样')
    p+=1
for k in range(short+1,long+1):
    print('第',k,'行不一样',' 第1个字符开始不一样')

                               
登录/注册后可看大图

结果图如下:

                               
登录/注册后可看大图


请问我这样理解正确吗??
最佳答案
2020-7-5 08:11:33
本帖最后由 Twilight6 于 2020-7-5 08:12 编辑





对哈,能做出同样的效果就行,这里建议你代码可以少去的几个地方,去不去都不影响,只是代码美观些:

第一:open 默认打开方式就是 r 只读,所以你 open 里的 'r' 可以去掉哈

第二:
for m in range(0,n):
            if f1[i][m] != f2[i][m]:
                list4.append(m+1)
                break
           else:
                continue
代码里的 else:continue 可以去掉,因为当你循环条件不满足时候 for 循环会开始下一次循环,而且你continue 后没有需要运行的代码,所以你这里这个可以去掉哈~

更改 后的代码:
file1 = input('请输入需要比较的头一个文件名:')
file2 = input('请输入需要比较的另一个文件名:')
count = 0
p = 0
list3 = []
list4 = []
f1 = list(open(file1, encoding='UTF-8'))
f2 = list(open(file2, encoding='UTF-8'))
l1 = len(f1)
l2 = len(f2)
short = l1 if l1 <= l2 else l2
long = l1 if l1 >= l2 else l2
for i in range(0, short):
    if f1[i] != f2[i]:
        n = len(f1[i])
        for m in range(0, n):
            if f1[i][m] != f2[i][m]:
                list4.append(m + 1)
                break
        count += 1
        list3.append(i + 1)

print('两个文件共有【%d】处不同:' % (count + (long - short)))
for j in list3:
    print('第', j, '行不一样', ' 第', list4[p], '个字符开始不一样')
    p += 1
for k in range(short + 1, long + 1):
    print('第', k, '行不一样', ' 第1个字符开始不一样')



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-5 07:45:24 | 显示全部楼层
题意应该就是这个意思,也没说要打印那个字错了啥子的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-5 08:11:33 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-7-5 08:12 编辑





对哈,能做出同样的效果就行,这里建议你代码可以少去的几个地方,去不去都不影响,只是代码美观些:

第一:open 默认打开方式就是 r 只读,所以你 open 里的 'r' 可以去掉哈

第二:
for m in range(0,n):
            if f1[i][m] != f2[i][m]:
                list4.append(m+1)
                break
           else:
                continue
代码里的 else:continue 可以去掉,因为当你循环条件不满足时候 for 循环会开始下一次循环,而且你continue 后没有需要运行的代码,所以你这里这个可以去掉哈~

更改 后的代码:
file1 = input('请输入需要比较的头一个文件名:')
file2 = input('请输入需要比较的另一个文件名:')
count = 0
p = 0
list3 = []
list4 = []
f1 = list(open(file1, encoding='UTF-8'))
f2 = list(open(file2, encoding='UTF-8'))
l1 = len(f1)
l2 = len(f2)
short = l1 if l1 <= l2 else l2
long = l1 if l1 >= l2 else l2
for i in range(0, short):
    if f1[i] != f2[i]:
        n = len(f1[i])
        for m in range(0, n):
            if f1[i][m] != f2[i][m]:
                list4.append(m + 1)
                break
        count += 1
        list3.append(i + 1)

print('两个文件共有【%d】处不同:' % (count + (long - short)))
for j in list3:
    print('第', j, '行不一样', ' 第', list4[p], '个字符开始不一样')
    p += 1
for k in range(short + 1, long + 1):
    print('第', k, '行不一样', ' 第1个字符开始不一样')



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

使用道具 举报

 楼主| 发表于 2020-7-5 17:17:41 | 显示全部楼层
青出于蓝 发表于 2020-7-5 07:45
题意应该就是这个意思,也没说要打印那个字错了啥子的。

哈哈对啊,我就按题意写了,也不知道有没有写复杂想看看其他鱼友们的写法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 03:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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