旧版python课后作业:第29讲题目1 求助
本帖最后由 Ⅲ只小猪 于 2021-1-25 19:44 编辑file_name1 = input("请输入需要比较的头一个文件名:")
file_name2 = input("请输入需要比较的另一个文件名:") # 指定文件名
file1 = open(file_name1)
file2 = open(file_name2) # 打开文件
demo1 = list(file1.read()) # 将读取的内容存入列表
number1 = demo1.count('\n') + 1 # 计算分割次数
file1.seek(0,0) # 书签
demo1 = file1.read() # 二次读取
text1 = demo1.split('\n', number1) # 因为自动返回一个列表,所以不必新建列表了
demo2 = list(file2.read())
number2 = demo2.count('\n')
file2.seek(0,0)
demo2 = file2.read()
text2 = demo2.split('\n', number1)
if text1 != text2:
same = #两个列表中都存在
different = #两个列表中的不同元素
different_number = len(different) / 2
print('两个文件共有【{}】处不同', format(different_number))
'''if text1 != text2:
for diff1 in text1:
if diff1 in text2:
same =
for diff2 in (text1 + text2):
if diff2 not in same:
difference = '''
else:
pass
前两个要求都实现了,第三个要求也就是指出哪里不同的功能不知道怎么实现。
我的思路是把他们存进一个列表里,然后获取不同元素的下标,但是存进different之后并不是text1,text2的下标了,是要让different里的元素跟text里面的比较,然后获取下标吗?再打印出来。而且要怎么获取下标啊{:10_266:}
不知道怎么实现,求大佬解答{:9_234:} 本帖最后由 Twilight6 于 2021-1-25 19:55 编辑
你可以用 readlines() 来读取文件对象,或 先 read() 文件对象,然后 split() 切割换行符,就会返回一个以行为分割元素的列表
而你用的是 read() 文件对象然后 list 转为列表,那么就是将整个字符串的每一个字符变为一个元素
但是我们看看甲鱼哥发的题目截图,是显示行的不同,而不是你具体每行的字符元素索引下标,所以只需要查看每行是否相同,返回行编号即可
所以你只需要索引通过 readlines() 读取出来的下标 +1 就是所在行,当然也可以先 read 然后 split('\n') 切割换行符来转为列表
或者可以参考答案,我记得答案是用 for 循环 然后 readline 通过一个临时变量来记录行数的
Twilight6 发表于 2021-1-25 19:53
你可以用 readlines() 来读取文件对象,或 先 read() 文件对象,然后 split() 切割换行符,就会返回一个 ...
看来我得好好消化一下{:10_266:} 本帖最后由 jackz007 于 2021-1-25 20:52 编辑
file_name1 = input("请输入需要比较的头一个文件名:")
file_name2 = input("请输入需要比较的另一个文件名:")
# 下面的代码把 file_name1 、file_name2 的内容存入列表 text1、text2
fp = open(file_name1)
text1 = list(fp)
fp . close()
fp = open(file_name2)
text2 = list(fp)
fp . close()
d = 0 # 差别点计数器清零
for c in range(1 , len(text1) + 1): # 按 file_name1 的总行数循环,c 是从 1 开始的索引,对应于行号
s1 = text1 # 从 file_name1 中取出第 c 行文本存入 s1
s2 = text2 # 从 file_name2 中取出第 c 行文本存入 s2
for r in range(1 , len(s1) + 1) : # 按 s1 的字符数量安排循环
if s1 != s2: # 逐字符对比同一行、同一列
print('第 %d 行,%d 列不同' % (c , r)) # 如有不同,输出信息
d += 1 # 差别点计数器计数值加 1
break # 因为每行只需要找到第一个不同点,所以,结束本行比较
if d == 0 : # 所有的比较结束,检查差别点计数器,判断文件是否相同
print('两个文件完全相同。') 本帖最后由 Ⅲ只小猪 于 2021-1-25 20:19 编辑
jackz007 发表于 2021-1-25 20:01
多谢大佬!!
for循环那里勉强能看懂,只是反复看来加深印象有点不太好理解,可以加个注释或说明什么的吗?{:10_243:}{:10_266:} 我自己好好消化一下吧,自己加注释理解一下{:9_227:}
可惜不能设两个最佳答案,一个给了我启发,一个直接发示例{:10_266:} Ⅲ只小猪 发表于 2021-1-25 20:18
多谢大佬!!
for循环那里勉强能看懂,只是反复看来加深印象有点不太好理解,可以加个注释或说明什么 ...
我不是作者,但是貌似看懂了
1-9就是在把两个文件每一行的字符转换成 list
例如 file1 里面的内容是:
门前大桥下,
游过一群鸭。
就会变成 ['门前大桥下', '游过一群鸭。']
然后 12就是循环两个文件每一行,一行一行进行对比
13-14就是行号
15 就是循环这一行的每一个字符
16 就是行内的每一个字符在两个文件之间的比较,如:file1 第6行 第8列 和 file2 第6行 第8列进行比较
如果发现不同,输出
否则将行内的字符挨个循环
循环后,进入下一行
20-21
如果 d 不为 0, 即 different 不为 0,则表示两个文件没有不同
页:
[1]