2011-09-27 227 views
-1

addCompnent()方法的“Component”参数是组件类的一个实例。简而言之,Component有2个参数; “Component(self,name,methodCount)”正如你在我的代码中看到的,我将每个Component添加到列表中。我在validCount()中需要做的是返回methodCount!= 0的组件数。从我目前的validCount()总是返回4,我不知道为什么。我已经调试过了,仍然没有看到4是从哪里来的;特别是当我初始化为0时。你能指出我做错了什么吗?我已经尝试过统计有0个methodCounts且没有0个methodCounts的组件,但是这两个数字都无法正确返回。整个课程共有三个班,但这只是我遇到的一个难题。 (如果需要我可以发布完整的鳕鱼):需要帮助完成python程序

class Effort(Component): 

    addedComponents = [] 
    componentCounter = 0 
    validCounter = 0 

    def __init__ (self): 
     return None 

    def addComponent(self, Component): 
     try: 
      if (self.addedComponents.count(Component) != 0): 
       raise ValueError 
      else: 
       self.addedComponents.append(Component) 
       self.componentCounter = self.componentCounter + 1 
       return self.componentCounter 
     except ValueError: 
      raise ValueError("Duplicate component") 

    def count(self): 
     return self.componentCounter 


    def validCount(self): 
     if (len(self.addedComponents) == 0): 
      return self.validCounter 
     else: 
      for i in self.addedComponents: 
       if (i.getMethodCount() == 0): 
        pass 
       else: 
        self.validCounter = self.validCounter + 1 
      return self.validCounter 
+5

请问一个具体的问题。你究竟在干什么? –

+1

你能指定你需要什么帮助吗?你在哪一部分? – Raptor

+2

我自己的'estimate_effort()'告诉我你应该更加努力地提出这个问题。我不会放弃投票,但是请删除dropbox链接,而是解释你想要达到的*在你遇到问题的部分*,你遇到了什么问题,你咨询了哪些文献等。基本上证明你把至少尽可能多的努力来探索问题,因为你期望社群能够回答你。 – patrys

回答

4

一些意见。

  1. 评论你的代码。特别是当你有错误时,辨别你的代码应该做什么对于外人来说可能是困难的。

  2. 将addComponent的“Component”参数大写为坏形式。使用大写字母表示类名,小写字母表示参数名。这段代码读起来就像你试图将类类型添加到addedComponents中,而不是该类的一个实例。

  3. is validCounter应该是一个用于Effort或实例变量的类变量吗?如果它是一个实例变量,则将其初始化放在init中。如果它是一个类变量,请将其称为Effort.validCounter,而不是self.validCounter。 addedComponents和componentCounter相同。

  4. 是否validCount应该增加每个调用或返回与方法addedComponents的数量?假设后者,你不需要一个实例变量。无论哪种方式,您可能都希望在for循环之前将validCounter重新初始化为0。

+0

ccoakley - 谢谢你回答我的问题。我一遍又一遍地看了一遍,发现这是问题所在,并且已经改变了你在3和4中所提出的观点。实际上我回过头来发表评论,让大家都知道我明白了。我知道我的代码看起来不像我应该做的那样高效,我只是开始学习Python的东西。 – user965402

+0

效率不是最大的问题。但是你会发现有些惯例会经常被遵循,并且这会影响代码中隐含的语义。当违反这些约定时,其他程序员会感到困惑,即使实际的语义(由python解释)可能没有改变。既然你只是在学习,你还不知道约定。用额外的评论来补偿这一点。如果你回头看你自己的代码,你可能会发现,从现在开始你会感激一年。 – ccoakley