所以我的函数应该打开一个文件并计算字长并给出输出。例如,
许多( 'SAMPLE.TXT')
长度为1:2的单词
长度为2:6的单词
长度为3:7的单词
长度为4:6的单词
我的sample.txt文件包含: 这是一个测试文件。有多少个单词长度为1? 三个长度是多少个单词?我们应该搞清楚! 功能可以这样做吗?
我的编码到目前为止,
def many(fname): infile = open(fname,'r')
text = infile.read()
infile.close()
L = text.split()
L.sort
for item in L:
if item == 1:
print('Words of length 1:', L.count(item))
谁能告诉我我做错了什么。我称这个功能没有任何反应。这显然是因为我的编码,但我不知道从哪里开始。任何帮助都会很好,谢谢。
答案 0 :(得分:4)
由于这是家庭作业,我会在这里发布一个简短的解决方案,并将其作为练习,以弄清楚它的作用及其工作原理:)
>>> from collections import Counter
>>> text = open("sample.txt").read()
>>> counts = Counter([len(word.strip('?!,.')) for word in text.split()])
>>> counts[3]
7
答案 1 :(得分:2)
您希望获取长度列表(1,2,3,4,...字符)以及文件中出现此长度的单词数。
所以直到L = text.split()
这是一个很好的方法。现在看看Python中的词典,它将允许您存储上面提到的数据结构并迭代文件中的单词列表。只是一个暗示...
答案 2 :(得分:1)
您对此有何看法
if item == 1:
在这里
L.count(item)
实际发生了什么?使用调试器并查看变量值或只将它们打印到屏幕上。
答案 3 :(得分:0)
让我们一步一步地分析您的问题。
你需要:
N
N
您已经完成了第1步:
def many(fname):
infile = open(fname,'r')
text = infile.read()
infile.close()
L = text.split()
然后你(尝试)对单词进行排序,但它没用。你会按字母数字对它们进行排序,因此对你的任务没用。
相反,我们定义一个Python dictionary来保存单词数
lengths = dict()
@sukhbir在评论中正确地建议使用Counter类,我鼓励你去搜索它,但我会在这个例子中坚持使用传统词典,因为我觉得熟悉基础知识非常重要在探索图书馆之前的语言。
让我们继续第2步:
for word in L:
length = len(word)
对于列表中的每个单词,我们为变量length
分配当前单词的长度。让我们检查一下计数器是否已经有一个我们长度的插槽:
if length not in lengths:
lengths[length] = 0
如果没有遇到长度为length
的单词,我们会分配该插槽并将其设置为零。我们终于可以执行第3步:
lengths[length] += 1
最后,我们增加了当前长度为1个单位的单词计数器。
在功能结束时,您会发现lengths
将包含字长的地图 - >这个长度的单词数。让我们通过打印其内容来验证(步骤4):
for length, counter in lengths.items():
print "Words of length %d: %d" % (length, counter)
如果您复制并粘贴我写的代码(尊重缩进!!),您将获得所需的答案。
我强烈建议您浏览Python tutorial。
答案 4 :(得分:0)
正则表达式库可能也有帮助,如果有点矫枉过正。匹配re的简单单词可能类似于:
import re
f = open("sample.txt")
text = f.read()
words = re.findall("\w+", text)
单词是......单词的列表:)
然而,这不会恰当地匹配像'不是'和'我'这样的词,因为\ w只匹配字母数字。本着家庭作业的精神,我想我会留给感兴趣的读者,但是Python Regular Expression文档作为一个开端非常好。
然后我按长度计算这些单词的方法就像:
occurrence = dict()
for word in words:
try:
occurrence[len(word)] = occurrence[len(word)] + 1
except KeyError:
occurrence[len(word)] = 1
print occurrence.items()
使用字典(出现)来存储单词长度及其在文本中的出现次数。 try:和except:关键字处理我们第一次尝试在字典中存储特定长度的单词时,在这种情况下,字典不满意被要求检索它不知道的内容,以及除外:获取作为结果抛出的异常并存储该长度的单词的第一次出现。最后一行打印字典中的所有内容。
希望这会有所帮助:)
答案 5 :(得分:0)
也许这个:
>>> s
'This is a test file. How many words are of length one? How many words are of length three? We should figure it out! Can a function do this?'
>>> {x:[len([c for c in w ]) for w in s.split()].count(x) for x in [len([c for c in w ]) for w in s.split()] }
{1: 2, 2: 6, 3: 5, 4: 6, 5: 4, 6: 5, 8: 1}