公交乘客管理:如何生成带随机属性的不同Person对象并管理?
公交乘客管理项目解决方案
先修正代码中的拼写错误
原代码存在多处拼写错误,这是导致功能异常的基础问题,修正点如下:
__init__方法中self.namne = namne改为self.name = name__str__方法中self.namn改为self.name,ålder改为age- 所有
setNaem/getNaem改为setName/getName - 姓名列表中
"Abigale"后缺失逗号,补充完整
生成多个不同属性的Person对象
编写工具函数随机生成乘客实例,从姓名列表选名、随机生成年龄:
def generate_random_person(): random_name = rand.choice(nameList) random_age = rand.randint(1, 120) return Person(random_name, random_age)
避免对象覆盖:用列表存储乘客
初始化全局列表保存所有乘客,接新乘客时循环生成对应数量的实例并添加到列表:
# 全局列表存储公交上的乘客 bus_passengers = [] def pickUp(): try: amountUp = int(input("How many passengers do you want to pick up?" "\n-> ")) for _ in range(amountUp): new_passenger = generate_random_person() bus_passengers.append(new_passenger) print(f"Picked up {amountUp} persons.") except ValueError: print("请输入有效的数字!")
加入异常处理避免非数字输入导致崩溃。
通过姓名管理乘客
编写工具函数实现按姓名的查找、修改、删除操作:
按姓名查找乘客
def find_passenger_by_name(target_name): matches = [] for passenger in bus_passengers: if passenger.getName().lower() == target_name.lower(): matches.append(passenger) return matches
返回所有匹配姓名的乘客(支持大小写不敏感,兼容重名场景)
修改指定姓名乘客的属性
def update_passenger_name(old_name, new_name): passengers = find_passenger_by_name(old_name) if not passengers: print(f"未找到姓名为{old_name}的乘客") return for passenger in passengers: passenger.setName(new_name) print(f"已将所有{old_name}的姓名修改为{new_name}")
删除指定姓名的乘客
def drop_passenger_by_name(target_name): global bus_passengers original_count = len(bus_passengers) bus_passengers = [p for p in bus_passengers if p.getName().lower() != target_name.lower()] removed_count = original_count - len(bus_passengers) if removed_count > 0: print(f"已下车{removed_count}名姓名为{target_name}的乘客") else: print(f"未找到姓名为{target_name}的乘客")
完整修正后的代码
import random as rand nameList = ["Jack", "Erik", "Bob", "Anna", "Leo", "Nikodemus", "Samuel", "David", "Lucas", "Marcus", "Noah", "Simon", "Harley", "Abigale", "Magdalena", "Marie", "Lewis", "John", "Gus", "Robin", "Jakob"] class Person(): """ Person类用于表示公交上的乘客,每个实例包含姓名和年龄属性, 以及获取、修改属性的方法 """ def __init__(self, name, age): self.name = name self.age = age # 对象的字符串表示 def __str__(self): return f"This is {self.name}. He/she is {self.age} years old." # 设置姓名 def setName(self, newName): self.name = newName # 设置年龄 def setAge(self, newAge): self.age = newAge # 获取姓名 def getName(self): return self.name # 获取年龄 def getAge(self): return self.age # 全局列表存储公交上的所有乘客 bus_passengers = [] def generate_random_person(): """生成随机属性的乘客对象""" random_name = rand.choice(nameList) random_age = rand.randint(1, 120) return Person(random_name, random_age) # 接新乘客上车 def pickUp(): try: amountUp = int(input("How many passengers do you want to pick up?" "\n-> ")) for _ in range(amountUp): new_passenger = generate_random_person() bus_passengers.append(new_passenger) print(f"Picked up {amountUp} persons.") except ValueError: print("请输入有效的数字!") # 按姓名查找乘客 def find_passenger_by_name(target_name): matches = [] for passenger in bus_passengers: if passenger.getName().lower() == target_name.lower(): matches.append(passenger) return matches # 修改乘客姓名 def update_passenger_name(old_name, new_name): passengers = find_passenger_by_name(old_name) if not passengers: print(f"未找到姓名为{old_name}的乘客") return for passenger in passengers: passenger.setName(new_name) print(f"已将所有{old_name}的姓名修改为{new_name}") # 乘客下车(按姓名) def drop_passenger_by_name(target_name): global bus_passengers original_count = len(bus_passengers) bus_passengers = [p for p in bus_passengers if p.getName().lower() != target_name.lower()] removed_count = original_count - len(bus_passengers) if removed_count > 0: print(f"已下车{removed_count}名姓名为{target_name}的乘客") else: print(f"未找到姓名为{target_name}的乘客") # 示例使用 if __name__ == "__main__": pickUp() # 打印所有乘客 print("\n当前公交乘客列表:") for p in bus_passengers: print(p) # 查找乘客 found = find_passenger_by_name("jack") print("\n查找Jack的结果:") for p in found: print(p)
内容的提问来源于stack exchange,提问作者Hunk
相关产品推荐
相关产品推荐

