Python浮点除零错误。我找不到任何错误。有人能修好吗?我在Odoo版本10中使用了这个代码。我尝试了一些其他的方法,但不起作用。希望对其他人也有帮助。你知道吗
class etq_results(models.Model):
_name = "etq.result"
_description = "Exam Result"
exam_id = fields.Many2one('etq.exam', string="Exam", readonly=True)
user_id = fields.Many2one('student.student',"Exam candidate / Student", translate=True)
score = fields.Float(string="Score", compute="_compute_score", store=True)
results = fields.One2many('etq.result.question', 'result_id', string="Results", readonly=True)
token = fields.Char(string="Token")
state = fields.Selection([('incomplete','Incomplete'), ('complete','Complete')], string="State")
@api.one
@api.depends('results')
def _compute_score(self):
num_questions = self.env['etq.result.question'].search_count([('result_id', '=', self.id)])
correct_questions = self.env['etq.result.question'].search_count([('result_id', '=', self.id), ('correct', '=', True)])
# raise UserError(_(float(num_questions)))
if float(num_questions) and float(correct_questions) is None:
self.score = 0.0
else:
self.score = float(correct_questions) + "/" + float(num_questions) + " " + (float(correct_questions) / float(num_questions)) * 100.0 + "%"
我认为你的
if
测试要做的是:换句话说,如果
float(num_questions)
为零,因此为false,则您希望跳过包含/ float(num_questions)
的代码,这将是非法的。这里是什么并不重要。毕竟,除0 / 3
不是除零,这很好。你知道吗你实际上写的是一个完全不同的测试:
你在测试
float(num_questions)
是真实的,与你想要的正好相反,而且float(correct_questions) is None
-这永远不会是真实的,因为只有None is None
。所以,你总是会碰到else
。因此,如果num_questions
的值为零,就得到一个被零除的数。你知道吗你尝试的修复也没什么区别:
你在测试
num_questions
是真实的,这仍然是你想要的相反,或者correct_questions
是0。第一部分可以是假的唯一方法是如果没有问题,在这种情况下没有正确的问题,所以第二部分将是真的。所以现在,你总是点击if
并且总是显示0.0
。你知道吗如果你克服了这一点,你还有另一个问题:
你在尝试添加浮点数和字符串。那是违法的。您可能需要的是字符串格式,如下所示:
或者,如果您使用的是较旧版本的Python:
您可能希望您的
if
子句匹配相同的格式,而不是只显示0.0
?你知道吗当我们这样做的时候,一遍又一遍地调用
float(correct_questions)
会使代码更难阅读(而且速度有点慢,但这可能无关紧要)。为什么不调用一次并存储结果呢?你知道吗还有,这些真的是浮点数而不是整数吗?来自数据库计数操作的
num_questions
肯定是一个整数,对吧?你知道吗所以,综合起来:
相关问题 更多 >
编程相关推荐