@giorgio85

Как вернуть стартовое значение счетчика?

Необходимо определить класс, реализующий десятичный счетчик, который может увеличивать или уменьшать свое значение на единицу в заданном диапазоне. Возникает проблема при вызове сразу обоих методов а не по отдельности. Значение self.number обновляется, не возвращается к первоначальному. Возможно ли как-то сбить его изменения?
class Counter:
    def __init__(self, number=5, lower_limit=3, upper_limit=10):
        self.number = number
        self.lower_limit = lower_limit
        self.upper_limit = upper_limit

    def increase_count(self):
        if self.number not in range(self.lower_limit, self.upper_limit):
            return "Error"
        else:
            mylist = list(self.number + 1 for self.number in range(self.number, self.upper_limit))
            return mylist

    def decrease_count(self):
        if self.number not in range(self.lower_limit, self.upper_limit):
            return "Error"
        else:
            mylist = list(self.number - 1 for self.number in range(self.lower_limit + 1, self.number + 1))
            return mylist[::-1]

obj = Counter()
print(obj.increase_count())
print(obj.decrease_count())
  • Вопрос задан
  • 160 просмотров
Пригласить эксперта
Ответы на вопрос 2
plustilino
@plustilino
https://younglinux.info
mylist = list(i + 1 for i in range(self.number, self.upper_limit))
Ответ написан
@Til_Ulenspiegel
Я бы на вашем месте переписал программу так:

class Counter: 
    def __init__(self, number=5, lower_limit=3, upper_limit=10): 
        assert lower_limit <= number <= upper_limit
        self.count = [*range(1, number+1)]
        self.lower_limit = lower_limit
        self.upper_limit = upper_limit  
        
    def increase_count(self):
        if len(self.count) == self.upper_limit: 
            raise ValueError("upper_limit is reached")
        self.count.append(self.count[-1] +1) 
        return self.count
           
    def decrease_count(self): 
        if len(self.count) == self.lower_limit: 
            raise ValueError("lower_limit is reached")
        self.count.pop()
        return self.count
            
            
obj = Counter() 
print(obj.increase_count())
print(obj.increase_count())
print(obj.increase_count())
print(obj.decrease_count())
print(obj.decrease_count())
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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