如何更正这一点,以便我的字典读取单词的长度=单词长度重复的次数?参数是一个文件。
def wordLengths(fileName):
d = {}
f = open(fileName)
filename.close()
for line in f:
for word in line:
if len(word) not in d:
d[len(word)] = count.len(word)
return(d)
答案 0 :(得分:1)
你走在正确的轨道上,但是你犯了一些错误。让我们逐行看一下。
def wordLengths(fileName):
d = {}
f = open(fileName)
到目前为止,这么好
filename.close()
你无法关闭文件名 - 它只是一个字符串。您只能关闭文件对象,例如f
。此外,filename
和fileName
不是一回事;资本化计数。此外,关闭文件还为时过早 - 您希望在阅读完所有行后执行此操作,否则您将无法阅读任何内容。因此,请废弃此行,并在f.close()
之前添加return
。 (with
语句甚至更好,但你可能还没有学过这些语句。)
for line in f:
for word in line:
当你循环一个字符串时,你遍历字符串中的每个字符,而不是每个字。如果你想要单词,你必须拨打line.split()
。
if len(word) not in d:
d[len(word)] = count.len(word)
关闭,但不对。你想要的是:如果长度不在字典中,则存储1;否则,将1添加到已存在的内容中。你写的是:如果长度不存在,则存储长度(使用一些不存在的对象);否则,什么也不做。所以:
if len(word) not in d:
d[len(word)] = 1
else:
d[len(word)] += 1
return(d)
那个很好(但记住它上面的f.close()
)。但是,写return d
更为惯用。
还有一条评论:你应该与你的缩进一致:总是缩进4个空格,而不是随意混合1,4和7个空格。它使您的代码更容易阅读 - 特别是在Python中,缩进错误可能会改变代码的含义,并且当每个缩进级别不一致时很难发现。