Python基于类开发计时算速程序,如何实现可用户终止的循环?
现有代码存在的问题
- 类定义放在了while循环内部,每次循环都会重复创建Timer类,属于完全不必要的冗余操作,类只需要在全局定义一次即可
- 类封装逻辑错误:
__init__方法已经将速度存入实例的speed属性,但log方法中却直接读取全局变量mph输出,不符合面向对象封装的设计原则 - 作用域错误:log方法内部尝试直接修改全局变量
y,没有声明global的情况下修改不会生效,会导致循环无法正常终止 - 执行逻辑位置错误:Timer实例化和log方法调用的代码放在了while循环外部,程序会无限重复执行输入逻辑,永远不会走到输出速度、询问是否继续的步骤
- 变量命名可读性差,无意义的单字符变量名不利于后续维护
修正后可运行代码
# 类定义放在全局,仅初始化一次 class Timer: def __init__(self, speed): self.speed = speed def log(self): # 直接使用实例自身存储的speed属性输出 print(f"当前计算的速度为:{self.speed:.2f} mph") again = input('是否继续计算?输入y继续,n退出:') # 将用户选择返回给外层循环控制逻辑,避免滥用全局变量 return again == 'y' if __name__ == "__main__": running = True while running: # 输入逻辑 minutes = float(input('请输入分钟数:')) seconds = float(input('请输入秒数:')) distance = float(input('请输入距离(英里):')) # 速度计算逻辑 total_seconds = minutes * 60 + seconds total_hours = total_seconds / 3600 mph = distance / total_hours # 实例化类并调用方法 timer = Timer(mph) # 根据log方法的返回值控制循环是否继续 running = timer.log() print('感谢使用')
核心调整说明
- 类定义移到全局,避免重复创建
- 完全用类实例属性存储速度,符合OOP封装要求
- 把循环控制逻辑和类功能拆分,类只负责存储速度、输出结果、返回用户选择,不直接修改全局变量,耦合度更低
- 把实例化和调用逻辑移到循环内部,保证每次输入计算后都会执行输出和询问流程
- 优化了变量命名,增加了输出格式,可读性更强
内容的提问来源于stack exchange,提问作者M8zeppa
相关产品推荐
相关产品推荐

