鱼C论坛

 找回密码
 立即注册
查看: 1591|回复: 3

[已解决]小小问题

[复制链接]
发表于 2023-7-19 00:09:18 | 显示全部楼层 |阅读模式

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

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

x
import os
os.chdir("D:\\编程\\编程文件垃圾库")
def fun(a):
    global count
    global listnew
    if a == 0:
        for each in listnew:
            for eeach in each:
                if eeach == temp1:
                    count += 1
        return count           
    elif a == 1:
        for each in listnew:
            for eeach in each:
                if eeach == temp1:
                    b = listnew.index(eeach)
                    listnew.remove(eeach)
                    listnew.insert(b, temp2)
                    return listnew


count = 0
list1 = []
name = input("请输入文件名:")
file = open(name)
for each_line in file:
    list1.append(each_line)
listnew = list(map(str, list1))
print(listnew)
temp1 = input("请输入需替换的字符串:")
temp2 = input("请输入新的字符串:")
print("文件%s共有%d个%s" % (name, fun(0) , temp1))
juezi = input("你确定要替换所有的字符吗【yes/no】:")
if juezi == 'yes':
    fun(1)
    print(''.join(listnew))
    print(listnew)
else:
    print("好的")

帮找一下问题在哪里?T_T
最佳答案
2023-7-19 00:10:26
根据你的描述,你的程序意图是读取一个文件,并且查询一个字符串在文件中出现的次数,如果用户选择,将会把这个字符串替换为另一个字符串。

问题出在这一段代码:
elif a == 1:    for each in listnew:        for eeach in each:            if eeach == temp1:                b = listnew.index(eeach)                listnew.remove(eeach)                listnew.insert(b, temp2)    return listnew
你尝试通过 listnew.index(eeach) 找到 eeach 的位置,然后删除和替换。但是这里有两个问题:
1.  eeach 是 each (一个字符串)的每一个字符,你需要在字符串列表中寻找与 temp1 相等的字符串,而不是字符。
2. 当你删除一个元素后,列表的长度会改变,这会影响你的循环和插入元素的位置。

你可能想要这样做:
elif a == 1:    for idx, each in enumerate(listnew):        if each.strip() == temp1:            listnew[idx] = temp2    return listnew
enumerate 函数可以同时返回元素和它的索引,我们只需在找到相应字符串时替换它就可以了。

此外,为了处理文件,你可能需要在使用 open 后加上 close 来关闭文件,或者使用 with 语句,它可以帮助你自动管理文件的打开和关闭。此外,为了读取文件中的所有行,可以使用 file.readlines() ,这将返回一个包含每一行的列表。

希望这个解答能帮助到你!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-19 00:10:26 | 显示全部楼层    本楼为最佳答案   
根据你的描述,你的程序意图是读取一个文件,并且查询一个字符串在文件中出现的次数,如果用户选择,将会把这个字符串替换为另一个字符串。

问题出在这一段代码:
elif a == 1:    for each in listnew:        for eeach in each:            if eeach == temp1:                b = listnew.index(eeach)                listnew.remove(eeach)                listnew.insert(b, temp2)    return listnew
你尝试通过 listnew.index(eeach) 找到 eeach 的位置,然后删除和替换。但是这里有两个问题:
1.  eeach 是 each (一个字符串)的每一个字符,你需要在字符串列表中寻找与 temp1 相等的字符串,而不是字符。
2. 当你删除一个元素后,列表的长度会改变,这会影响你的循环和插入元素的位置。

你可能想要这样做:
elif a == 1:    for idx, each in enumerate(listnew):        if each.strip() == temp1:            listnew[idx] = temp2    return listnew
enumerate 函数可以同时返回元素和它的索引,我们只需在找到相应字符串时替换它就可以了。

此外,为了处理文件,你可能需要在使用 open 后加上 close 来关闭文件,或者使用 with 语句,它可以帮助你自动管理文件的打开和关闭。此外,为了读取文件中的所有行,可以使用 file.readlines() ,这将返回一个包含每一行的列表。

希望这个解答能帮助到你!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-19 00:36:37 | 显示全部楼层
脚本真好玩
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-19 10:52:17 | 显示全部楼层
over
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 18:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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