2017-05-06 1 views
0

Hallo Ich bin ganz neu in der Objektorientierung und kann nicht herausfinden, was ich hier falsch mache. Das Problem ist mit dem Geldbetrag, den das Taxi-Objekt hat, alles andere funktioniert scheinbar korrekt.Meilen berechnen mit (x, y) in Objektorientierung Python

Dies ist mein aktueller Code:

class Car() 
def __init__(self , mpg=15 , capacity=20 , money=25): 
#set tank capacity to max and miles is 0 
    self.mpg = mpg 
    self.fuel = capacity 
    self.money = money 
    self.capacity = capacity 
    self.x = 0 
    self.y = 0 
    self.curr_x = 0 
    self.curr_y = 0 
    self.passenger = False 

def driveTo(self , x , y): 
    miles = math.sqrt((self.x - x)**2 + (self.y - y)**2) 
    maxdistance = self.mpg * self.fuel 

    if maxdistance < miles: 
     return False 
    else: 
     self.x = x 
     self.y = y 
     self.fuel -= (miles/self.mpg) 
     return True 

class Taxi(Car): 

def pickup(self): 
    if self.passenger == False: 
     self.passenger = True 
     self.curr_x = self.x 
     self.curr_y = self.y 
     return True 
    else: 
     False 

def dropoff(self): 
    if self.passenger == True: 
     dist = (self.x - self.curr_x)**2 + (self.y - self.curr_y)**2) 
     if dist == 0: 
      self.money += 2 
     else: 
      self.money += (2+(3*int(dist))) 
     self.passenger = False 
     return True 
    else: 
     return False 

Die Taxi-Klasse gibt falsche zur Abholung, wenn ein Passagier in einem Auto ist und gibt false für Drop-off, wenn ein Passagier nicht im Auto ist. Nach dem Ablegen wird das Taxi mit $ 2 für die Abholung und $ 3 pro Meile mit dem Passagier bezahlt. Wenn der Passagier abgeholt wird, sollte das Taxi die Meilen verfolgen, die es während der Beförderung eines Passagiers zurücklegt.

Standort Arbeit durch ein Paar Koordinaten --- das y beschreibt, wie viele Meilen nach Norden oder Süden ein Auto von seinem Ursprung sitzt und das x beschreibt, wie viele Meilen nach Osten oder Westen.

Ich kann nicht meinen Kopf um, wie man dies beheben, so dass jede Hilfe sehr geschätzt wird! Lassen Sie mich wissen, wenn etwas unklar ist, da ich neu auf dieser Seite bin :)

+1

Sie sollten in https://stackoverflow.com/help/mcve nachsehen, damit wir nicht Ihren gesamten Code durchlesen müssen, um zu finden, was wir reparieren müssen. Stellen Sie auch einige Beispiele für Eingaben bereit. –

+1

Vergessen Sie nicht, die Einrückung richtig zu machen; Funktionen, die zu einer Klasse gehören, sollten eine Einrückungsebene größer als die Klasse selbst haben. –

+0

Ich weiß nicht, was genau dein Problem ist, vielleicht solltest du genauer sein. Eine Sache, die ich sehe, ist mit der Zeile 'self.money + = (2+ (3 * int (dist)))' würde Sie keine Cent bekommen, es sei denn, Sie wollen nicht Cent berechnen. Aber das wäre nicht sehr realistisch. Wenn Sie mit Fließkommawerten arbeiten würden, müssten Sie auch kein Casting durchführen. –

Antwort

0

Das Problem ist eine mathematische. Bei der Berechnung der Entfernung in Ihrer dropoff Methode vergessen Sie einfach die Quadratwurzeloperation. Ändern

dist = (self.x - self.curr_x)**2 + (self.y - self.curr_y)**2 

zu

dist = math.sqrt((self.x - self.curr_x)**2 + (self.y - self.curr_y)**2) 

in dropoff und das Geld aussehen wird gesund.

Verwandte Themen