xiaox12345 发表于 2020-6-7 18:21:01

python课后习题求助

编写一个程序,实现“全部替换”功能。
#全部替换
def file_replace(file_name,old,new):
    f=open(file_name)
    count=0 #计数
    content=[]
    list=[]

    for eachline in f:
      if old in eachline:
         count=eachline.count(old)
         list.append(count)
         print(list)
         eachline=eachline.replace(old,new)
    for each in list:
      count+=each
      print(count)
    print('count:%d'%count)
    content.append(eachline)

    if count>0:
      res=input(print('文件%s有%d处%s,确定全部替换为%s么? yes or no ?'%(file_name,count,old,new)))
      if res in ['YES', 'Yes', 'yes']:
            f_write=open(file_name,'w')
            f_write.writelines(content)
            f_write.close()
            print('替换成功,请检测文件内容噢')
    else:
      print('文件中无此单词,无效替换')
    f.close()
file_name = input('请输入文件名:')
old = input('请输入需要替换的单词或字符:')
new = input('请输入新的单词或字符:')
file_replace(file_name, old, new)



text文件内容:
hi hi hi
hi hi

问题:为啥count算出来是7?

_荟桐_ 发表于 2020-6-7 18:30:09

本帖最后由 _荟桐_ 于 2020-6-7 18:35 编辑

改成:
    for eachline in f:
      if old in eachline:
         a =eachline.count(old)
         list.append(a)
         print(list)
         eachline=eachline.replace(old,new)
    for each in list:
      count+=each
      print(count)
    print('count:%d'%count)
    content.append(eachline)
第一次for和第二次for循环的count变量重名了
第一次for循环之后count等于2
然后在第二次for循环里count又加3,加2
所以最后就是7
而且变量名不要用list

听风夜雨 发表于 2020-6-7 18:30:25

for eachline in f:
      if old in eachline:
         count=eachline.count(old)   #这里你改变了count的值也就是说,在最后一个循环count=2了
         list.append(count)
         print(list)
         eachline=eachline.replace(old,new)
    for each in list:
      count+=each
      print(count)
    print('count:%d'%count)
    content.append(eachline)

Twilight6 发表于 2020-6-7 18:40:56

本帖最后由 Twilight6 于 2020-6-7 18:49 编辑

for each in list:
      count+=each
      print(count)
    print('count:%d'%count)
这个for循环没意义,可以去掉,统计数量的用第一个for循环即可,也是因为这个循环导致你统计出错,还有就是count 每次循环应该 += 而不是 =

content.append(eachline) 写入文件要将替换后的文本加入列表,要写在循环里,你写到了循环外

res=input(print('文件%s有%d处%s,确定全部替换为%s么? yes or no ?'%(file_name,count,old,new)))
这里因为print 没有返回值,所以会返回一个None ,你可用把 print 去掉

完整代码:
#全部替换
def file_replace(file_name,old,new):
    f=open(file_name)
    count=0 #计数
    content=[]

    for eachline in f:
      if old in eachline:
         count+=eachline.count(old)
         eachline=eachline.replace(old,new)
         content.append(eachline)

    if count>0:
      res=input('文件%s有%d处%s,确定全部替换为%s么? yes or no ?'%(file_name,count,old,new))
      if res in ['YES', 'Yes', 'yes']:
            f_write=open(file_name,'w')
            f_write.writelines(content)
            f_write.close()
            print('替换成功,请检测文件内容噢')
    else:
      print('文件中无此单词,无效替换')
    f.close()
file_name = input('请输入文件名:')
old = input('请输入需要替换的单词或字符:')
new = input('请输入新的单词或字符:')
file_replace(file_name, old, new)
页: [1]
查看完整版本: python课后习题求助