@whoareyoutofuckinglecture
Python developer

Как работать одновременно с несколькими экземплярами класса?

Всем привет!

Выполняю задание из учебника Майка Доусона по Python 3.
Необходимо написать программу, которая имитирует ферму.

В чём суть: создаётся несколько зверюшек, у каждой есть атрибут настроение (рассчитывается из суммы параметров "голод" и "скука"). Должна быть возможность покормить\поиграть\узнать настроение одновременно у всех зверюшек, однако я никак не могу понять, как мне это сделать.

В предыдущей версии программы, где была только одна зверюшка всё просто - зверюшка одна, следовательно, экземпляр класса один, название которого я просто хардкодил.
Тут же, сразу ко всем экземплярам (которых можно хоть миллион создать) необходимо применять определённые методы.
Ниже привожу исходный код, см. метод main(). Там, где написано "ЗВЕРЮШКИ" ранее было захардкожено название единственного экз. класса NewCritter, к которому и применялись методы.
Как можно решить данную проблему?

З.Ы. Также хочу реализовать возможность выбрать действие (e.g. покормить), ввести имя зверюшки и чтобы после этого по имени было найдено название данного экземпляра класса и к нему применился бв выбранный метод. Возможно ли это?

Заранее благодарю всех откликнувшихся!

class NewCritter(object):
    def __init__(self, name):
        print('Появилась новая зверушка!')
        import random
        hunger = random.randint(0, 10)
        boredom = random.randint(0, 10)
        self.name = name
        self.hunger = hunger
        self.boredom = boredom

    # накормить
    def eat(self):
        print('Сколько еды вы дадите зверюшке (КГ)?')
        food = None
        while food not in range(1, 6):
            food = int(input('Введите число от 1 до 5: '))
        self.hunger -= food
        print('Вы дали зверюшке ровно {} КГ еды!'.format(food))
        if self.hunger < 0:
            self.hunger = 0
        self.__pass_time()

    # поиграть
    def play(self):
        print('Сколько минут вы готовы поиграть со зверюшкой?')
        fun = None
        while fun not in range(1, 6):
            fun = int(input('Введите число от 1 до 5: '))
        self.boredom -= fun
        print('Вы поиграли со зверюшкой ровно {} минут!'.format(fun))
        if self.boredom < 0:
            self.boredom = 0
        self.__pass_time()

    # рассчёт настроения
    @property
    def mood(self):
        unhappiness = self.hunger + self.boredom
        if unhappiness < 5:
            m = "прекрасно!"
        elif 5 <= unhappiness <= 10:
            m = "неплохо."
        elif 11 <= unhappiness <= 15:
            m = "так себе.."
        else:
            m = "ужасно!"
        return m

    # зверюшка представляется и говорит о своём настроении
    def talk(self):
        print('Привет! Меня зовут {} и я чувствую себя {}'.format(self.name, self.mood))
        print('Уровень голода: ', self.hunger)
        print('Уровень скуки: ', self.boredom)
        self.__pass_time()

    # увеличивает hunger и boredom на 1 пункт после каждого действия из меню 
    def __pass_time(self, turn=1):
        self.hunger += turn
        self.boredom += turn


def generator():
    # генерим зверюшек
    num = None
    while type(num) != int:
        num = input('Сколько зверюшек вы хотите создать? Введите целое число: ')
    critters = []
    counter = 0
    string = 'crit'
    while counter != num:
        counter += 1
        critters.append(string + str(counter))
    for crit in critters:
        crit_name = input('Как назовёте зверюшку? Введите имя: ')
        crit = NewCritter(name=crit_name)


def main():
    generator()
    choice = None
    while choice != '0':

        print('''
        Мои зверюшки
        0 - Выйти
        1 - Узнать о самочувствии ваших зверюшек
        2 - Покормить зверюшек
        3 - Поиграть со зверюшками

        ''')

        choice = input('Ваш выбор: ')
        if choice == '0':
            print('До свидания!')
        elif choice == '1':
            ЗВЕРЮШКИ.talk()
        elif choice == '2':
            ЗВЕРЮШКИ.eat()
        elif choice == '3':
            ЗВЕРЮШКИ.play()
        else:
            print('Варианта {} нет в меню. Введите число от 0 до 3.'.format(choice))
            continue


main()
  • Вопрос задан
  • 514 просмотров
Решения вопроса 1
Wolfnsex
@Wolfnsex
Если не хочешь быть первым - не вставай в очередь!
Видится мне, что ответы на Ваши вопросы легко находятся поисковиком, в т.ч. поиском на Тостере... Например: раз, два, etc.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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