from math import ceil def data_to_package(package_data): """ 输入{"包裹1": {"宽": 20.0, "长": 200.0, "高": 20.0, "重量": 7500}, "包裹2": {"宽": 15.0, "长": 150.0, "高": 15.0, "重量": 5000}} 返回一个packages对象 """ packages = Package_group() for name, data in package_data.items(): package = Package(name, data["长"],data["宽"], data["高"], data["重量"]) packages.add_package(package) return packages class Package: def __init__(self,name, length, width, height, weight): self.length = length self.width = width self.height = height self.weight = weight self.name = name sizes = sorted([self.length, self.width, self.height]) self.fst_size = sizes[2] self.sed_size = sizes[1] self.trd_size = sizes[0] self.girth = (self.sed_size + self.trd_size) * 2 + self.fst_size self.volume = self.length * self.width * self.height self.size_sum = self.fst_size + self.sed_size + self.trd_size # 三边和 self.density = ceil(self.weight / self.volume * 1000) self.fst_inch = self.fst_size * 0.3937 self.sed_inch = self.sed_size * 0.3937 self.trd_inch = self.trd_size * 0.3937 self.girth_inch = self.girth * 0.3937 self.volume_inch = self.fst_inch *self.sed_inch*self.trd_inch self.lbs_weight = self.weight/1000 * 2.2046 def get_volume_weight(self, volume_weight_ratio): volume_weight = (self.length * self.width * self.height) / volume_weight_ratio return volume_weight def __repr__(self): result = "{" result += f"\"长\":{self.length}, \"宽\"{self.width}, \"高\"{self.height}, \"重量\"{self.weight}" result +="}" return result class PackageLogistics(Package): def __init__(self, length, width, height, weight,convey,company): super().__init__(length,width,height,weight) self.company = company self.convey = convey class Package_group: def __init__(self, packages=None): self.packages = packages if packages else [] self.volume_weight_key = None # 用于存储体积重系数的键 self.density = self.density() def add_package(self, package): self.packages.append(package) # 设置体积重系数的键 def set_volume_weight_key(self, key): self.volume_weight_key = key def total_volume_weight(self): total_volume_weight = 0 for package in self.packages: if self.volume_weight_key: # 如果设置了体积重系数的键 volume_weight = package[self.volume_weight_key] total_volume_weight += volume_weight return total_volume_weight def density(self): volume = 0 weight = 0 density = 0 for package in self.packages: volume += package.length * package.width * package.height weight += package.weight density = ceil(weight / volume * 1000) return density def __iter__(self): return iter(self.packages) def __len__(self): return len(self.packages) def __repr__(self): result = "{" i=1 for package in self.packages: result +=f"\"包裹{i}\": {package.__repr__()}" i+=1 if i>len(self.packages): break result += "," result += "}" return result