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会导致循环逻辑混乱,匹配短语的逻辑不严谨,且未实现替换功能,也没考虑多个短语的替换需求。
解决方案
核心思路
- 正确处理标点:将标点符号替换为空格,避免单词因标点移除而连在一起(比如"god,I"不会变成"godi",而是"god I")。
- 定义替换映射:用字典存储需要替换的短语和对应的俚语,方便扩展到至少四个短语。
- 自定义匹配函数:遍历字符串,逐个字符匹配目标短语,找到匹配的起始位置后进行替换。
- 循环处理所有替换项:对每个替换短语,重复执行匹配替换操作。
完整代码
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))
代码说明
- 标点处理:把所有标点换成空格,确保单词之间用空格分隔,同时统一转小写,实现不区分大小写的匹配。
- 替换映射:字典
slang_map中定义了4组短语与俚语的对应关系,可随时添加更多。 - 匹配替换逻辑:通过双层循环逐个字符比对,找到完整匹配的短语后,将俚语添加到新字符串,并跳过短语长度的字符;不匹配则添加当前字符,继续遍历。
- 去除多余空格:处理因标点替换产生的连续空格,让输出更整洁。
内容的提问来源于stack exchange,提问作者Girly Girl
相关产品推荐
相关产品推荐

