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

如何用给定替换词替换句子单词?代码功能异常求助

需求说明

需实现以下功能:首先读取用户输入的替换词对数量,接着读取多组原词与替换词的映射关系,最后读取待处理句子;将句子中存在的原词替换为对应替换词,不存在则保留原词。

示例输入

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)
问题排查与修正

这段代码的问题主要集中在字典的使用和输出格式上,具体错误和修正方案如下:

错误点拆解

  1. 字典判断逻辑错误:if i==dict1(keys)是语法错误,判断单词是否在字典的键集合中,应该用i in dict1或者i in dict1.keys(),不能把keys当作参数传入字典。
  2. 字典取值写法错误:dict1(key)是函数调用的写法,字典取值需要用dict1[i],或者更稳妥的dict1.get(i)——后者在单词不在字典中时不会抛出异常,直接返回原词。
  3. 输出格式不符合要求:原代码每个单词单独调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:48:22