• UnboundLocalError: local variable 'range' referenced before assignment


    1. 报错信息

    UnboundLocalError: local variable 'range' referenced before assignment

    2. 代码

    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):
            """将里程表读数设置为指定值"""
            self.odometer_reading = mileage
            """
            将里程表读数设置为指定的值,
            禁止将里程表读数往回调
            """
            if mileage >= self.odometer_reading:
                self.odometer_reading = mileage
            else:
                print("You can't roll back an odometer!")
    
        def increment_odometer(self, miles):
            """将里程表读数增加指定的量"""
            self.odometer_reading += miles
    
    # my_used_car = Car('subaru', 'outback', 2013)
    # print(my_used_car.get_descriptive_name())
    #
    # my_used_car.update_odometer(23500)
    # my_used_car.read_odometer()
    #
    # my_used_car.increment_odometer(100)
    # my_used_car.read_odometer()
    
    # my_new_car = Car('audi', 'a4', 2016)
    # print(my_new_car.get_descriptive_name())
    # my_new_car.update_odometer(23)
    # # my_new_car.odometer_reading = 23
    # my_new_car.read_odometer()
    
    class Battery():
        """一次模拟电动汽车的属性"""
        def __init__(self, battery_size = 60):
            """初始化电瓶属性"""
            self.battery_size = battery_size
    
    
        def describle_battery(self):
            """打印一天描述电瓶容量的消息"""
            print("This car has a " + str(self.battery_size) + " -kWh battery.")
    
        def get_range(self):
            """打印一条描述电瓶续航里程的消息"""
            # range = 200
            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.describle_battery()
    my_tesla.battery.get_range( )
    

      

    3. 解决方法

    在get_range()方法中先定义一个range变量,然后进行逻辑运算

        def get_range(self):
            """打印一条描述电瓶续航里程的消息"""
            range = 200 # 先定义变量,后进行运算
            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)
    

      

    4. 执行结果

    D:python编程:从入门到实践venvScriptspython.exe D:/python编程:从入门到实践/my_electric_car.py
    2016 Tesla Model S
    This car has a 60 -kWh battery.
    This car can go approximately 200 miles on a full charge.
    
    Process finished with exit code 0
    

      

     

  • 相关阅读:
    记一道有趣的数学题
    BJOI2018 二进制
    BJOI2016 IP地址
    BJOI2016 回转寿司
    BJOI2017 开车
    BJOI2019 光线
    java 下载
    springboot 运行相关命令
    sql mapper 里面 Integer 类型判断
    springboot 访问jar同级别下的文件访问问题
  • 原文地址:https://www.cnblogs.com/kevin-hou1991/p/14802500.html
Copyright © 2020-2023  润新知