鱼C论坛

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

[已解决]python课后习题求助

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

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

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

x
编写一个程序,实现“全部替换”功能。
#全部替换
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?

count最后结果为啥是7

count最后结果为啥是7

最佳答案
2020-6-7 18:30:09
本帖最后由 _荟桐_ 于 2020-6-7 18:35 编辑

改成:
  1.     for eachline in f:
  2.         if old in eachline:
  3.            a =eachline.count(old)
  4.            list.append(a)
  5.            print(list)
  6.            eachline=eachline.replace(old,new)
  7.     for each in list:
  8.         count+=each
  9.         print(count)
  10.     print('count:%d'%count)
  11.     content.append(eachline)
复制代码

第一次for和第二次for循环的count变量重名了
第一次for循环之后count等于2
然后在第二次for循环里count又加3,加2
所以最后就是7
而且变量名不要用list
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-7 18:30:09 | 显示全部楼层    本楼为最佳答案   
本帖最后由 _荟桐_ 于 2020-6-7 18:35 编辑

改成:
  1.     for eachline in f:
  2.         if old in eachline:
  3.            a =eachline.count(old)
  4.            list.append(a)
  5.            print(list)
  6.            eachline=eachline.replace(old,new)
  7.     for each in list:
  8.         count+=each
  9.         print(count)
  10.     print('count:%d'%count)
  11.     content.append(eachline)
复制代码

第一次for和第二次for循环的count变量重名了
第一次for循环之后count等于2
然后在第二次for循环里count又加3,加2
所以最后就是7
而且变量名不要用list
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-7 18:30:25 | 显示全部楼层
  1. for eachline in f:
  2.         if old in eachline:
  3.            count=eachline.count(old)   #这里你改变了count的值也就是说,在最后一个循环count=2了
  4.            list.append(count)
  5.            print(list)
  6.            eachline=eachline.replace(old,new)
  7.     for each in list:
  8.         count+=each
  9.         print(count)
  10.     print('count:%d'%count)
  11.     content.append(eachline)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-6-7 18:40:56 | 显示全部楼层
本帖最后由 Twilight6 于 2020-6-7 18:49 编辑

  1. for each in list:
  2.         count+=each
  3.         print(count)
  4.     print('count:%d'%count)
复制代码

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

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

  1. res=input(print('文件%s有%d处%s,确定全部替换为%s么? yes or no ?'%(file_name,count,old,new)))
复制代码

这里因为print 没有返回值,所以会返回一个None ,你可用把 print 去掉

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

  6.     for eachline in f:
  7.         if old in eachline:
  8.            count+=eachline.count(old)
  9.            eachline=eachline.replace(old,new)
  10.            content.append(eachline)

  11.     if count>0:
  12.         res=input('文件%s有%d处%s,确定全部替换为%s么? yes or no ?'%(file_name,count,old,new))
  13.         if res in ['YES', 'Yes', 'yes']:
  14.             f_write=open(file_name,'w')
  15.             f_write.writelines(content)
  16.             f_write.close()
  17.             print('替换成功,请检测文件内容噢')
  18.     else:
  19.         print('文件中无此单词,无效替换')
  20.     f.close()
  21. file_name = input('请输入文件名:')
  22. old = input('请输入需要替换的单词或字符:')
  23. new = input('请输入新的单词或字符:')
  24. file_replace(file_name, old, new)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-21 10:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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