コード例 #1
0
    def deliver_package(self, package, address_street, address_distance, packages):
        """
            Deliver package, adjust the truck's time and mileage, and record package statuses
                Check package delivery status attribute to make sure it is 'In Transit"
                Remove package from truck's 'packages_on_truck' list and Decrement 'number_of_packages' on truck by 1
                Calculate the distance needed to travel to deliver package - calculate_travel_distance()
                Add distance needed to travel to truck's total mileage
                Calculate the time needed to travel distance - calculate_travel_time()
                Record deliver time by setting package.actual_delivery_time to current time
                Display package id, destination address, distance, travel time and truck num to console
                Change truck's location to the destination addresses's location code
                Update package's status to show its been delivered (3 = "Delivered")
                Add snapshot of the status of all packages to status_log - Helper.add_to_status_log()
        """
        # ensure package is not at the hub
        if package.delivery_status == "In transit":
            # remove package from truck
            self.packages_on_truck.remove(package)

            # decrease truck's package count
            self.num_of_packages -= 1

            # calculate travel distance
            distance = self.calculate_travel_distance(package.address, address_street, address_distance)

            # updates truck's total mileage
            self.miles_traveled = float('%.1f' % (self.miles_traveled + distance))

            # calculate travel time
            travel_time = self.calculate_travel_time(distance)

            # update trucks time to delivery time
            self.clock += timedelta(minutes=travel_time)

            # set package's delivery time
            package.actual_delivery_time = self.clock.strftime("%-I:%M:%S")

            print("\n\n DESTINATION: " + package.address +
                  " DISTANCE: " + str(distance) + " miles " +
                  " TRAVEL TIME: " + str(travel_time) + " minutes")

            print("Package " + package.ID + " delivered and unloaded from [ TRUCK " + str(self.truck_number) + " ] at "
                  + str(package.actual_delivery_time))

            # Change truck's current location
            self.current_location = address_street[package.address]

            # change package's delivery status to 'delivered'
            package.set_delivery_status(3)

            # set Helper.clock time
            Helper.clock = self.clock

            Helper.add_to_status_log(self.clock, packages)
        else:
            print("\n   Package " + package.ID + " is not on truck " + str(self.truck_number))