@vtaeke

Как избежать ошибки local variable referenced before assignment?

Как избежать ошибки local variable 'range' referenced before assignment
уже сижу минут 30 пытаюсь вывернуть код, так чтобы пофиксить это дело.
Либо я перегрелся, либо не понимаю где ошибка в коде...

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()
  • Вопрос задан
  • 457 просмотров
Решения вопроса 1
Tomio
@Tomio
backend developer (python, php)
У вас
class Battery():
    """Простая модель аккумулятора электромобиля."""
    def __init__(self, battery_size=60):

Вы сравниваете
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)

Вам надо либо обработать значение 60 и присвоить range, либо сделать общий else в методе get_range.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы