Program Python, który znajduje najczęstsze słowo w pliku .txt, musi wydrukować słowo i jego liczbę
W tej chwili mam funkcję do zastąpienia funkcji countChars,
<code>def countWords(lines): wordDict = {} for line in lines: wordList = lines.split() for word in wordList: if word in wordDict: wordDict[word] += 1 else: wordDict[word] = 1 return wordDict </code>
ale kiedy uruchomię program, wypluje to obrzydliwość (jest to tylko przykład, obok niego jest około dwóch stron słów z ogromną liczbą)
<code>before 1478 battle-field 1478 as 1478 any 1478 altogether 1478 all 1478 ago 1478 advanced. 1478 add 1478 above 1478 </code>
Chociaż oczywiście oznacza to, że kod jest na tyle dobry, że można go uruchomić, nie otrzymuję tego, co chcę. Musi wydrukować ile razy każde słowo jest w pliku (gb.txt, który jest adresem Gettysburg). Oczywiście każde słowo znajdujące się w pliku nie ma dokładnie 1478 razy.
Jestem całkiem nowy w programowaniu, więc jestem trochę zakłopotany ..
<code>from __future__ import division inputFileName = 'gb.txt' def readfile(fname): f = open(fname, 'r') s = f.read() f.close() return s.lower() def countChars(t): charDict = {} for char in t: if char in charDict: charDict[char] += 1 else: charDict[char] = 1 return charDict def findMostCommon(charDict): mostFreq = '' mostFreqCount = 0 for k in charDict: if charDict[k] > mostFreqCount: mostFreqCount = charDict[k] mostFreq = k return mostFreq def printCounts(charDict): for k in charDict: #First, handle some chars that don't show up very well when they print if k == '\n': print '\\n', charDict[k] #newline elif k == ' ': print 'space', charDict[k] elif k == '\t': print '\\t', charDict[k] #tab else: print k, charDict[k] #Normal character - print it with its count def printAlphabetically(charDict): keyList = charDict.keys() keyList.sort() for k in keyList: #First, handle some chars that don't show up very well when they print if k == '\n': print '\\n', charDict[k] #newline elif k == ' ': print 'space', charDict[k] elif k == '\t': print '\\t', charDict[k] #tab else: print k, charDict[k] #Normal character - print it with its count def printByFreq(charDict): aList = [] for k in charDict: aList.append([charDict[k], k]) aList.sort() #Sort into ascending order aList.reverse() #Put in descending order for item in aList: #First, handle some chars that don't show up very well when they print if item[1] == '\n': print '\\n', item[0] #newline elif item[1] == ' ': print 'space', item[0] elif item[1] == '\t': print '\\t', item[0] #tab else: print item[1], item[0] #Normal character - print it with its count def main(): text = readfile(inputFileName) charCounts = countChars(text) mostCommon = findMostCommon(charCounts) #print mostCommon + ':', charCounts[mostCommon] #printCounts(charCounts) #printAlphabetically(charCounts) printByFreq(charCounts) main() </code>