|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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("不改变原文件")
复制代码
|
|