鱼C论坛

 找回密码
 立即注册
查看: 808|回复: 5

for 循环的一个小问题

[复制链接]
发表于 2019-4-6 16:34:07 | 显示全部楼层 |阅读模式

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

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

x
(这个是《零基础入门学习Python》第29讲动动手的第4题)
这是我的有问题的代码:
title = input('请输入文件名:')
str_old = input('请输入需要替换的单词或字符:')
str_new = input('请输入新的单词或字符:')

count = 0
content = []
file = open(title)


for each in file:
    if str_old in each:
        count += each.count(str_old)
        
new = file.replace(str_old, str_new)
content.append(new)

print('文件%s中共有%d个【%s】' % (title, count, str_old))
print('您确定要把所有的【%s】替换为【%s】吗?' % (str_old, str_new))
judge = input('【YES/NO】:')

if judge == 'YES':
   
    file = open(title, 'w')
    file.writelines(content)
   
    file.close()
else:
    file.close()

这个是不会报错的代码:
title = input('请输入文件名:')
str_old = input('请输入需要替换的单词或字符:')
str_new = input('请输入新的单词或字符:')

count = 0
content = []
file = open(title)


for each in file:
    if str_old in each:
        count += each.count(str_old)
        new = each.replace(str_old, str_new)
    content.append(new)

print('文件%s中共有%d个【%s】' % (title, count, str_old))
print('您确定要把所有的【%s】替换为【%s】吗?' % (str_old, str_new))
judge = input('【YES/NO】:')

if judge == 'YES':
   
    file = open(title, 'w')
    file.writelines(content)
   
    file.close()
else:
    file.close()


两个问题:
1.如果我把
new = file.replace(str_old, str_new)
content.append(new)
这两行放在for循环外面的话,replace语句就会报错,必须要放在for循环里面对each用replace才可以
请问这是for循环的问题吗?

2.我如果想把file.read()的值赋给一个参数或者print(file.read()),只能在for循环之前才能实现,在for循环后面的话就没有值输出
请问这是什么原因呢?

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-4-6 16:38:31 From FishC Mobile | 显示全部楼层
file读完之后,指针就到文件尾了,再次读取,自然读不到
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-6 16:40:16 From FishC Mobile | 显示全部楼层
本帖最后由 wp231957 于 2019-4-6 16:52 编辑

至于第一个问题,到不是放循环外就不可,
问题的关键看你想干嘛,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-6 16:43:24 From FishC Mobile | 显示全部楼层
放循环外,文件指针都跑完了,你还找谁去替换啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-6 21:19:22 | 显示全部楼层
wp231957 发表于 2019-4-6 16:38
file读完之后,指针就到文件尾了,再次读取,自然读不到

那如果在for循环以后把指针再调到起始点就不会报错了是吗?
主要就是要考虑指针位置的问题?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-6 21:22:50 From FishC Mobile | 显示全部楼层
ZPDDD 发表于 2019-4-6 21:19
那如果在for循环以后把指针再调到起始点就不会报错了是吗?
主要就是要考虑指针位置的问题?

是的,当然了,你可以实验一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-15 02:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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