您还不大会调试代码吧。最简单的办法就是用print() or input() 查看您的变量,是不是您要的样子,才可以最终解决问题。
我的示例代码没有做成循环查词,您可以试着改改。
#!/sur/bin/nve python
# coding: utf-8
clear = '\033[2J' # Linux 下的清屏字符串。
mypath = '/sdcard/Documents/'
vocab = {} # 单词字典初值。
for line in open(f"{mypath}乱序单词本.txt").read().split('\n'): # 读取文本重成单词字典。
line = line.split() # 以空格拆分读取的行。
vocab[line[0]] = line[1:] # 以单词为key 追加入字典。
#print(vocab) # 查看单词字典。调试用语句。
def ch_to_en(): # 单词字典的作用域是全局。她是全局变量,可以直接引用。
''' 中译英 '''
ch = input(f"{clear}\n{' 汉译英 ':~^47}\n\n{'输入中文:':>12}").strip() # 用ch接收键盘录入并用str.strip()方法去除前后空格。
chars = "".join(map(lambda x: ''.join(x), vocab.values())) # 提取中文释义拼接成字符串。
words = vocab.keys() # 提取词典中收录的英文单词。
#input((chars, words)) 调试用语句。
if ch not in chars: # 报错。
print(f"{clear}{' 汉译英 ':~^47}\n\n{f' 词典中还没有收录“{ch}”释义的单词 ':~^35}\n")
else: # 翻译。
for word in words:
if ch in ''.join(vocab[word]):
print(f"{clear}{' 汉译英 ':~^47}\n\n{'':>12}“{ch}”的英译是:{word}\n\n{'':>12}中文释义:{' '.join(vocab[word])}\n\n{'':~^50}\n")
if __name__ == '__main__':
ch_to_en() # 调用汉译英。
您从单词文本读取文本生成字典时,由于您是中译英,您应该用中文释义做key,而您却用英文单词做key。还有就是从键盘输入,肯定不是中文词义不完整的,您得想法处理下。这样修改之后,会更方便查找。
我的代码示例沿用了您构造的英文词典结构,查词我能想到的“最好”办法就是遍历所有收录词典中的单词,有其中文释义,打印目录单词及中文释义。这完全没用上字典用key查value 的快捷特性,如果词典够大,我的示例代码会很慢的。