2015-04-29 1 views
0

Мне нужно написать функцию, которая принимает строку, представляющую имя файла в качестве аргумента, например. letter_count ('alphabet.txt'). Функция должна открыть файл и вернуть количество букв (а не цифр или других символов), которые оно содержит.Функция, которая принимает строку, представляющую имя файла в качестве аргумента. Функция возвращает число букв в txt-файле

Извините за включение доктрины, но я думаю, что это помогает сделать более очевидным то, что пытается достичь.

def letter_count(filename): 
    """ 
    >>> letter_count("anthem.txt") 
    177 
    >>> letter_count("digits.txt") 
    0 
    >>> letter_count("phrase.txt") 
    10 
    """ 

    myfile = filename 
    count = 0 
    letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" 
    text = myfile.readlines() 
    for char in text: 
     if char in letters: 
      count += 1 
    return count 


import string 
myfile = open(filename, 'r') 
myfile.close() 

if __name__=="__main__": 
    import doctest 
    doctest.testmod(verbose=True) 

Очевидно, что я допустил ошибку, но не могу определить, какие-либо советы?

+0

'myfile' Безразлично 't существует в вашей функции – Finwood

+0

Извините, ребята, я обновил его. Было несколько проблем с вставкой. Грег, я назвал функцию letter_count в доктрине. – limereid

+0

ваш 'letter_count' еще не вызывается ... – Finwood

ответ

1

Ваш файл открыт только за пределами вашей функции.

Попробуйте это:

def letter_count(filename): 
    count = 0 
    letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" 
    with open(filename) as f: 
     for line in f: 
      for char in line: 
       if char in letters: 
        count += 1 
    return count 

Edit: Возьмите closer look в with заявлении, это очень удобно здесь.

+0

Возвращалось, что 'filename' не определен. – limereid

+0

как вы его вызвали? – Finwood

+0

Как раз слева, как указано выше, и вместо этого ставьте этот код вместо старой функции. – limereid

0

Другим решением является добавление вашей функции возможность открыть файл .txt внутри функции, например, функция ниже будет принимать строку, а затем открыть файл в функции:

def parseCSV(A): 
    file = open(A,'r') 
Смежные вопросы