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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:50:28