Подсчет нужного слова в текстовом файле - PullRequest
0 голосов
/ 15 ноября 2018

Мне нужно посчитать, сколько раз данное слово появляется в заданном текстовом файле, это адрес Геттисберга. По какой-то причине он не учитывает мой вклад "нации", поэтому вывод выглядит так:

'nation' is found 0 times in the file gettysburg.txt

Вот код, который у меня есть на данный момент, может кто-то указать, что я делаю неправильно?

fname = input("Enter a file name to process:")
find = input("Enter a word to search for:")
text = open(fname, 'r').read()
def processone():
    if text is not None:
        words = text.lower().split()
        return words
    else:
        return None

def count_word(tokens, token):
    count = 0
    for element in tokens:
        word = element.replace(",", " ")
        word = word.replace("."," ")

        if word == token:
            count += 1
        return count
words = processone()
word = find
frequency = count_word(words, word)
print("'"+find+"'", "is found", str(frequency), "times in the file", fname)

Моя первая функция разбивает файл на строку и переводит все буквы в нижний регистр. Второй снимает пунктуацию и должен считать слово, указанное во входных данных.

Принимая мой первый урок кодирования, если вы видите больше недостатков в моем кодировании или улучшениях, которые могут быть сделаны, а также помогаете найти решение моей проблемы, не стесняйтесь.

Ответы [ 3 ]

0 голосов
/ 15 ноября 2018

для начала я бы предложил вам использовать операторы print и посмотреть, какие переменные выводятся на печать, что помогает решить проблему. Например, print word показывал только первое слово из файла, что объяснило бы проблему в вашем коде.

def count_word(tokens, token):
    count = 0
    for element in tokens:
        word = element.replace(",", " ")
        word = word.replace("."," ")
        print (word)
        if word == token:
            count += 1
        return count


Enter a file name to process:gettysburg.txt
Enter a word to search for:nation
fourscore
'nation' is found 0 times in the file gettysburg.txt
0 голосов
/ 15 ноября 2018

Используйте код ниже:

fname = input("Enter a file name to process:")
find = input("Enter a word to search for:")
text = open(fname, 'r').read()
def processone():
    if text is not None:
        words = text.lower().split()
        return words
    else:
        return None

def count_word(tokens, token):
    count = 0
    for element in tokens:
        word = element.replace(",", " ")
        word = word.replace("."," ")

        if word == token:
            count += 1
    return count

words = processone()

word = find
frequency = count_word(words, word)
print("'"+find+"'", "is found", str(frequency), "times in the file", fname)

оператор "return" go out оператор "для"

0 голосов
/ 15 ноября 2018

В цикле for в функции count_word() имеется оператор return в конце цикла, который сразу же выходит из функции после одной итерации цикла.

Возможно, вы хотите переместить оператор return за пределы цикла for.

...