如何用给定替换词替换句子单词?代码功能异常求助
需求说明
需实现以下功能:首先读取用户输入的替换词对数量,接着读取多组原词与替换词的映射关系,最后读取待处理句子;将句子中存在的原词替换为对应替换词,不存在则保留原词。
示例输入
5 hello salam goodbye khodafez say goftan we ma you shoma we say goodbye to you tonight
示例输出
ma goftan khodafez to shoma tonight
错误代码
用户编写的Python代码在单词匹配与替换部分存在问题,无法正确实现功能:
n=int(input()) words=[] trans=[] dict1={} for i in range(0,n): word_trans=input() word_trans = word_trans.split() words.append(word_trans[0]) trans.append(word_trans[1]) for i in range(0,n): dict2={words[i]:trans[i]} dict1.update(dict2) sentence=input() sentence1=sentence.split() for i in sentence1: if i==dict1(keys): print(dict1(key)) else: print(i)
问题排查与修正
这段代码的问题主要集中在字典的使用和输出格式上,具体错误和修正方案如下:
错误点拆解
- 字典判断逻辑错误:
if i==dict1(keys)是语法错误,判断单词是否在字典的键集合中,应该用i in dict1或者i in dict1.keys(),不能把keys当作参数传入字典。 - 字典取值写法错误:
dict1(key)是函数调用的写法,字典取值需要用dict1[i],或者更稳妥的dict1.get(i)——后者在单词不在字典中时不会抛出异常,直接返回原词。 - 输出格式不符合要求:原代码每个单词单独调用
print,会导致每个单词占一行,而示例要求所有单词在同一行用空格分隔。
修正后的代码
n = int(input()) dict1 = {} # 直接循环构建替换字典,无需额外存储两个列表 for _ in range(n): original, replacement = input().split() dict1[original] = replacement # 跳过输入中的空行,读取有效的待处理句子 while True: sentence = input().strip() if sentence: break sentence_words = sentence.split() # 批量处理每个单词,存在替换词则替换,否则保留原词 result_words = [dict1.get(word, word) for word in sentence_words] # 将处理后的单词用空格连接成句子并打印 print(' '.join(result_words))
修正说明
- 移除了多余的
words和trans列表,直接在循环中将原词与替换词存入字典,简化代码结构。 - 使用
dict1.get(word, word)一步完成判断与替换操作,比先判断再取值的逻辑更简洁高效。 - 通过列表推导式生成处理后的单词列表,再用
join方法拼接成完整句子打印,确保输出格式与示例一致。 - 增加了跳过空行的逻辑,避免读取到输入中的空行导致程序异常。
内容的提问来源于stack exchange,提问作者liehos98
相关产品推荐
相关产品推荐

