python - 需要帮助在 python 中制作一个简单的字典
问题描述
我需要一个像这样工作的简单字典:首先它需要我们有 4 种语言翻译的单词数(n),然后我们在每一行(总共 n 行)输入我们拥有的单词,它们的翻译由空格分隔作为字典源,那么我们需要要求用户输入一个短语,该短语可能比以前作为字典源提供的单词多,并且该短语不仅可以是一种特定的语言,例如它可能是英语的混合,法语和德语,但我们需要将短语翻译成第一种语言,在我们的例子中是波斯语,如果没有翻译,它只会打印单词本身。所以这里是代码:
def read_dictionary():
for i in range(0, words_num):
dict_words = str(input())
words[dict_words.split()[0]] = dict_words.split()[1:]
def translator():
translation = ""
input_phrase = str(input("Enter your phrase to translate please: ")).split()
for word in input_phrase:
for k, v in words.items():
if word in v:
translation += (k + " ")
else:
translation += (word + " ")
print(translation)
words_num = int(input("Enter the number of existing translated words in dictionary: "))
words = {}
read_dictionary()
translator()
所以这是示例输入和所需的输出:
**input:**
Enter the number of existing translated words in dictionary:
4
man I je ich
kheili very très sehr
alaghemand interested intéressé interessiert
barnamenevisi programming laprogrammation Programmierung
Enter your phrase to translate please:
I am very interested in programming
**output:**
man am kheili alaghemand in barnamenevisi
但它的输出是这样的:
man I I I am am am am very kheili very very interested interested alaghemand interested in in in in programming programming programming barnamenevisi
解决方案
问题源于您的translator()
功能。
对于word
中的每个input_phrase
,您遍历 中的每一k, v
对words.items()
。目前很好。
那么我们想要发生什么?我们想要查看每一对,k, v
直到找到匹配的单词(in v
),然后(如果我们这样做)我们想要将键添加k
到translation
我们正在构建的单词中。如果我们没有找到匹配的单词,我们只需将原始word
值添加到translation
.
您的代码的问题在于,即使您确实找到了一个单词,您也会继续查看字典中剩余的键。此外,对于字典中的每个键,您要么添加它的翻译,要么添加开始word
,当您只应在word
找不到匹配项时添加基础。
就个人而言,我会将您的内部for
循环移动到一个名为translate_word()
或类似的新函数中,但是在不进行重大更改的情况下修复您的函数的简单方法translator()
如下:
def translator():
translation = ""
input_phrase = str(input("Enter your phrase to translate please: ")).split()
for word in input_phrase:
found = False
for k, v in words.items():
if word in v:
translation += (k + " ")
found = True
break
if not found:
translation += (word + " ")
print(translation)
在新translator()
函数中,您可以看到对于每个新单词,您将变量设置found
为False
。found
将代表您是否在字典中找到合适的翻译。
然后,您将遍历字典。如果找到匹配项,则添加k
到翻译中,设置found
为True
(因为您找到了翻译),然后break
退出内部for
循环。
退出内部for
循环后,您检查是否found
有word
. 如果您没有找到翻译,只需word
将translation
.
推荐阅读
- html - 除了主元素 div 之外,如何在没有额外 div 的情况下停止 box-shadow 与悬停时的元素一起旋转?
- dart - 为什么sha256结果不同
- deep-learning - E-net 深度学习架构
- amp-html - 哪个规范链接是正确的
- makefile - android 使用 arm64-v8a ABI 编译错误“未定义的引用”
- soap - EWS 托管 api 检查用户帐户中是否存在事件
- scala - Guava Cache Generic LoadingCache
- python - 为什么 Tensorflow 网站花卉图像分类需要大约 6 秒才能进行分类?
- php - 我想将时间以 hrs:min:sec 格式存储在数据库中,并以 hrs:min:sec 格式显示时间
- elasticsearch - 大批量索引与涓流请求