鱼C论坛

 找回密码
 立即注册
查看: 2400|回复: 8

[已解决]第29课:题目 4,“全部替换”功能

[复制链接]
发表于 2021-1-22 16:00:15 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Peteryo01223 于 2021-1-22 16:18 编辑

原题目:编写一个程序,实现“全部替换”功能
代码:看了标准答案后,我自己的尝试和注释如下。报错了~
  1. def function1(file_name, old, new): # 根据题目要求,函数中包含三个变量
  2.     f1 = open(file_name, encoding = utf-8) # 打开文件,目前不需要书写覆盖,因此默认只读模式即可

  3.     content = [] # 建立空列表,专门放置需要做替换文字动作的行。
  4.     total = 0 # 统计更换次数,并且最好是使用区别于 BIF中 count 的另一个词。

  5.     for eachline in f1: # 在打开的文件中,的某一行
  6.         if old in eachline: # 如果这一行包含了 old,即要被替换的字
  7.             total = eachline.count(old) # 记录数量为 total 的值
  8.             eachline = eachline.replace(old, new) # 此行,即刻做新旧替换
  9.         content.append(eachline) # 替换后,把本行记录在content列表里。

  10.     decision = input('''\n文件 %s 中一共有 %s 个【%s】\n,
  11. 您确定要把所有的【%s】替换为【%s】吗?\n
  12. 【Yes/No】:''' \ % (file_name, total, old, old, new))
  13.     # 询问用户,是否做出替换的决定

  14.     if decision in ['YES', 'Yes', 'yes']:  # 如果用户输入yes的三种拼写之一
  15.         f2 = open(file_name,'w', encoding = utf-8) # 用可修改格式打开中文文件
  16.         f2.writelines(content) # 书写上去
  17.         f2.close() # 关闭文件

  18.     f1.close() # 关闭文件

  19. file_name = input('请输入文件名:')
  20. old = input('请输入需要替换的单词或字符:')
  21. new = input('请输入新的单词或字符:')
  22. function1(file_name, old, new)
复制代码

问题:
1. 第15行,这里的  \,不对吧?怎么会在%前,无故地放一个\ ?
2. 第19行,为何会出现报错?w 的符号不对么?运行时,这里报错了。
3. 第20行,python是如何知道按顺序,把content里的行,在恰当的位置插入的?因为置换的行,可能分散在不需要置换行的中间某处。

感谢高手们~
最佳答案
2021-1-22 16:46:21
本帖最后由 Daniel_Zhang 于 2021-1-22 16:47 编辑
Peteryo01223 发表于 2021-1-22 16:19
按照楼上提示,我改了这3点之后,还是报错,如下:


就挺突然的

看来你是真的不太理解这个

在这里,utf-8不加引号,就会被默认为一个变量,全局都找不到这个变量,就会报错
打引号的话,就是告诉 open函数,你 encoding 的类型。相信在 open 的最底层代码里面,会有一行这样的代码:
  1. if encoding == 'utf-8':
  2.     # 执行 xxx
  3.     ...
复制代码


相当于你把 'utf-8' 这个字符串赋值给了 encoding,然后底层代码拿着 encoding 去执行
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-1-22 16:05:05 | 显示全部楼层
本帖最后由 Daniel_Zhang 于 2021-1-22 16:06 编辑

首先,是 encoding = 'utf-8' 不是 encoding = utf-8

其次,第15行那里多了一个 反斜杠 \ 似乎?

然后,写入的话,是按照顺序写入的,如果还是不明白的话可以自己多测试几下,就懂啦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-22 16:08:14 | 显示全部楼层
Daniel_Zhang 发表于 2021-1-22 16:05
首先,是 encoding = 'utf-8' 不是 encoding = utf-8

其次,第15行那里多了一个 反斜杠 \ 似乎?

嗯嗯,1. encoding 我用的少,又写错了。2. 我刚要问这个 \ 的问题。我是照抄的小甲鱼,我也没看懂多余的 \ 是什么意思,还是他笔误?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-22 16:12:32 | 显示全部楼层
Peteryo01223 发表于 2021-1-22 16:08
嗯嗯,1. encoding 我用的少,又写错了。2. 我刚要问这个 \ 的问题。我是照抄的小甲鱼,我也没看懂多余的 ...

那个是续行符

可以自行百度一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-22 16:15:29 | 显示全部楼层
Daniel_Zhang 发表于 2021-1-22 16:12
那个是续行符

可以自行百度一下

谢谢,原来是续行符号。这个 \ 像个多音字,这么多用法啊。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-22 16:19:26 | 显示全部楼层
本帖最后由 Peteryo01223 于 2021-1-22 16:20 编辑

按照楼上提示,我改了这3点之后,还是报错,如下:
  1. 请输入文件名:F:\\a.txt
  2. 请输入需要替换的单词或字符:牛
  3. 请输入新的单词或字符:羊羊羊

  4. 文件 F:\\a.txt 中一共有 1 个【牛】

  5. 您确定要把所有的【牛】替换为【羊羊羊】吗?

  6. 【Yes/No】:yes
  7. Traceback (most recent call last):
  8.   File "C:/Users/user/Desktop/20210122b.py", line 28, in <module>
  9.     function1(file_name, old, new)
  10.   File "C:/Users/user/Desktop/20210122b.py", line 19, in function1
  11.     f2 = open(file_name,'w', encoding = utf-8) # 用可修改格式打开中文文件
  12. NameError: name 'utf' is not defined
  13. >>>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-22 16:30:01 | 显示全部楼层
本帖最后由 jackz007 于 2021-1-22 16:31 编辑

f2 = open(file_name,'w', encoding = "utf-8")
同样的毛病,缺少引号。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-22 16:46:21 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Daniel_Zhang 于 2021-1-22 16:47 编辑
Peteryo01223 发表于 2021-1-22 16:19
按照楼上提示,我改了这3点之后,还是报错,如下:


就挺突然的

看来你是真的不太理解这个

在这里,utf-8不加引号,就会被默认为一个变量,全局都找不到这个变量,就会报错
打引号的话,就是告诉 open函数,你 encoding 的类型。相信在 open 的最底层代码里面,会有一行这样的代码:
  1. if encoding == 'utf-8':
  2.     # 执行 xxx
  3.     ...
复制代码


相当于你把 'utf-8' 这个字符串赋值给了 encoding,然后底层代码拿着 encoding 去执行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-22 17:20:19 From FishC Mobile | 显示全部楼层
jackz007 发表于 2021-1-22 16:30
f2 = open(file_name,'w', encoding = "utf-8")
同样的毛病,缺少引号。

多谢~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-26 15:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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