闷声小发财 2019-05-09 10:19 采纳率: 0%
浏览 666
已采纳

请教,关于《Python从入门到实践》第九章 类 中的例子 electric_car一段代码的问题

照着书写了这段代码,出现了如下错误:
图片说明

书上代码:
图片说明

代码如下:
def get_range(self):
if self.battery_size == 70:
range = 240
elif self.battery_size == 85:
range = 270

    message = "This car can go approximately " + str(range)
    message += " miles on full charge."
    print(message)

请问书上这段是不是错了?

我自己对这方法进行了修改,加了个名为range的形参并赋值后,程序就可以运行了,不知道这样做是否是原书的本意?
def get_range(self, range=240):
if self.battery_size == 70:
range = 240
elif self.battery_size == 85:
range = 270

    message = "This car can go approximately " + str(range)
    message += " miles on full charge."
    print(message)

还一种修改的方法就是用else,代码如下:
def get_range(self):
if self.battery_size == 70:
range = 240
elif self.battery_size == 80:
range = 280
else:
range = 200
message = "This car can go approximately " + str(range)
message += " miles on full charge."
print(message)
这样也可运行

原因的话,自己猜测是通过赋值或者else完全定义了range,也不知道想得对不对,请各位坛友指教。

  • 写回答

2条回答

  • 代码的灵魂是bug! 2019-05-09 20:16
    关注

    书上的写法完全没问题,你检查一下你自己的代码,下面是书上的

    class Car():
        def __init__(self,make,model,year):
            self.make = make
            self.model = model
            self.year = year
            self.odometer_reading = 0
        def get_descriptive_name(self):
            long_name = str(self.year)+' '+self.make+' '+self.model
            return long_name.title()
        def read_odometer(self):
            print('This car has '+str(self.odometer_reading)+' miles on it.')
        def update_odometer(self,mileage):
            if mileage >= self.odometer_reading:
                self.odometer_reading = mileage
            else:
                print('You cant roll back an odometer!')
        def increment_odometer(self,miles):
            self.odometer_reading += miles
    class Battery():
        def __init__(self,battery_size=70):
            self.battery_size = battery_size
        def describe_battery(self):
            print('This car has a '+str(self.battery_size)+'-kWh battery.')
        def get_range(self):
            if self.battery_size == 70:
                range = 240
            elif self.battery_size == 85:
                range = 270
    
            message = "This car can go approximately "+str(range)
            message += ' miles on a full charge'
            print(message)
    
    class ElectricCar(Car):
        def __init__(self,make,model,year):
            super().__init__(make,model,year)
            self.battery = Battery()
    
    
    
    from car import ElectricCar
    
    my_tesla = ElectricCar('tesla','model s',2016)
    print(my_tesla.get_descriptive_name())
    my_tesla.battery.describe_battery()
    my_tesla.battery.get_range()
    
    2016 Tesla Model S
    This car has a 70-kWh battery.
    This car can go approximately 240 miles on a full charge
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?