You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

公交乘客管理:如何生成带随机属性的不同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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 09:25:35