功能中的Python条件without_E无法正常工作

时间:2014-10-18 16:27:25

标签: python

某种程度上without_E功能不起作用。我得到了整个清单。但是我只希望用字母'e'来检测单词。此外,当我打印列表时,我会以[words]而不是"words"的形式获得这些字词。这是正常的行为吗?这些函数正在从wordlist文件中读取。

# Display words without letter "e"
def without_E(word):
    for ch in word:
        if ch == 'e' or ch == 'E':
            print "here" * 5
            return False
    return True


def percentage_words():
    i = 0
    j = 0
    fin = open("wordlist")
    for line in fin:
        i += 1
        word = line.split()
        if without_E(word):
            j += 1
            # print word
    percentage = (j * 100) / i
    print percentage


def main():
    # word_list()
    # long_words20()
    # without_E()
    percentage_words()


if __name__ == "__main__":
    main()

2 个答案:

答案 0 :(得分:0)

首先,您需要更新文件对象,这样,如果您的文件中只有单词,请fin = open("wordlist")更改为fin = open("wordlist").readlines()。但是,如果您的文件中有行,则需要split您的行,然后检查:

def percentage_words():
    i = 0
    j = 0
    fin = open("wordlist").readlines()
    for line in fin:
      for word in line.split():
        i += 1
        word = line.split()
        if without_E(word):
            j += 1

您可以使用without_E(word)操作来代替for函数和in循环:

def without_E(word):
        if 'e' in word or 'E' in word:
            print "here" * 5
            return False
    return True

答案 1 :(得分:0)

word = line.split()

这一行会将该行中的所有单词作为字符串列表给出,并将其传递给without_E。因此,您实际上是在检查单个字词是e还是E。而不是那样,你可以做这样的事情

i, j = 0, 0
with open("wordlist") as fin:
    for line in fin:
        i += 1
        for word in line.split():
            if "e" not in word.lower():
                j += 1

现在,for word in line.split()将遍历当前行中的每个单词,然后我们会检查{{1}中的e是否而不是 }}