python 第29课动动手第4题求助!
小甲鱼老师的程序里运用了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个。不懂求解答! 你的代码问题:UnboundLocalError: local variable 'f' referenced before assignment 首先解决数目不对的问题,每次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("不改变原文件") txxcat 发表于 2021-11-23 11:39
首先解决数目不对的问题,每次read(1)一次,指针就会往下移一个,你每次判断read(1)是否位空的时候,指 ...
太感谢大神了,我应该就是指针问题没注意到,然后可写文件不可读这个我也压根没想到。多谢指正!
页:
[1]