Python Class / 总是 return 0

Python Class / always return 0

我创建了一个名为 bootcamp 的 class,允许用户添加已完成的任务,查看他们应该完成的所有任务,并检查他们未完成的任务。问题是我已经创建了一个算法来检查进度百分比,我将完成列表的长度除以总任务列表的长度。我最初认为它不会记录更改,因为它总是 return 为零,但在使用其他操作数(例如 + 和 *)进行测试后,它运行良好。为什么除法总是return0?共享代码将有助于理解我的问题:

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 除以另一个 int,这就是麻烦所在。 Python 在这种情况下执行整数除法,并且您试图将一个较小的整数除以一个较大的整数,当然您应该几乎总是得到 0(除非整数相等)

float替换int,像这样

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

问题应该解决了