2017-03-07 56 views
0

我是一名初學者,使用Python3.6,我不知道爲什麼我的代碼無法正常工作。非常感謝您的反饋/幫助。是「ZeroDivisionError:除零」

我對DriveTo功能說明如下:

現在,添加一個汽車方法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

您可以添加如何測試代碼 – Vallentin

+1

您可以指定哪條線發生錯誤? –

+0

將整個堆棧跟蹤放入問題中。它會向您(和我們)顯示您的錯誤發生的確切位置,然後可以向後追溯這些值以查看錯誤發生的位置。 – skrrgwasme

回答

1

getToFill()返回gas-needed,這是等於self.fuel - current_tankcurrent_tank GET在getGas()定義,它返回self.fuel,從而gas_needed = 0

所以miles_pg = (self.mpg/self.getToFill())返回錯誤,因爲getToFill()返回0

0

你不檢查是否有留下任何氣體。

因此,如果getToFill()返回0,則self.mpg/gas結果爲ZeroDivisionError: division by zero

def driveTo(self , x , y): 
    self.x = x 
    self.y = y 
    gas = self.getToFill() 
    if gas <= 0: 
     # No more gas 
     return False 
    miles_pg = (self.mpg/gas) 
    miles = math.sqrt((self.x - x)**2 + (self.y - y)**2) 
+0

我試過這個,但它仍然說」ZeroDivisionError:零除「。 –

+0

@mafertes那是不可能的。我也在發佈之前對其進行了測試,驗證它是否有效。 – Vallentin

+0

你是對的!它有效,但不幸的是它仍然不正確。顯然,測試沒有通過,測試過程中我的車在距離預期位置超過.001英里或更遠的地方。 –

1

您可以提供帶有錯誤消息的輸出日誌。它看起來在某些時候你的getToFill()方法返回零。一個快速的解決方案是在你做miles_pg = (self.mpg/self.getToFill())之前檢查它是否返回零。

+0

我很樂意爲你提供,但我不知道如何。 –

+0

首先嚐試檢查'''getToFill()'''返回的值是否爲零。如果它爲零,則執行其他操作,即拋出異常或返回。 –

+0

你說得對,getToFill()總是返回0。 –

2

你的主題說你得到一個除零誤差的分割。我只看到一個除法運算在你的代碼(雖然可能有其他間接的):

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

如果self.getToFill()返回0,你將得到ZeroDivisionError。當沒有氣體填充時究竟應該發生什麼,我不知道。但你需要處理它。

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英里,直到我耗盡燃料。