闷声小发财 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 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程