此程序的目的是读入文件,将所有单词更改为单个标记,并将这些标记放入数组中。程序然后删除所有标点符号并将所有字母更改为小写。然后程序应该计算每个命令行参数在数组中出现的次数,并打印结果。我的程序能够成功创建一个depunctuated,小写令牌数组。我现在的问题是如何遍历数组并计算特定单词的出现次数,以及如何在main函数中调用这些函数。我的depunctuate函数按书面形式工作
这是我的计划:
import sys
from scanner import *
def main():
print("the name of the program is",sys.argv[0])
for i in range(1,len(sys.argv),1):
print(" argument",i,"is", sys.argv[i])
tokens = readTokens("text.txt")
cleanTokens = depunctuateTokens(tokens)
words = [token.lower() for token in cleanTokens]
count = find(words)
print(words)
print(count)
def readTokens(s):
arr=[]
s=Scanner("text.txt")
token=s.readtoken()
while (token != ""):
arr.append(token)
token=s.readtoken()
s.close()
return arr
def depunctuateTokens(arr):
result=[]
for i in range(0,len(arr),1):
string=arr[i]
cleaned=""
punctuation="""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
for i in range(0,len(string),1):
if string[i] not in punctuation:
cleaned += string[i]
result.append(cleaned)
return result
def find(tokens,words):
return occurences(tokens,words)>0
def occurences(tokens,words):
count = 0
for i in range(0,len(words),1):
if (words[i] == tokens):
count += 1
return count
main()
答案 0 :(得分:2)
使用list.count
。
>>> l = [1,2,3,4,5,6,7,44,4,4,4,4]
>>> print(l.count(4))
>>> 5
答案 1 :(得分:0)
您现有的功能并不太远:
def occurences(tokens,words):
count = 0
for i in range(0,len(words),1):
if (words[i] == tokens):
count += 1
return count
第一个问题是你在return count
循环中缩进了for
。这意味着每次循环都会return
,这意味着它只会处理第一个单词。因此,如果第一个单词匹配则返回1,否则返回0。只是return
并且那个问题消失了。
第二个问题是,根据参数的名称判断,您期望tokens
和words
都是字符串列表。因此,单个单词words[i]
永远不会匹配整个令牌列表。也许您想测试该单词是否与列表中的任何标记相匹配,而不是它是否与列表匹配?在这种情况下,你会写:
if words[i] in tokens:
最后,虽然您的find
函数似乎正确地调用了occurences
(好吧,你拼写occurrences
错了,但是你这样做了一致,所以没关系),你实际上并没有正确地打电话给find
,所以你永远不会到这里来。您的电话如下:
count = find(words)
...但你的定义是这样的:
def find(tokens,words):
您必须将某些内容传递给该tokens
参数。我不确定要传递什么 - 但你是设计和编写此代码的人;你为这个函数写了什么?
我怀疑你真正寻找的是每个令牌的数量。在这种情况下,根据您的设计,find
和occurrences
实际上应该只使用一个token
,而不是tokens
列表作为参数。在这种情况下,您不想要上面的in
表达式,您想要重命名参数。并且您对[{1}}没有用处,您只想直接致电find
。你想在循环中调用它,如下所示:
occurences
而且,就像你的其他两个函数正在复制已经内置的函数(for word in words:
count = occurences(word, words)
print('{}: {}'.format(word, count))
和str.translate
)一样,这个函数也是:lower
。如果您是出于学习目的而自己编写的,那很好,但如果这不是作业的一部分,只需使用内置函数。