Python类/总是返回0

问题描述:

我创建了一个名为bootcamp的类,它允许用户添加完成的任务,查看他们应该执行的所有任务,并检查未完成的任务。问题是我创建了一个算法来检查进度的百分比,我把完成列表的长度分配到总任务列表的长度上。我最初认为它没有记录这些变化,因为它总是返回零,但在用其他操作数(例如+和*)测试之后,它运行良好。为什么师总是返回0?共享代码将有助于了解我的问题:Python类/总是返回0

class Bootcamp(object): 
    tasks = {1: "TDD", 2: "OOP", 3: "Programming Logic", 4: "Version 
      Control", 5: "Agile Methodology", 
         6: "Growth Mindset", 7: "Asking Questions", 8: 
        "Motivation and Commitment", 9: "Speaking"} 
    def __init__(self, name, tasks=tasks): 
     self.name = name 
     self.tasks = tasks 
     self.completed = [] 
     self.incompleted = tasks.values() 

    def add_completed_items(self, i): 
     if i in self.tasks.keys(): 
      self.completed.append(self.tasks[i]) 
      self.incompleted.remove(self.tasks[i]) 
      return "tasks added to complete" 
     else: 
      return "not in the tasks" 


nick = Bootcamp("nick") 
total_work = int(len(nick.tasks)) 
print nick.add_completed_items(1) 
print nick.add_completed_items(2) 
print nick.add_completed_items(3) 
comleted_work = int(len(nick.completed)) 
progress = (comleted_work/total_work) * 100 
print nick.incompleted` 
print progress` 

我认为这很简单。你试图用另一个整数除int,那就是麻烦。 Python的执行整数除法在这种情况下,你试图通过一个较大的分化较小INT,你当然应该得到0几乎总是(除非该整数相等)

float小号更换int S,像这

total_work = float(len(nick.tasks)) 
... 
comleted_work = float(len(nick.completed)) 

,问题应该得到解决

+0

它的工作.....它给了我很多头痛的,因为我认为我的方法是行不通的。现在我可以在课堂上实现它 – Nix

+0

稍微好一点的解决方案:通过将'from __future__ import division'添加到文件顶部,移至Py3样式分区。然后'/'会产生浮点结果。如果你想划分楼层,你可以使用''''明确选择。 – ShadowRanger