Python类中Setter/Getter未调用及刹车方法报错问题求助
问题修复方案
问题1:setYear方法未被调用
- 原因:main里直接调用
myCar.getYear(),但压根没执行过setYear方法,导致year始终是None。而且原setYear方法参数冗余、逻辑混乱——既接收value参数又自己读取输入,最后返回值也没赋值给self.year。 - 修复:
- 修改
setYear方法,移除多余的value参数,直接在方法内完成输入验证并设置self.year。 - 在main函数中主动调用
myCar.setYear()触发年份输入流程。
- 修改
问题2:accelerate和brake方法功能异常
- 原因:
accelerate里写了重复的self.speed = self.speed = ...,属于冗余语法,虽不报错但完全没必要。brake方法搞错了操作对象——拿self.brake(这是方法本身)去减5,应该操作self.speed;同时没考虑速度减到负数的情况。
- 修复:
accelerate简化为self.speed +=5,逻辑清晰直接。brake改成操作self.speed,用max(self.speed -5, 0)保证速度不会低于0。
顺带补全其他缺失逻辑
- 原代码中
getStringEntry未定义,给Car类新增带输入验证的setMake方法处理品牌输入。 - main里原本只调用一次加速/刹车,现在改成按输入次数循环调用,确保速度变化符合要求。
displayResult原本把年份当成品牌输出,已修正为显示年份、品牌和最终速度。
修正后的完整代码
class Car: def __init__(self): self.year = None self.make = None self.speed = 0 def setYear(self, prompt): while True: try: value = int(input(prompt)) if len(str(value)) == 4: self.year = value break else: print('Error Msg: Year must be 4 digits.\n') except ValueError: print('Error Msg: Non Numbers entered.\n') def setMake(self, prompt): while True: value = input(prompt).strip() if value: self.make = value break else: print('Error Msg: Make cannot be empty.\n') def getYear(self): return self.year def getMake(self): return self.make def getSpeed(self): return self.speed def accelerate(self): self.speed += 5 def brake(self): self.speed = max(self.speed - 5, 0) def main(): myCar = Car() # 获取并设置车辆年份 myCar.setYear('\nPlease enter the year model of the car: \n') # 获取并设置车辆品牌 myCar.setMake('\nPlease enter the make of the car: \n') # 根据输入次数执行加速 accelerateAmount = getIntegerEntry('\nHow many times did you accelerate?\n') for _ in range(accelerateAmount): myCar.accelerate() # 根据输入次数执行刹车 brakeAmount = getIntegerEntry('\nHow many times did you brake?\n') for _ in range(brakeAmount): myCar.brake() displayResult(myCar) def displayResult(car): print('') print('-' * 30) print('Car Year: ', car.getYear()) print('Car Make: ', car.getMake()) print('Final Speed: ', car.getSpeed()) print('-' * 30) def getIntegerEntry(prompt): while True: try: value = int(input(prompt)) if value > 0: return value else: print('Error Msg: Numbers less than 0 is not allowed.') except ValueError: print('Error Msg: Non Numbers entered.') if __name__ == "__main__": main()
内容的提问来源于stack exchange,提问作者whatsanoven
相关产品推荐
相关产品推荐

