2016-12-19 4 views
0

Я уже задал этот вопрос для моего домашнего задания, используя счетчик. Теперь я изучаю этот же вопрос для финала. Я хотел бы запомнить словари, а не счетчики для этого финала. Я попытался решить эту проблему, используя словарь.Функция repeatCount не дает мне правильного ответа. Почему это происходит?

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

Текст входного файла заключается в следующем:

Woke up this morning with an ache in my head 
I splashed on my clothes as I spilled out of bed 
I opened the window to listen to the news 
But all I heard was the Establishment Blues 

Мой выходной файл должен выглядеть следующим образом:

0 
2 
3 
2 

Правильный выход:

0 
1 
2 
0 

Так вот мой код Теперь. Что определенная часть моего кода приводит к Python, чтобы произвести меня неправильный ответ ?:

def repeatCount(inFile, outFile): 
    inF = open(inFile, 'r') 
    outF = open(outFile, 'w') 

    d = {} 
    for line in inF.readlines(): 
     count = 0 
     words = line.split() 
     for word in words: 
      if word not in d: 
       d[word] = 1 
      elif word in d: 
       d[word] += 1 
      if d[word] > 1: 
       count += 1 
     outF.write(str(count) + "\n") 

print(repeatCount('inputFile.txt', 'outputFile.txt')) 

ответ

0

вас программа начнет давать вам правильный вывод, если вы повторно установить Dict для каждой строки. то есть. переместите d = {} внутрь вашей внешней петли. Затем он будет работать для вашего текущего ввода. Но ваша внутренняя петля все еще глючит, поскольку она не игнорирует уже подсчитанные повторяющиеся слова. Повторите попытку и покажите нам свою следующую итерацию!

+0

Это помогло! Ответ человека выше меня сделал то же самое, но он изменил мой код еще немного. Я просто следовал тому, что вы сказали, и это просто дало мне правильный ответ! – Jorgan

0

Как было предложено @gipsy

движение объявляя словарь внутри для цикла. Также используйте список встроенных функций count, чтобы получить фактическое количество слов.

d = {}

Модифицированная версия кода.

def repeatCount(inFile, outFile): 
    inF = open(inFile, 'r') 
    outF = open(outFile, 'w') 
    for line in inF.readlines(): 
     d = {} 
     count = 0 
     words = line.split() 
     for word in words: 
      if word not in d: 
       wc = words.count(word) 
       d[word] = 1 
       if wc > 1: 
        count += 1 
     outF.write(str(count) + "\n") 

print(repeatCount('inputFile.txt', 'outputFile.txt')) 

Вы также можете улучшить свой код. Refer Python: count frequency of words in a list

+0

Все, что я сделал, было положено d = {}, как и вы, но я не делал 'wc = words.count (word)', и программа все еще работала. Спасибо! – Jorgan