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))
问题应该解决了
我创建了一个名为 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))
问题应该解决了