V
V
vtaeke2020-08-27 14:59:26
Python
vtaeke, 2020-08-27 14:59:26

How to avoid local variable referenced before assignment error?

How to avoid the error local variable 'range' referenced before assignment
I've been sitting for 30 minutes trying to turn the code around in order to fix this issue.
Either I overheated, or I don’t understand where the error is in the code ...

class Car():
    """Простая модель автомобиля."""
    def __init__(self, make, model, year):
        """Инициализирует атрибуты описания автомобиля."""
        self.make = make
        self.model = model
        self.year = year
        self.odometr_reading = 0

    def get_descreptive_name(self):
        """Возвращает аккуратно отформатированное описание."""
        long_name = str(self.year) + ' ' + self.make + ' ' + self.model
        return long_name.title()

    def read_odometr(self):
        """Выводит пробег машины в милях."""
        print("This car has " + str(self.odometr_reading) + " miles on it.")

    def update_odometr(self, mileage):
        """
        Устанавливает на одометре заданное значение.
        При попытке обратной подкрутки изменение отклоняется.
        """
        if mileage >= self.odometr_reading:
            self.odometr_reading = mileage
        else:
            print("You can't roll back an odometer!")

    def increment_odometr(self, miles):
        """Увеличивает показания одометра с заданным приращением."""
        self.odometr_reading += miles

class Battery():
    """Простая модель аккумулятора электромобиля."""
    def __init__(self, battery_size=60):
        """Инициализация атрибутов аккумулятора."""
        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)
        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', 2018)

print(my_tesla.get_descreptive_name())
my_tesla.battery.describe_battery()
my_tesla.battery.get_range()

Answer the question

In order to leave comments, you need to log in

2 answer(s)
M
Maxim, 2020-08-27
@vtaeke

You

class Battery():
    """Простая модель аккумулятора электромобиля."""
    def __init__(self, battery_size=60):

you compare
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)
        print(message)

You either need to process the value 60 and assign it to range, or do a generic else in the get_range method.

D
Dr. Bacon, 2020-08-27
@bacon

1. Initialize this variable, if both conditions fail, what is it equal to?
2. Well, do not give variables the name of built-in functions

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question