今天的我更强了 发表于 2020-6-6 23:09:02

第八章课后作业

def update(part,new_word):
    new_line = part
    for each_part in part:
      new_line += new_word
      new_line += each_part
    return new_line

file_name = input('请输入文件名:')
old_word = input('请输入需要替换的单词或字符:')
new_word = input('请输入新的单词或字符:')

f = open(file_name,'r')

list1 = []
number = 0
for each_line in f:
    list1.append(each_line)
    number += each_line.count(old_word)
print('文件%s中共有%d个【%s】'%(file_name,number,old_word))

f.close()

print('您确定要把所有的【%s】替换为【%s】吗?'%(old_word,new_word))
YN = input('【YES/NO】:')
if YN == 'YES' or YN == 'yes':
    f = open(file_name,'w')
    for each_line in list1:
      if old_word in each_line:
            new_line = update(each_line.split(old_word),new_word = new_word)
            line_index = list1.index(each_line)
            list1.remove(each_line)
            list1.insert(line_index,new_line)
f.writelines(list1)
f.close()
    这是标准答案,
for each_line in list1:
      if old_word in each_line:
            new_line = update(each_line.split(old_word),new_word = new_word)
            line_index = list1.index(each_line)
            list1.remove(each_line)
            list1.insert(line_index,new_line)
这个地方,如果文件中有两行相同的内容,在执行 list1.remove(each_line)这一步的时候不会全部删除吗? 全部删除的话不会影响结果么?

今天的我更强了 发表于 2020-6-6 23:42:42

{:10_269:}

Twilight6 发表于 2020-6-7 00:08:24

本帖最后由 Twilight6 于 2020-6-7 00:16 编辑

在执行 list1.remove(each_line)这一步的时候不会全部删除吗? 全部删除的话不会影响结果么?
不会全部删除 只删除了遍历到的那一段,然后list1.insert(line_index,new_line) 又将字符串替换好的加入了列表中去

就相当于达到了替换的效果,实际上是先删除列表中对应位置的字符串,然后再在之前删去元素的位置重新插入被替换部分字符的字符串
页: [1]
查看完整版本: 第八章课后作业