马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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个字符开始不一样')
结果图如下:
请问我这样理解正确吗??
本帖最后由 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个字符开始不一样')
|