2014-11-07 2 views
0

Борьба с этим упражнением, которое должно использовать словарь и подсчитывать количество раз, когда каждое слово появляется в нескольких пользовательских вводах. Он работает в моде, но не распыляет каждое слово из каждой строки ввода пользователя. Поэтому вместо того, чтобы подсчитывать ввод «счастливых дней» как 1 х счастливых и 1 х дней, это дает мне 1 х счастливых дней. Я попытался split() вместе с lower(), но это преобразует вход в список, и я борюсь с тем, что вылил этот список в словарь.Word Frequency Counter Python

Как вы, возможно, догадались, я немного начинающий, поэтому вся помощь будет принята с благодарностью!

occurrences = {} 
while True: 
    word = input('Enter line: ') 
    word = word.lower() #this is also where I have tried a split() 
    if word =='': 
     break 
occurrences[word]=occurrences.get(word,0)+1 
for word in (occurrences): 
    print(word, occurrences[word]) 

EDIT

Приветствия для ответов. Это окончательное решение. Они не беспокоились о деле и хотели, чтобы окончательные результаты были отсортированы().

occurrences = {} 
while True: 
    words = input('Enter line: ') 
    if words =='': 
     break 
    for word in words.split(): 
     occurrences[word]=occurrences.get(word,0)+1 
for word in sorted(occurrences): 
    print(word, occurrences[word]) 
+0

Можете ли вы дать нам пример ввода и вывода кода? – wnnmaw

+0

После того, как вы разделите() строку ввода, вы должны перебрать новый список, добавив каждое отдельное слово в счетчик словаря. – hexparrot

+0

также, я не уверен, что его просто часть вашего сообщения или ваш исходный код, но у вашего кода нет возможности вырваться из цикла while, так как отступ неверен (здесь в сообщении) – hexparrot

ответ

0

Что у вас есть почти нет, вы просто хотите, чтобы петля над словами, при добавлении их в Словаре

occurrences = {} 
while True: 
    words = input('Enter line: ') 
    words = words.lower() #this is also where I have tried a split() 
    if words =='': 
     break 
    for word in words.split(): 
     occurrences[word]=occurrences.get(word,0)+1 
    for word in (occurrences): 
     print(word, occurrences[word]) 
0

Эта линия не становится выполненной: вхождений [слово] = occurrences.get (word, 0) +1

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

В целом, отступы выведенного кода перепутаны, я думаю, это не так, как в вашем фактическом коде.

0

Вы хотите получить статистику по строкам или хотите получить общую статистику? Я предполагаю, что вы хотите построчно, но вы также можете получить общую статистику легко раскомментировав несколько строк в следующем коде:

# occurrences = dict() # create a dictionary here if yuo want to have incremental overall stats 
while True: 
    words = input('Enter line: ') 
    if words =='': 
     break 
    word_list = words.lower().split() 
    print word_list 
    occurrences = dict() # create a dict here if you want line by line stats 
    for word in word_list: 
     occurrences[word] = occurrences.get(word,0)+1 

    ## use the lines bellow if you want line by line stats 
    for k,v in occurrences.items(): 
     print k, " X ", v 

## use the lines bellow if you want overall stats 
# for k,v in occurrences.items(): 
    # print k, " X ", v