You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.6:elif语句导致单词交换函数异常问题求助

解决单词交换函数的提示重复与结果异常问题

我来帮你修复这个函数的问题,先分析下原代码的核心问题,再给出完整的解决方案:

原代码的问题根源

你把「检查单词是否存在」的逻辑放在了re.sub的回调函数里,这个回调函数会每匹配到一个单词就执行一次。这就导致两个问题:

  1. 只要有一个单词不匹配,就会重复打印提示信息(匹配多少次就打印多少次);
  2. return print(...)会返回None,最终替换后的字符串里会混入大量None,导致结果完全异常。

正确的做法应该是先全局检查一次单词是否存在,再决定是输出提示还是执行交换操作。

修复后的完整代码

import re

def swapfunc(a, b, c):
    # 提取字符串中所有单词的小写集合,用于快速判断存在性(忽略大小写)
    all_words = {word.lower() for word in re.findall(r'\w+', a)}
    missing_words = []
    
    # 检查目标单词是否存在
    if b.lower() not in all_words:
        missing_words.append(b)
    if c.lower() not in all_words:
        missing_words.append(c)
    
    # 处理单词缺失的情况
    if missing_words:
        # 构造提示信息,多个缺失单词时每行输出一个提示
        return '\n'.join([f'Not in string: "{word}"' for word in missing_words])
    
    # 单词都存在时,执行交换逻辑
    def replace_match(match):
        current_word = match.group(1).lower()
        if current_word == c.lower():
            return b.upper()
        elif current_word == b.lower():
            return c.upper()
        else:
            return match.group(1)
    
    return re.sub(r'(\w+)', replace_match, a)

# 测试用例验证
print(swapfunc("Dylan and Bob work together.", "dylan", "bob"))  # 输出:BOB and DYLAN work together.
print(swapfunc("Dylan and Bob work together.", "BOB", "DylAn"))  # 输出:DYLAN and BOB work together.
print(swapfunc("and Bob work together.", "dylan", "bob"))        # 输出:Not in string: "dylan"
print(swapfunc("Dylan and work together.", "DYLAN", "BoB"))      # 输出:Not in string: "BoB"

关键优化点

  1. 全局存在性检查:提前提取所有单词的小写集合,只做一次检查,避免重复判断;
  2. 分离逻辑:把「缺失提示」和「单词交换」拆成两个独立分支,逻辑更清晰;
  3. 正确返回值:缺失时返回提示字符串,交换时返回处理后的文本,确保print输出符合预期;
  4. 大小写兼容:所有存在性判断和匹配都转成小写,支持任意大小写的参数输入(符合你的测试用例要求)。

额外场景支持

如果两个单词都缺失,函数会输出两行提示:

print(swapfunc("Alice works alone.", "dylan", "bob"))
# 输出:
# Not in string: "dylan"
# Not in string: "bob"

内容的提问来源于stack exchange,提问作者Henry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:09:22