Python实现fastest_car函数及KeyError:1错误原因咨询
问题分析与解答
题目要求
练习模板包含Car类,通过make(str类型)和top_speed(int类型)两个属性表示汽车特征。请编写名为
fastest_car(cars: list)的函数,接收Car对象列表作为参数,返回最快汽车的make属性。假设总有一辆车的最高速度唯一,请勿修改传入列表或Car类定义。
测试代码示例:
if __name__ == "__main__": car1 = Car("Saab", 195) car2 = Car("Lada", 110) car3 = Car("Ferrari", 280) car4 = Car("Trabant", 85) cars = [car1, car2, car3, car4] print(fastest_car(cars)) # 预期输出: Ferrari
你的尝试错误分析
方法1错误点
- 你把
fastest_car定义成了Car类的实例方法,但题目要求它是一个独立的函数。实例方法第一个参数默认是self(代表当前实例),调用Car.fastest_car(cars[-1])时,cars[-1]被当作self参数,函数还缺一个list参数,因此抛出TypeError。 - 使用
list.sort()会直接修改原列表,违反题目“请勿修改传入列表”的要求。
方法2错误点
你的cars是由多个单键字典组成的列表,每个字典的键是汽车品牌(比如'Saab'),值是速度。lambda x : x[1]试图取字典中键为1的值,但这些字典里根本不存在键1,所以触发KeyError。
如果要对这种字典列表排序,正确的取值方式应该是取每个字典的唯一值,比如lambda x: list(x.values())[0],但这种数据结构本身不符合题目要求的“接收Car对象列表”的参数形式。
正确实现
按照题目要求,编写独立的fastest_car函数,不修改原列表,找到速度最快的Car对象并返回其make属性:
class Car: def __init__(self, make: str, top_speed: int): self.make = make self.top_speed = top_speed def fastest_car(cars: list): # 使用max函数,按top_speed属性找最大值,不修改原列表 fastest_car_obj = max(cars, key=lambda car: car.top_speed) return fastest_car_obj.make if __name__ == "__main__": car1 = Car("Saab", 195) car2 = Car("Lada", 110) car3 = Car("Ferrari", 280) car4 = Car("Trabant", 85) cars = [car1, car2, car3, car4] print(fastest_car(cars)) # 输出: Ferrari
补充说明
max()函数会遍历列表,根据key指定的规则找到最大值对应的元素,全程不会修改原列表,符合题目要求。- 题目明确总有一辆车的速度唯一,因此无需处理并列最快的情况。
内容的提问来源于stack exchange,提问作者stel
相关产品推荐
相关产品推荐

