我是通过http://GrokLearning.com学习Python 3.3的初学者。
我的目标是编写一个单词计数器程序,该程序从用户读取多行纯文本,然后从用户输入中打印出每个不同的单词,并计算该单词出现的次数。所有输入将仅是小写字母-不含标点符号或数字。输出列表将按字母顺序排列。
该程序不接受任何与Counter或Collections的提交。当我提交使用Counter在Stack Exchange上找到的解决方案时,编辑器只是假装Counter代码不存在。
这是我到目前为止所拥有的:
all = []
count = {}
line = input("Enter line: ")
while line:
word = line.split()
line = input("Enter line: ")
for w in word:
count[w] = word.count(w)
for word in sorted(count):
print(word, count[word])
我的代码存在问题:如果一个单词在多行中重复出现,那么该代码将仅计算单词出现的最后一行的出现次数(而不是总出现次数)。
> this is another test test
> test test test test test
> test test test
>
another 1
is 1
test 3
this 1
我知道我没有使用列表“全部”。我尝试过all.append(word)列出用户输入的所有单词,但是我的代码计数为0(也许因为最后一行需要为空才能结束while循环?)
作为参考,我浏览了所有免费模块,但没有浏览任何付费模块。请原谅:由于我的知识有限,请以简单的方式解释您的答案。
问题在这里:
for w in word:
count[w] = word.count(w)
在您的代码中,您不会增加计数。取而代之的是,每次遇到一个单词时都要重置计数。例如,如果count['this']
之前为1,则下次遇到该计数时,请将计数再次设置为1,而不是将其加1。
第二个问题是表达式word.count(w)
。它计算一个单词在一行中出现的次数,同时循环遍历每个单词。这意味着,如果您正确更新(而不是重置)计数,则计数将过多。
例如,如果该行具有三个“ test”,那么您将通过3 x 3 = 9更新计数。
要解决此问题,您需要解决两种情况:
这是一个建议:
for w in word:
if w in count:
count[w] += 1
else:
count[w] = 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句