По состоянию на данный момент, у меня есть функция, чтобы заменить функцию countChars,программа Python, которая находит наиболее частое слово в текстовом файле, должны напечатать слово и его количество
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
но при запуске программы он выплевывает эту мерзость (это только пример, есть около двух страниц слов с огромным кол-номер рядом с ней)
before 1478
battle-field 1478
as 1478
any 1478
altogether 1478
all 1478
ago 1478
advanced. 1478
add 1478
above 1478
Хотя, очевидно, это означает, что код достаточно звук, чтобы бежать, я не получить то, что я хочу от него. Необходимо напечатать сколько раз каждое слово в файле (gb.txt, который является адресом Геттисберга) Очевидно, каждое слово, которое находится в файле не там ровно 1478 раз ..
Я м довольно новое в программировании, так что я вроде в тупик ..
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()
Ничего себе. Хотя это, возможно, не тот метод, который мой профессор хочет, чтобы мы использовали, это отлично работает для нахождения числа. На этом этапе я бы предпочла их получить, чтобы они печатались в одном столбце для удобства чтения. Есть также несколько частей к заданию, которые включают: Просто распечатайте наиболее распространенное слово. Печать всех слов с их подсчетами в алфавитном порядке. И затем напечатайте все слова с их подсчетами в порядке частоты. Это довольно просто, если я не ошибаюсь, но я не знаю, совместимо ли то, что я узнал, с тем, что вы мне дали. – m96
Задачи, которые вы упомянули, не очень сложны, вам нужно будет использовать '.sort()' или 'sorted()', возможно, искать, как сортировать словарь. Это ваша домашняя работа, и вам это нужно;), но если вы застряли в какой-то части, опубликуйте то, что у вас есть (как еще один вопрос), и кто-то поможет вам. – Akavall