闷声小发财 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条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题