鱼C论坛

 找回密码
 立即注册
查看: 876|回复: 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 编辑

改成:
    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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 20:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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