繁体   English   中英

python 程序没有读取输入并返回正确的 output

[英]python program isn't reading input and returning proper output

该程序旨在读取包含具有键(整数 1-1000)的元组的文本文件,以及相关的英语和 hmong 单词。 然后它创建一个字典。

用户然后输入一个英文句子,字典返回 hmong 的翻译。 如果条目包含不在文本文件中的单词,则返回一个问号。

然后它会询问他们是否要输入另一个句子,如果他们说不,那么程序将返回一个列表,该列表打印用户在程序期间输入的每个英语单词的频率。

我已经完成了一般脚本,但逻辑不起作用,我不确定为什么。 当我尝试输入英文句子时,程序返回Hmong: ? 即使单词在文本文件中,但是当我在Another translation (Y/N):字段中输入相同的句子时,它会接受该句子但不会打印翻译,而只是打印单词的频率.

import string

def load_dictionary(filename):
    file=open(filename)
    word_dict=dict()
    for line in file:
        fields=line.strip().split(',')
        if len(fields)==3:
            hmong_list=fields[1].lower()
            english_list=fields[2].lower()
            word_dict[english_list]=hmong_list
        file.close()
    return word_dict
def translate(sentence):
    list_words=load_dictionary('C:\\Users\\Bridget\\Downloads\\HmongWords.txt')
    translated=''
    for word in sentence.split():
        if word in list_words:
            translated+=list_words[word]+' '
        else:
            translated+='? '
    return translated.strip()
def print_word_frequency(text):
    freq_words=dict()
    for word in text.split():
        if word in freq_words:
            freq_words[word]+=1
        else:
            freq_words[word]=1
        print('{:10s} {:10s}'.format('Word', 'Frequency'))
    for word in freq_words:
        print('{:10s} {:10d}'.format(word,freq_words[word]))
def main():
    flag=True
    converted_text=''
    while flag:
        sentence=input("Type your English sentence: ")
        sentence = sentence.lower()
        for i in string.punctuation:
            sentence = sentence.replace(i,' ')
        translated=translate(sentence)
        print('Hmong: ',translated)
        converted_text+=sentence+' '
        flag=input("Another translation (Y/N): ").lower()=='y'
    print_word_frequency(converted_text)
main()

样品运行

Type your English sentence: I can help you help him.
Hmong:  ?
Another translation (Y/N): Y
Type your English sentence: I can help you help him
Hmong:  ?
Another translation (Y/N): I can help you help him
Word       Frequency 
Word       Frequency 
Word       Frequency 
Word       Frequency 
Word       Frequency 
Word       Frequency 
Word       Frequency 
Word       Frequency 
Word       Frequency 
Word       Frequency 
Word       Frequency 
Word       Frequency 
i                   2
can                 2
help                4
you                 2
him                 2

我也不明白为什么它一遍又一遍地打印单词和频率,而不是一次。 任何指导将不胜感激!

您的代码包含 2 个问题。

第一的。 您没有正确读取文件。 for line in file不是正确的方法,你需要做for line in file.readlines()

第二。 在循环的第一次迭代后关闭文件

for line in file:
    fields=line.strip().split(',')
    if len(fields)==3:
        hmong_list=fields[1].lower()
        english_list=fields[2].lower()
        word_dict[english_list]=hmong_list
    file.close() # here

file.close()应该缩进一个

for line in file:
    fields=line.strip().split(',')
    if len(fields)==3:
        hmong_list=fields[1].lower()
        english_list=fields[2].lower()
        word_dict[english_list]=hmong_list
file.close() # should be here

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM