我是一名使用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
答案 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