• Не могу понять задание. Что имел в виду преподаватель?

    @whoareyoutofuckinglecture Автор вопроса
    Ruslan Ruslanov, это не так просто сделать, когда ты заочник и живёшь в другом городе. К тому же, преподаватель не является автором данной задачи.
  • Python3. Почему не работает код?

    @whoareyoutofuckinglecture Автор вопроса
    Действительно..
    Вот задание: "Найти все такие простые числа, не превосходящие заданного N, двоичная запись которых представляет собой симметричную последовательность нулей и единиц(начинающуюся единицей!)."

    Может быть тут имелись в виду числа вроде 101010 или 11001100?
    Вернее, именно это и имелось в виду.. Блин. Спасибо вам огромное!
  • Проблема с добавлением элементов в словарь с помощью цикла for. Что можно сделать?

    @whoareyoutofuckinglecture Автор вопроса
    .cards - список, содержит элементы-строки, e.g.: ['10h', 'Кs', 'Ah', '9d', '10s', 'Кh']
    Т.е. итерируемся мы по списку, и добавить хотим целиком строку из списка, а цикл for почему-то начинает добавлять строку по одному символу.
    Декоратор объявляет данный метод статическим.

    P.S. Проблема решена с помощью append. Однако, до сих пор не ясно, почему for добавляет элемент посимвольно.
  • Проблема с добавлением элементов в словарь с помощью цикла for. Что можно сделать?

    @whoareyoutofuckinglecture Автор вопроса
    Сергей Горностаев не могли бы вы, пожалуйста, объяснить, почему for начинает итерироваться ещё и по элементу?
  • Проблема с добавлением элементов в словарь с помощью цикла for. Что можно сделать?

    @whoareyoutofuckinglecture Автор вопроса
    Надо же! Я и сам пытался использовать append, но, вероятно, ошибся в синтаксисе, т.к. IDE ругалась и код не работал.

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

    @whoareyoutofuckinglecture Автор вопроса
    bbkmzzzz, спасибо вам, наконец-то я всё понял! :)

    P.S. Вы здорово переписали генератор, я даже и не знал, что можно создавать экземпляры класса прямо в момент добавления их в список))
  • Как работать одновременно с несколькими экземплярами класса?

    @whoareyoutofuckinglecture Автор вопроса
    bbkmzzzz, благодарю за развёрнутый ответ!

    Мне известно о локальных/глобальных переменных, в указанной в самом начале версии кода не было return в функции generator(), а также в функции main() не было произведено получение списка из генератора, о чём я уже писал чуть выше.

    Мне было интересно лишь почему данный корявый цикл создаёт объекты:

    counter = 0
        for i in critters:
            crit_name = input('Как назовёте зверюшку? Введите имя: ')
            critters[counter] = NewCritter(name=crit_name)
            counter += 1
        return critters


    а вот эта версия - не создаёт:
    for crit in critters: 
            crit_name = input('Как назовёте зверюшку? Введите имя: ')
            crit = NewCritter(name=crit_name)
        return critters


    Ведь в обоих версиях я просто беру заранее сгенерированные строки, содержащие в себе будущий идентификатор каждого экземпляра класса: "crit1", "crit2" и т.д., и пытаюсь для каждой строки создать объект класса NewCritter.

    Про "-10": спасибо, переделаю)
    Печально, что я сам этого не заметил, притом, что работаю тестировщиком ПО..
  • Как работать одновременно с несколькими экземплярами класса?

    @whoareyoutofuckinglecture Автор вопроса
    bbkmzzzz, разобрался!

    Оказывается, дело в том, что для изменения элементов списка (включая тип), необходимо просто обратиться к нему по индексу, что я и сделал в цикле с while. Выбор for/while не имеет никакого значения)
    Теперь я знаю больше))

    Вот работающая версия кода:

    counter = 0
        for i in critters:
            crit_name = input('Как назовёте зверюшку? Введите имя: ')
            critters[counter] = NewCritter(name=crit_name)
            counter += 1
        return critters


    UPD: Теперь я понимаю, что цикл for тут на фиг не нужен, и куда больше подойдёт while.

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

    @whoareyoutofuckinglecture Автор вопроса
    bbkmzzzz, в первом сообщении приведена промежуточная версия кода, позднее я уже использовал return critters и возвращал список из функции generator() в функции main().

    Чуть выше приведена успешная версия кода с применением в генераторе цикла while для создания объектов.
    Я не менял ничего, кроме того, что заменил for на while.
    Не могу понять, почему объекты успешно создаются через while, но не создаются через for :(

    Вот кусок кода, где представлены обе версии генератора:

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


    P.S. IDE пишет, что локальная переменная crit не используется в цикле создания объектов через for. Не понимаю, что происходит..
  • Как работать одновременно с несколькими экземплярами класса?

    @whoareyoutofuckinglecture Автор вопроса
    Евгений, я нашёл свою ошибку!
    Даже смешно..
    У меня банально не создавались объекты в цикле for (я не знаю почему так).
    Переписал метод generator() с использованием while - и всё заработало!

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


    Проблема была не в "невозможности" обратиться к объекту по его имени из списка..
    Оказывается, можно и не применять globals() и eval(), в Python 3.5 хватило цикла for:
    elif choice == '1':
                for crit in critters:
                    crit.talk()


    Спасибо, что помогали разобраться в ситуации! :)
  • Как работать одновременно с несколькими экземплярами класса?

    @whoareyoutofuckinglecture Автор вопроса
    К сожалению, не подходит: вы обращаетесь к списку классов, а мне необходимо обратиться к каждому экземпляру класса (объекту), который находится в списке (массиве) critters.

    То есть, есть класс NewCritter(object) имеет экземпляры: crit1, crit2, .., critN, которые помещены в critters. В цикле for мы поочерёдно дёргаем объекты NewCritter.crit1 и т.д.
    PyCharm выбрасывает эксепшн 'None object is not callable', если применить приведённый вами способ.
    Вероятно, get() в данном случае возвращает None, так как не находит среди глобальных переменных 'crit1'. Что интересно, если скормить ему название класса, то эксепшн будет тот же самый. Похоже, что данный способ не применим в Python 3.5

    Всё равно, спасибо, что пытались помочь.
    Задам ещё один вопрос на Тостере, только сформулирую по другому. Хотя сначала ещё раз основательно погуглю.
  • Как работать одновременно с несколькими экземплярами класса?

    @whoareyoutofuckinglecture Автор вопроса
    Здравствуйте, Евгений!

    К сожалению, это не подходит.
    Мне необходимо брать название каждого экземпляра класса из списка (crit1, crit2, ... , critN), и применять к ним методы.
    То есть, написать, к примеру, цикл:
    critters = generator()
                for crit in critters:
                    crit.talk()


    Я не знаю, как заставить это работать :(
    Пробовал совет с type(), интерпретатор пишет, что у объекта type нет метода talk().
    То же самое, если просто выполнить вышеприведённый код - пишет, что у объекта str нет метода talk().
    Подскажите, пожалуйста, есть ли способ решить эту задачу?