2012-02-25 738 views
5

我是Python和Django的新手,我从教程中修改了这段代码。当我加载页面时,我得到TypeError: count() takes exactly one argument (0 given)。我一直在排除故障和谷歌搜索,似乎无法弄清楚。我究竟做错了什么?TypeError:count()只需要一个参数

def report(request): 
    flashcard_list = [] 
    for flashcard in Flashcard.objects.all(): 
     flashcard_dict = {} 
     flashcard_dict['list_object'] = flashcard_list 
     flashcard_dict['words_count'] = flashcard_list.count() 
     flashcard_dict['words_known'] = flashcard_list.filter(known=Yes).count() 
     flashcard_dict['percent_known'] = int(float(flashcard_dict['words_known'])/ flashcard_dict['words_count'] * 100) 
     flashcard_list.append(flashcard_dict) 
    return render_to_response('report.html', { 'flashcard_list': flashcard_list }) 
+1

如果这些答案的帮助,请给予好评,并请接受一个可以帮助你最。 – 2012-02-26 15:53:34

回答

0

您需要提供一些参数给count(x)

It returns the number of times x appears in the list.

>>> mylist = [1,2,3,2] 
>>> mylist.count(2) 
2 
>>> mylist.count() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: count() takes exactly one argument (0 given) 
>>> 

这是很难理解你想实现你的flashcard_list列表是空的。所以在拨打count之前,您需要在列表中添加一些内容。

10

count需要参数。它返回列表中特定项目的实例数量。

>>> l = range(10) + range(10) 
>>> l.count(5) 
2 

2这里是5 S IN列表中的号码。如果你想要一个列表的长度,使用len

>>> len(l) 
20 
0
alist = [] 
alist.append('a') 
alist.count('a') 
1 

这将统计所有的 'a' 在列表中。

2

这是不是很清楚你在这里试图做什么。 flashcard_list是您在循环之前定义的(空)列表。调用Django查询集函数(如countfilter)是没有意义的(有一个名为count的列表方法,但是如错误所述,它接受一个参数并计算在列表中找到参数的次数)。

您是不是想要用flashcard.count()代替?这仍然没有意义,因为flashcard是单个Flashcard实例,而不是查询集。你需要更准确地解释你希望做的事情。评论右后

编辑,所以我认为这个问题是你要做到这一切在一个循环中,通过每个迭代抽认卡,出于某种原因。事实上,我认为你根本不需要这个循环。像这样的东西会更好:

def report(request): 
    flashcard_dict = {} 
    flashcards = Flashcard.objects.all(): 
    flashcard_dict['list_object'] = flashcards 
    flashcard_dict['words_count'] = flashcards.count() 
    flashcard_dict['words_known'] = flashcards.filter(known=True).count() 
    flashcard_dict['percent_known'] = int(float(flashcard_dict['words_known'])/ flashcard_dict['words_count'] * 100) 
    return render_to_response('report.html', flashcard_dict) 

在这里,你可以看到你在所有卡片的queryset的工作,而不是一个空的列表。而你正在建立一个字典,而不是字典的列表,并且该字典本身成为模板上下文 - 所以在模板中,你可以参考{{ words_count }}

+0

对不起,我认为你正在帮助我走上正轨。整个问题的关键在于获取卡片总数以及标记为“已知”的卡片总数,以便我可以获得已知总数的百分比。 – Alex 2012-02-25 21:46:27

0

count方法是不是你所期待的对于。在Python列表中,list.count(x)告诉您在list中有多少次出现x。你想要len(flashcard_list)。函数len是一个内置函数,它会告诉你许多Python对象类型的长度。

0

列表的count方法计算的次数,x出现在名单上的量。查看文档here

如果你想知道在列表中的项目需要使用len()

>>> a = ['a', 'b', 'c'] 
>>> print len(a) 
3 
2

count()发现发生在列表中的项目,因此需要该项目作为参数的次数的数量。我认为你在寻找列表中的项目数量。对于这种使用len()count()

flashcard_dict['words_count'] = len(flashcard_list) 
flashcard_dict['words_known'] = len(flashcard_list.filter(known=Yes)) 

count()一个例子是

flashcard_dict['dog_count'] =flashcard_list.count('dog') 
相关问题