| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
小甲鱼老师的程序里运用了count方法和replace方法。 
但是我当时做这道题的时候没有想到这两个简单的方法。 
只能用f.read(1) == 设定的字符 来计数。 
替换的话 我想用递归的方法不停地切割字符串并组合的方法。 
结果发现根本行不通。 请教大神们我这个代码到底有什么问题?? 
 
file_name = input("请输入文件名:") 
word = input("请输入需要替换的字符:") 
new_word = input("请输入新的字符:") 
count = 0 
f = open(file_name,encoding='UTF-8') 
while True: 
    if f.read(1) != '': 
        if f.read(1) == word: 
            count += 1 
        else: 
            continue 
    else: 
        break 
f.close() 
print("文件"+file_name+"中共有%d个"%count+word) 
answer = input("您确定要把所有的%s换成%s吗?YES or NO"%(word,new_word)) 
def change(): 
    if word in (f.read()): 
        (a,b) = (f.read()).split(word,1) 
        c = a+new_word+b 
        f = open(file_name,'w',encoding='UTF-8') 
        f.write(c) 
        change() 
    else: 
        return c 
if answer == "YES": 
    f = open(file_name,encoding='UTF-8') 
    change() 
    f.close() 
else: 
    print("不改变原文件") 
 
 
以下是报错: 
请输入文件名:E:\\something.txt 
请输入需要替换的字符:是 
请输入新的字符:不是 
文件E:\\something.txt中共有3个是 
您确定要把所有的是换成不是吗?YES or NOYES 
Traceback (most recent call last): 
  File "E:/python/练习/课后习题.py", line 28, in <module> 
    change() 
  File "E:/python/练习/课后习题.py", line 18, in change 
    if word in (f.read()): 
UnboundLocalError: local variable 'f' referenced before assignment 
 
其中求得共有几个“是”的时候 答案显然不是3个  但是我跑出来3个。不懂求解答!
    首先解决数目不对的问题,每次read(1)一次,指针就会往下移一个,你每次判断read(1)是否位空的时候,指针往下,你再read(1)来判断是否等于word时已经是下一个字符了,等于只有第偶数位的字符才能被判断,解决方法就是先赋值给变量,然后拿变量来进行判断。 
    第二个问题的错误提示,是你在自定义函数中修改了外部变量,把变量指定为全局变量就不会报错了,但是改完这个还有一堆的问题,看程序注释吧。
 - file_name = input("请输入文件名:")
 
 - word = input("请输入需要替换的字符:")
 
 - new_word = input("请输入新的字符:")
 
 - count = 0
 
 - f = open(file_name,encoding='UTF-8')
 
 - while True:
 
 -     a = f.read(1)                     #<---第一个错误修正处,包括下面两行
 
 -     if a != '':
 
 -         if a == word:
 
 -             count += 1
 
 -         else:
 
 -             continue
 
 -     else:
 
 -         break
 
 - f.close()
 
 - print("文件"+file_name+"中共有%d个"%count+word)
 
 - answer = input("您确定要把所有的%s换成%s吗?YES or NO"%(word,new_word))
 
  
- def change():
 
 -     global f                          #<---第二个错误修正处,把f加入全局变量就不会报这个错了
 
 -     f = open(file_name,encoding='UTF-8')      #<---不重新以read方式打开文件,递归调用的文件状态是w,不能读
 
 -     d = f.read()                      #<---犯了和第一个错误一样的问题,你需要研究一下文件指针问题了
 
 -     if word in d:
 
 -         (a,b) = d.split(word,1)
 
 -         c = a+new_word+b
 
 -         f = open(file_name,'w',encoding='UTF-8')
 
 -         f.write(c)
 
 -         change()
 
 -     else:
 
 -         return              #<--- 返回c没用呀,你递归中又没有用到,一定要返回c,把c也指定为全局变量,不然报错
 
  
- if answer == "YES":
 
 -     change()
 
 -     f.close()
 
 - else:
 
 -     print("不改变原文件")
 
  复制代码 
 
 
 |   
 
 
 
 |