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

Python函数实现短语转网络俚语缩写(禁用内置替换类函数)及排错

问题与解决方案

需求说明

编写一个Python函数,将至少四个不同的单词或短语替换为LOL、OMG、TBH这类网络俚语缩写。例如,若用户输入句子“Oh my god, I am scared to be honest.”,输出应为“OMG I am scared TBH”。程序不得使用任何内置的find、replace、encode、index或translate函数,可使用索引(即[ ])、切片(即:)、in运算符和len()函数。

用户现有代码

user_string = (input("Please enter a string: ")).lower()

punctuations = '''.,!@#$%^&*()[]{};:-'"|\<>/?_~'''

new_string = ""

list = []

for i in range(0, len(user_string)):
    if (user_string[i] not in punctuations):
        new_string = new_string + user_string[i]

print(new_string)

slang = "to be honest"

for i in range(0, len(slang)):
    for j in range(0, len(new_string)):
        if (new_string[j] == slang[i]):
            list.append(j)
            if (i < len(slang)):
                i = i + 1
        
        elif (new_string[j] != slang[i]):
            if (len(list) > 0):
                list.pop()

print(list)

现有代码问题:嵌套循环中手动修改外层循环变量i会导致循环逻辑混乱,匹配短语的逻辑不严谨,且未实现替换功能,也没考虑多个短语的替换需求。

解决方案

核心思路

  1. 正确处理标点:将标点符号替换为空格,避免单词因标点移除而连在一起(比如"god,I"不会变成"godi",而是"god I")。
  2. 定义替换映射:用字典存储需要替换的短语和对应的俚语,方便扩展到至少四个短语。
  3. 自定义匹配函数:遍历字符串,逐个字符匹配目标短语,找到匹配的起始位置后进行替换。
  4. 循环处理所有替换项:对每个替换短语,重复执行匹配替换操作。

完整代码

def replace_slang(input_str):
    # 定义替换映射:至少四个短语
    slang_map = {
        "oh my god": "OMG",
        "to be honest": "TBH",
        "laugh out loud": "LOL",
        "by the way": "BTW"
    }
    
    # 处理标点:将标点替换为空格,同时保留原空格
    punctuations = '''.,!@#$%^&*()[]{};:-'"|\<>/?_~'''
    processed_str = ""
    for char in input_str:
        if char in punctuations:
            processed_str += " "
        else:
            processed_str += char.lower()  # 统一转小写,不区分大小写匹配
    
    # 遍历每个需要替换的短语
    for phrase, slang in slang_map.items():
        phrase_len = len(phrase)
        str_len = len(processed_str)
        new_str = ""
        i = 0
        while i <= str_len - phrase_len:
            # 检查当前位置是否匹配短语
            match = True
            for j in range(phrase_len):
                if processed_str[i + j] != phrase[j]:
                    match = False
                    break
            if match:
                # 匹配成功,添加俚语,跳过短语长度的字符
                new_str += slang
                i += phrase_len
            else:
                # 不匹配,添加当前字符,移动一位
                new_str += processed_str[i]
                i += 1
        # 处理剩余的字符
        new_str += processed_str[i:]
        processed_str = new_str
    
    # 去除多余的连续空格
    final_str = ""
    prev_char = ""
    for char in processed_str:
        if char == " " and prev_char == " ":
            continue
        final_str += char
        prev_char = char
    return final_str.strip()  # 去除首尾空格

# 测试
user_input = input("Please enter a string: ")
print(replace_slang(user_input))

代码说明

  1. 标点处理:把所有标点换成空格,确保单词之间用空格分隔,同时统一转小写,实现不区分大小写的匹配。
  2. 替换映射:字典slang_map中定义了4组短语与俚语的对应关系,可随时添加更多。
  3. 匹配替换逻辑:通过双层循环逐个字符比对,找到完整匹配的短语后,将俚语添加到新字符串,并跳过短语长度的字符;不匹配则添加当前字符,继续遍历。
  4. 去除多余空格:处理因标点替换产生的连续空格,让输出更整洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:46:17