如何确保Satellite类的实例名称不重复?
解决Satellite实例重名问题
要确保创建的Satellite实例不会重名,核心是在创建新卫星时先验证输入的名字是否已被现有实例使用,重复则要求用户重新输入。下面是修改后的实现方案:
修改后的代码
class Satellite: def __init__(self, name, lbs, speed): self.name = name.title() self.lbs = lbs self.speed = speed lstSat = [] e = input("Would you like to create satellites? If yes, type O. If not, type another letter: ").lower() i = 0 while e == "o": print(f"Info for satellite {i+1}") # 循环获取唯一名字 while True: satellite_name = input("name: ") # 检查现有卫星中是否存在同名(统一用title格式避免大小写差异) duplicate_found = any(sat.name == satellite_name.title() for sat in lstSat) if not duplicate_found: break print(f"错误:名为'{satellite_name.title()}'的卫星已存在,请输入其他名称。") # 获取剩余参数 satellite_lbs = int(input("lbs: ")) satellite_speed = int(input("speed: ")) # 创建实例并加入列表 lstSat.append(Satellite(satellite_name, satellite_lbs, satellite_speed)) i += 1 e = input("Type O to create another satellite: ").lower()
关键修改说明
- 重构类的职责:把用户输入逻辑从
Satellite类的__init__中移出,让类仅负责存储卫星数据,代码结构更清晰,也方便后续扩展。 - 添加名字唯一性校验:通过
any()函数遍历已有的卫星列表,检查输入的名字(转换为统一的title格式)是否已存在。如果重复,持续提示用户输入新名字,直到得到唯一值。 - 保持交互流程不变:整体的用户交互逻辑和原代码一致,只是在创建实例前增加了名字校验环节。
内容的提问来源于stack exchange,提问作者metal
相关产品推荐
相关产品推荐

