1.查找替换(10分)
[描述]
从键盘上分别输入要查找和替换的字符串,对文本文件进行查找与替换,替换后保存到新的文本文件中。

思路:输入待查找字符串s,需查找子字符串key和替换字符串new,通过调用自定义函数replace实现替换。完善划线处代码。

s = input("请输入待查找的字符串:")
key = input("请输入需查找的子字符串:")
new = input("请输入要替换的字符串:")
def findstr(key, s, begin):
      for i in range(begin,len(s) - len(key) + 1):
           if s[i:        ①        ]== key:
              return i
      return -1
def replace(key, new, s):
      begin = 0
      while begin <         ②        :
            pos = findstr(key,s, begin)
            if pos ==-1:
                      break
            else:
                  s = s[0:pos]+ new + s[pos + len(key):        ③        ]
                  begin =  pos + len(key)
       return s
rst =        ④          #调用函数替换字符
print(rst)

3 条评论

  • @ 2025-6-1 14:52:35

    我们来一步一步分析这道题目,目标是实现一个字符串查找与替换的程序。这个程序会从用户输入中获取三个信息:

    • 原始字符串 s
    • 要查找的子字符串 key
    • 替换用的新字符串 new

    然后我们通过自定义函数 replace 来完成查找和替换操作,并输出结果。


    🧠 整体思路:

    想象你在写一封信,你想把信里所有的“苹果”换成“香蕉”。你可以一段一段地找“苹果”,找到之后把它改成“香蕉”,继续往下找,直到整封信都检查完。

    在这个程序中,我们要做三件事:

    1. 查找:从原始字符串中找出某个子字符串(比如“苹果”)。
    2. 替换:把这个子字符串替换成新的内容(比如“香蕉”)。
    3. 循环处理:因为可能有多处需要替换,所以要一直找、一直换,直到全部替换完。

    📌 程序结构解析

    第一步:输入部分

    s = input("请输入待查找的字符串:")
    key = input("请输入需查找的子字符串:")
    new = input("请输入要替换的字符串:")
    

    这部分很简单,就是让用户输入三个字符串:

    • s:原始文本
    • key:想要查找的内容
    • new:要替换成的内容

    例如:

    请输入待查找的字符串:我喜欢吃苹果,苹果很好吃。
    请输入需查找的子字符串:苹果
    请输入要替换的字符串:香蕉
    

    第二步:自定义查找函数 findstr

    def findstr(key, s, begin):
        for i in range(begin, len(s) - len(key) + 1):
            if s[i:①] == key:
                return i
        return -1
    

    这是一个帮助我们查找子字符串的小工具。

    解释:

    • begin 是开始查找的位置。
    • 我们从位置 begin 开始,逐个字符往后看。
    • 每次取出长度为 len(key) 的字符串,看看是不是等于 key
    • 如果找到了,就返回它的起始位置 i
    • 如果没找到,就返回 -1

    补全空格①:

    我们要取的是从位置 i 开始,长度为 len(key) 的字符串。

    所以应该写成:

    s[i : i + len(key)]
    

    ✅ 所以第一个空填:

    ① i + len(key)
    

    第三步:自定义替换函数 replace

    def replace(key, new, s):
        begin = 0
        while begin < ②:
            pos = findstr(key, s, begin)
            if pos == -1:
                break
            else:
                s = s[0:pos] + new + s[pos + len(key):③]
                begin = pos + len(new)
        return s
    

    这是整个程序的核心部分。

    思路讲解:

    • 我们从位置 begin=0 开始查找。
    • 每次调用 findstr 查找有没有 key
    • 如果找到了(pos != -1),就把 key 替换成 new
    • 然后更新 begin,跳到替换后的位置继续查找。
    • 直到找不到为止(即 pos == -1)。

    补全空格②:

    什么时候停止查找?当 begin 超过了可以查找的范围。

    也就是 begin >= len(s) - len(key) + 1,但为了简化,这里直接比较是否小于字符串长度即可。

    ✅ 所以第二个空填:

    ② len(s)
    

    补全空格③:

    替换的时候,我们需要拼接三部分:

    • 前面的部分:s[0:pos]
    • 中间替换的部分:new
    • 后面的部分:从 pos + len(key) 到结尾

    Python中切片默认到最后一个字符,所以可以直接写成:

    s[pos + len(key):]
    

    ✅ 第三个空填:

    ③ (留空)
    

    第四步:调用函数并输出结果

    rst = ④ #调用函数替换字符
    print(rst)
    

    我们要调用上面写的 replace 函数,并传入三个参数:key, new, s

    ✅ 所以第四个空填:

    ④ replace(key, new, s)
    

    ✅ 完整正确代码如下:

    s = input("请输入待查找的字符串:")
    key = input("请输入需查找的子字符串:")
    new = input("请输入要替换的字符串:")
    
    def findstr(key, s, begin):
        for i in range(begin, len(s) - len(key) + 1):
            if s[i:i + len(key)] == key:
                return i
        return -1
    
    def replace(key, new, s):
        begin = 0
        while begin < len(s):
            pos = findstr(key, s, begin)
            if pos == -1:
                break
            else:
                s = s[0:pos] + new + s[pos + len(key):]
                begin = pos + len(new)
        return s
    
    rst = replace(key, new, s)
    print(rst)
    

    🧪 示例运行

    输入:

    请输入待查找的字符串:我喜欢吃苹果,苹果很好吃。
    请输入需查找的子字符串:苹果
    请输入要替换的字符串:香蕉
    

    输出:

    我喜欢吃香蕉,香蕉很好吃。
    

    🎯 小结:这道题主要考查了什么?

    考点 内容
    字符串切片 如何取子串
    循环控制 控制查找和替换的过程
    自定义函数 把功能封装起来复用
    逻辑思维 怎么一步步替换所有出现的子串

    如果你是一个小学生,可以把这段程序理解为:

    “我有一个句子,我想在里面找一些词,找到了就换成别的词。”

    就像玩“词语大变身”的游戏一样!


    如有疑问欢迎继续提问!😊

    • @ 2025-6-1 14:51:45

      解题思路分析

      这道题是让我们写一个程序,从键盘输入要查找和替换的字符串,然后对文本文件进行查找替换,最后把结果保存到新文件中。不过题目给出的代码里有几个地方需要我们补充完整,下面来一步步分析。

      函数findstr的分析与补全

      这个函数的作用是在一个字符串里查找特定的子字符串,就好比在一篇文章里找某个词语一样。

      • ①处应填i+len(key)。要理解这一点,我们可以想象成在一排字母中找一个单词。比如要在"hello"里找"ll",那我们得从第一个字母开始,每次截取和"ll"一样长度的字母来比较。所以这里就是截取从位置i开始,长度和key一样的子字符串。

      函数replace的分析与补全

      这个函数是用来把字符串里所有找到的子字符串都替换成新的字符串,就像我们用Word文档的替换功能一样。

      • ②处应填len(s)。这是因为我们要在整个字符串里进行查找替换,只要还没到字符串的末尾,就继续找。
      • ③处应填len(s)。当我们找到一个要替换的子字符串并替换后,后面剩下的字符串就是从替换位置加上原字符串长度的地方开始,一直到整个字符串的末尾。

      主程序的分析与补全

      主程序就是负责调用我们写的替换函数,然后输出结果。

      • ④处应填replace(key, new, s)。这就好比我们告诉程序:“好了,现在按照我们写的替换方法,把字符串里的内容替换一下吧!”

      完整代码

      下面是补全后的完整代码:

      s = input("请输入待查找的字符串:")
      key = input("请输入需查找的子字符串:")
      new = input("请输入要替换的字符串:")
      
      def findstr(key, s, begin):
          for i in range(begin, len(s) - len(key) + 1):
              if s[i:i+len(key)] == key:
                  return i
          return -1
      
      def replace(key, new, s):
          begin = 0
          while begin < len(s):
              pos = findstr(key, s, begin)
              if pos == -1:
                  break
              else:
                  s = s[0:pos] + new + s[pos + len(key):len(s)]
                  begin = pos + len(new)
          return s
      
      rst = replace(key, new, s)
      print(rst)
      

      代码解释

      1. findstr函数

        • 这个函数就像是一个小侦探,在字符串s里从begin的位置开始,一个字母一个字母地找,看看有没有和key一样的子字符串。
        • 要是找到了,就告诉我们这个子字符串在什么位置;要是没找到,就返回-1,表示“我没找到哦”。
      2. replace函数

        • 这个函数就像是一个魔法师,它不断地调用findstr函数,找到key后,就把它变成new
        • 为了避免一直替换同一个地方,每次替换后,它会从替换的地方往后继续找,而不是又从前面开始找。
      3. 主程序

        • 主程序就像是一个指挥官,它让我们输入要查找和替换的内容,然后调用替换函数进行替换,最后把替换后的结果告诉我们。

      注意事项

      • 当替换后的字符串长度和原来不一样时,要注意更新查找的起始位置,不然可能会出现一直替换同一个地方或者漏掉一些需要替换的地方。
      • 在替换过程中,字符串的长度可能会发生变化,所以循环的时候要一直检查是不是已经到了字符串的末尾。

      这样解释是不是很容易理解呀?如果还有不明白的地方,随时可以问哦!

      • @ 2025-6-1 14:50:21

        解题思路分析

        这道题主要考察字符串处理中的查找与替换逻辑,需要我们补全代码中的四个关键部分。下面来详细分析:

        函数findstr的分析与补全

        函数findstr的作用是在字符串s里,从begin位置开始查找子字符串key首次出现的位置。

        • ①处应填i+len(key)。原因在于,当进行子字符串匹配时,需要截取从当前位置i开始,长度和key一样的子字符串,也就是s[i:i+len(key)]

        函数replace的分析与补全

        函数replace的功能是把字符串s里所有的子字符串key都替换成new

        • ②处应填len(s)。在循环过程中,要保证循环条件是begin小于字符串s的当前长度。这是因为随着替换操作的进行,字符串s的长度可能会发生改变。
        • ③处应填len(s)。在完成一次替换之后,要更新字符串s,从pos + len(key)位置开始截取到原字符串末尾,所以这里是s[pos + len(key):len(s)]

        主程序的分析与补全

        主程序的任务是调用replace函数完成替换操作。

        • ④处应填replace(key, new, s)。这样就能调用replace函数,把字符串s中所有的key替换为new,并将结果存储在rst变量中。

        完整代码

        下面是补全后的完整代码:

        s = input("请输入待查找的字符串:")
        key = input("请输入需查找的子字符串:")
        new = input("请输入要替换的字符串:")
        
        def findstr(key, s, begin):
            for i in range(begin, len(s) - len(key) + 1):
                if s[i:i+len(key)] == key:
                    return i
            return -1
        
        def replace(key, new, s):
            begin = 0
            while begin < len(s):
                pos = findstr(key, s, begin)
                if pos == -1:
                    break
                else:
                    s = s[0:pos] + new + s[pos + len(key):len(s)]
                    begin = pos + len(new)
            return s
        
        rst = replace(key, new, s)
        print(rst)
        

        代码解释

        1. findstr函数

          • 此函数会从begin位置开始,在字符串s中逐个检查子字符串。
          • 一旦找到与key相同的子字符串,就返回其起始位置。
          • 若没有找到,就返回-1。
        2. replace函数

          • 该函数借助循环不断调用findstr函数,来查找key的位置。
          • 每找到一个key,就用new进行替换,然后更新字符串s
          • 为避免陷入无限循环,begin要更新为pos + len(new),而不是pos + len(key),因为替换后的字符串长度可能和原来不同。
        3. 主程序

          • 主程序先读取用户输入的三个字符串。
          • 接着调用replace函数进行替换操作。
          • 最后输出替换后的结果。

        注意事项

        • 当替换后的字符串长度和原字符串长度不一样时,要正确更新begin的值,防止出现无限循环或者遗漏部分替换。
        • 在替换过程中,字符串s的长度会动态变化,所以循环条件要使用len(s)
        • 1