" ZeroDivisionError:除以零"

时间:2017-03-07 16:51:51

标签: python class python-3.6

我是一名使用Python3.6的初学者,我不知道为什么我的代码无法正常工作。非常感谢您的反馈/帮助。

我对DriveTo功能的说明如下:

现在,添加Car方法driveTo。它应该采取两个附加参数,即汽车试图移动的位置的x和y坐标。如果汽车有足够的气体来进行行程,应该移动汽车,应该更新剩余的汽油量,并且该方法应该返回True。如果汽车没有足够的汽油,则根本不应该移动或改变,并且该方法应返回False

这是我目前的代码:

import math 

class Car:
    def __init__( self , mpg , fuel , money ):
        self.mpg = mpg
        self.fuel = fuel
        self.money = money

    #return current location of car in two element list
    def getLocation( self ):
        return [ self.x , self.y ]

    #returns the number of gallons left in the car 
    def getGas( self ):
        self.fuel -= 1
        return self.fuel

    #returns how much gas the car needs to be at capacity 
    def getToFill( self ):
        current_tank =  self.getGas() 
        gas_needed = ( self.fuel - current_tank )
        return gas_needed

    #return true or false if enough gas
    def driveTo( self , x , y ):
        self.x = x
        self.y = y
        miles_pg = (self.mpg / self.getToFill())
        miles = math.sqrt( ( self.x - x )**2 + ( self.y - y )**2 )



        if miles >= miles_pg:
            return True
        else:
            return False

5 个答案:

答案 0 :(得分:2)

您的主题表示您正在通过零错误进行除法。我只在你的代码中看到一个除法运算(虽然可能有其他间接运算):

miles_pg = (self.mpg / self.getToFill())

如果self.getToFill()返回0,您将获得ZeroDivisionError。我不知道,当没有气体填充时究竟应该发生什么。但你需要处理它。

答案 1 :(得分:1)

getToFill()中,您返回gas-needed,等于self.fuel - current_tank。在current_tank中定义了getGas(),其返回self.fuel,因此gas_needed = 0。

所以miles_pg = (self.mpg / self.getToFill())会返回错误,因为getToFill()会返回0.

答案 2 :(得分:1)

是否可以为输出日志提供错误消息。看起来在某些时候你的getToFill()方法返回零。一个快速的解决方案是在miles_pg = (self.mpg / self.getToFill())之前检查它是否没有返回零。

答案 3 :(得分:1)

在driveTo()中,只有一行代码执行除法操作:

miles_pg = (self.mpg / self.getToFill())

如果您希望从不抛出错误,您需要捕获并处理该异常,或确保getToFill()函数永远不会返回值0.

正如一般性评论一样,我并不知道这个课程的功能或要求是什么,但从我的角度来看,大多数这些功能并不具备逻辑意义。就像为什么getGas()函数从燃料值中减去一加仑?那个函数试图模拟什么?看看函数上面的评论,我认为它应该只返回燃料的价值,而不是别的。

此外,你在做什么来计算driveTo()中的剩余燃油里程?这对我来说没有任何数学意义。如果我有一辆汽车的MPG和总加仑燃料,我会像这样计算剩余的燃油里程:

miles_left_until_out_of_fuel = self.mpg * self.fuel

想一想,如果我的坦克中剩下2加仑,我知道我的车得到20 MPG,那么我将有2 * 20 = 40英里,直到我的燃油耗尽。

答案 4 :(得分:0)

你不会检查是否有气体残留。

因此,如果{ "pseudoStations":[ { "id": 0, "name": "London" }, { "id": 1, "name": "Nottingham" } ] } 返回0,那么getToFill()会产生self.mpg / gas

ZeroDivisionError: division by zero