class Flight(): # Flight Class (MAIN)
def __init__(self, airlineName, departureAirport, arrivalAirport): # Constructor Method
self.airlineName: str # Declaring attributes & Setting Types
self.departureAirport: str # Declaring attributes & Setting Types
self.arrivalAirport: str # Declaring attributes & Setting Types
def setAirlineName(self, airlineName): # Mutator Method
self.airlineName = airlineName
def getAirlineName(self): # Accessor Method
if len(self.airlineName) > 0: # Error Checking
return self.airlineName
else:
return "No airline name set"
def setDepartureAirport(self, departureAirport): # Mutator Method
self.departureAirport = departureAirport
def getDepartureAirport(self): # Accessor Method
if len(self.departureAirport) > 0: # Error Checking
return self.departureAirport
else:
return "No departure airport set"
def setArrivalAirport(self, arrivalAirport): # Mutator Method
self.arrivalAirport = arrivalAirport
def getArrivalAirport(self): # Accessor Method
if len(self.arrivalAirport) > 0: # Error Checking
return self.arrivalAirport
else:
return "No arrival airport set"
def __eq__(self, otherFlight):
return (self.airlineName == otherFlight.airlineName)
def __str__(self): # Overiding Method
return "\n==================================================\n++++++++++++++++++ Flight Info ++++++++++++++++++\n==================================================\nAirline Name: " + self.airlineName + "\Departure Airport: " + self.departureAirport + "\nArrival Airport: " + self.arrivalAirport
class PassengerFlight(Flight): # PassengerFlight Class (EXTENDS MAIN)
def __init__(self, airlineName, departureAirport, arrivalAirport, passengerList, flightType, baggageWeight): # Constructor Method
super().__init__(airlineName, departureAirport, arrivalAirport)
self.passengerList: list # Declaring attributes & Setting Types
self.flightType: str # Declaring attributes & Setting Types
self.baggageWeight: float # Declaring attributes & Setting Types
def setPassengerName(self, passengerList): # Mutator Method
self.passengerList = passengerList
def getPassengerName(self): # Accessor Method
if len(self.passengerList) > 0: # Error Checking
return self.passengerList
else:
return "Passenger List Not Set"
def setFlightType(self, flightType): # Mutator Method
self.flightType = flightType
def getFlightType(self): # Accessor Method
if len(self.flightType) > 0: # Error Checking
return self.flightType
else:
return "No Flight Type Set"
def setBaggageWeight(self): # Mutator Method
baggageWeight = 0
for i in range(len(self.passengerList)): # Iterates through passenger list
baggageWeight += 50.00 # For each passenger in the list add 50KG to baggage variable
self.baggageWeight = baggageWeight # Set our attribute equal to the variable
def getBaggageWeight(self): # Accessor Method
if self.baggageWeight == 0:
return "No Baggage Weight Set"
else:
return self.baggageWeight
def __str__(self): # Overiding Method
return super().__str__() + "\nPassenger Names: " + str(self.getPassengerName()) + "\nFlight Type: " + self.flightType + "\nBaggage Weight: " + str(self.baggageWeight) + '(KG) \n==================================================\n'
class CargoFlight(Flight): # CargoFlight Class (EXTENDS MAIN)
def __init__(self, airlineName, departureAirport, arrivalAirport, cargoType, cargoWeight, liveAnimals): # Constructor Method
super().__init__(airlineName, departureAirport, arrivalAirport)
self.cargoType: str # Declaring attributes & Setting Types
self.cargoWeight: float # Declaring attributes & Setting Types
self.amountPallets: int # Declaring attributes & Setting Types
self.liveAnimals: bool # Declaring attributes & Setting Types
def setCargoType(self, cargoType): # Mutator Method
self.cargoType = cargoType
def getCargoType(self): # Accessor Method
if len(self.cargoType) > 0: # Error Checking
return self.cargoType
else:
return "No Cargo Type Set"
def setAmountPallets(self, amountPallets): # Mutator Method
self.amountPallets = amountPallets
def getAmountPallets(self): # Accessor Method
if self.amountPallets != 0: # Error Checking
return self.amountPallets
else:
return "Amount of pallets not set"
def setCargoWeight(self): # Mutator Method
avgCargoWeight = 114 # Googled average weight for airline pallet
# Multiply the average cargo weight by the amount of pallets and set it to our attribute
self.cargoWeight = avgCargoWeight * self.amountPallets
def getCargoWeight(self): # Accessor Method
if self.cargoWeight == 0: # Error Checking
return "No Cargo Weight Set"
else:
return self.cargoWeight
def setLiveAnimals(self, liveAnimals): # Mutator Method
if liveAnimals == True: # If it's set to true
self.liveAnimals = True # set the
else:
self.liveAnimals = False
def getLiveAnimals(self):
if self.liveAnimals == True: # Error Checking
return "There are live animals on-board"
else:
return "There are no live animals on-board"
def __str__(self): # Overiding Method
return super().__str__() + "\nCargo Type: " + self.getCargoType() + "\nCargo Pallets: " + str(self.getAmountPallets()) + "\nCargo Weight: " + str(self.getCargoWeight()) + "\nIs there live animals?: " + str(self.getLiveAnimals()) + "\n==================================================\n"
# Passengers Class (Implementation of 1:0..M aggregation relationship)
class Passengers:
def __init__(self, passengerName, passengerWeight): # Constructor Method
# Implementing the 1:0..M aggregation relationship between Passengers and PassengerFlight
self.passengerName: list # Declaring attributes & Setting Types
self.passengerWeight: int # Declaring attributes & Setting Types
def setPassengerName(self, passengerName): # Mutator Method
self.passengerName = passengerName
def getPassengerName(self): # Accessor Method
if len(self.passengerName) > 0:
return self.passengerName
else:
return "Passenger Name List Not Set"
def setPassengerWeight(self):
passengerWeight = 0
# For i in lenth of self.passengerName variable
for i in range(len(self.passengerName)):
# Add 80KG (Avg Weight) to the passengerWeight variable
passengerWeight += 80.00
# Set our attribute equal to the variable
self.passengerWeight = passengerWeight
def getPassengerWeight(self): # Acessor Method
if self.passengerWeight != 0:
return self.passengerWeight
else:
return "No passenger Weight Set"
def getPassengerCount(self): # Accessor Method
return len(self.passengerName)
def __str__(self): # Overiding Method
return "==================================================\n+++++++++++++++ Passenger Info +++++++++++++++\n==================================================\nPassenger Count: " + str(self.getPassengerCount()) + "\nPassenger Weight: " + str(self.getPassengerWeight()) + "(KG)\n==================================================\n"
class AirplaneType: # AirplaneType Class (Aggregation (1:1) Relationship)
def __init__(self, airplaneType, cargoWeight, Flight): # Constructor Method
self.cargoWeight: int # Declaring attributes & Setting Types
self.totalWeight: int # Declaring attributes & Setting Types
self.Flight = Flight # Declaring attributes & Setting Types
def setCargoWeight(self, cargoWeight): # Mutator method
self.cargoWeight = cargoWeight
def getCargoWeight(self): # Accessor Method
if self.cargoWeight != 0:
return self.cargoWeight
else:
return "No cargo weight set"
def setTotalWeight(self, passengerWeight, passengerBaggage): # Mutator method
totalWeight = 0 # Initializing variable to 0
if passengerWeight != 0 or self.cargoWeight != 0: # Checks values are not 0
# Sets totalWeight vaiable = to passengerWeight, passengerBaggage & cargoWeight
totalWeight += passengerWeight + passengerBaggage + self.cargoWeight
else:
print("Values not set correctly, please try again!") # Error checking
self.totalWeight = totalWeight
def getTotalWeight(self): # Accessor Method
if self.totalWeight != 0:
return self.totalWeight
else:
return "Total weight not set"
# If, elif, else statement that gets the total weight and declares what plane they should use based on info given
def getAirplaneType(self): # Accessor Method
if self.totalWeight >= 0 and self.totalWeight < 500:
return "Airbus A320/Boeing 737"
elif self.totalWeight >= 500 and self.totalWeight < 1000:
return "Airbus A321/Boeing 757"
elif self.totalWeight >= 1000 and self.totalWeight < 1500:
return "Airbus A330/Boeing 787"
elif self.totalWeight >= 1500 and self.totalWeight < 2000:
return "Airbus A350/Boeing 777"
elif self.totalWeight >= 2000:
return "Airbus A380/Boeing 747"
else:
print('Error: No suitable aircraft found')
def __str__(self): # Overiding Method
return "==================================================\n++++++ Aircraft Information (Pilot & Staff) ++++++\n==================================================\nAirplane Type Recommended: " + self.getAirplaneType() + "\nAirplane Weight: " + str(self.totalWeight) + "(KG)\n==================================================\n"
##########################################################
# Calling PassengerFlight Class #
##########################################################
# Initialize Class & Set to Variable
passenger = PassengerFlight(None, None, None, None, None, None)
passenger.setAirlineName('Aer Lingus') # Set mutators & values
passenger.setArrivalAirport('Chicago O\'Hare Intl') # Set mutators & values
passenger.setDepartureAirport('Dublin') # Set mutators & values
passenger.setFlightType('Long Haul') # Set mutators & values
passenger.setPassengerName(['Passenger 1', 'Passenger 2',
'Passenger 3', 'Passenger 4', 'Passenger 5', 'Passenger 6']) # Set mutators & values
passenger.setBaggageWeight() # Set mutators & values
print(passenger) # uses the overridden _str_ method to print detail of the class
##########################################################
# Calling Passengers Class #
##########################################################
# Initialize Class & Set Attributes to None
passengerInfo = Passengers(None, None)
passengerInfo.setPassengerName(
passenger.passengerList) # Set mutators & values
passengerInfo.setPassengerWeight()
print(passengerInfo) # uses the overridden _str_ method to print detail of the
##########################################################
# Calling AirplaneType Class #
##########################################################
# Initialize Class & Set Attributes to None
passengerFlight = AirplaneType(None, None, Flight)
passengerFlight.setCargoWeight(0) # Set mutators & values
passengerFlight.setTotalWeight(
passengerInfo.passengerWeight, passenger.baggageWeight) # Set mutators & values
# uses the overridden _str_ method to print detail of the class
print(passengerFlight)
##########################################################
##########################################################
# Calling CargoFlight Class #
##########################################################
# Initialize Class & Set Attributes to None
cargo = CargoFlight(None, None, None, None, None, None)
cargo.setAirlineName('DHL') # Set mutators & values
cargo.setArrivalAirport('JFK Intl') # Set mutators & values
cargo.setDepartureAirport('Dublin Intl') # Set mutators & values
cargo.setCargoType('General') # Set mutators & values
cargo.setLiveAnimals(True) # Set mutators & values
cargo.setAmountPallets(10) # Set mutators & values
cargo.setCargoWeight() # Set mutators & values
print(cargo) # uses the overridden _str_ method to print detail of the class
##########################################################
# Calling AirplaneType Class #
##########################################################
# Initialize Class & Set Attributes to None
cargoFl = AirplaneType(None, None, Flight)
cargoFl.setCargoWeight(cargo.cargoWeight) # Set mutators & values
cargoFl.setTotalWeight(0, 0) # Set mutators & values
print(cargoFl) # uses the overridden _str_ method to print detail of the class
##########################################################
print(cargo == passenger)
##########################################################
# In-Built Functions
def getPassengers(p):
return p.passengerName
print(min(passengerInfo.passengerName, key=getPassengers))你好啊,
我在大学的python代码中遇到了一个错误。我必须添加使用python内置函数的排序功能。讲座希望我们使用辅助函数,就像上面最后几行一样。当我尝试运行这个函数时,我在def getPassengers(p)函数上得到一个错误:
Exception has occurred: AttributeError 'str' object has no attribute 'passengerName'
我可以看到它选择了变量'Passenger 1‘,并显示为一个本地变量,这是正确的,因为运行min()将选择第一个passenger,因为它们都是相同的长度。
有人有什么建议来解决这个问题吗?
谢谢!
发布于 2020-11-24 21:35:38
passengerInfo.passengerName包含以下['Passenger 1', 'Passenger 2', 'Passenger 3', 'Passenger 4', 'Passenger 5', 'Passenger 6'],它是一个字符串列表。在这种情况下,作为键传递给函数min的是该列表的元素,而不是passengerInfo对象。在这种情况下,可以在没有任何个性化键的情况下对列表元素应用min函数。min函数将应用于列表的字符串值。
下面返回正确的min
>>> print(min(passengerInfo.passengerName))
'Passenger 1'现在,要通过检查字符串的长度来获得最小值,可以执行以下操作
>>> print(min(passengerInfo.passengerName, key=lambda x: len(x)))发布于 2020-11-24 21:26:19
您的实现的问题是,您将一个参数传递给str类型的getPassengers,然后尝试访问该str上的passengerName属性,这将不起作用。如果您希望按姓名长度对这些乘客进行排序,则甚至不需要为此定义自定义函数。您可以只将len作为key参数传递:
>>> len_sorted = sorted(passengerInfo.passengerName, key=len)
['Passenger 1', 'Passenger 2', 'Passenger 3', 'Passenger 4', 'Passenger 5', 'Passenger 6']然后,您只需编写以下代码即可访问这些文件上的min、max等:
>>> min(len_sorted)
'Passenger 1'
>>> max(len_sorted)
'Passenger 6'发布于 2020-11-24 21:19:33
传递给min的'key‘参数是要在passengerInfo.passengerName上执行的函数。
因此,您在passengerName (类型为str)上调用'getPassengers‘函数,这会导致错误
https://stackoverflow.com/questions/64987261
复制相似问题