• Не переходит в цикл, хотя условия выполнены. Где ошибка?

    @abcd0x00
    if dobav in mimic_dict == True:

    if dobav in mimic_dict:
    И всё.
    Ответ написан
    Комментировать
  • Не переходит в цикл, хотя условия выполнены. Где ошибка?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    В исходном коде много странных мест. Например, странным и опасным образом опущенны запятые в описании словаря, опасное применение переменной dobav в ветке else... Это всё ведёт к небезопасному коду в плане понимания и будущих модификаций. Очевидна нехватка опыта.

    Насчет приоритета операций вам уже ответили, но давайте попробуем провести поэтапный для ясности рефакторинг вашего кода.
    Вот чему эквивалентно тело вашей функции:
    def print_mimic(mimic_dict, word):
        bred = []
        x = 0
        dobav = word
        while x < 200:
            if x == 0 or dobav in mimic_dict:
                dobav = random.choice(mimic_dict[dobav])
            else:
                dobav = random.choice(mimic_dict[" "])
            bred.append(dobav)
            x += 1
        print (bred)
        return bred

    Я понятия не имею что это за код и для чего он. Предыдущий рефакторинг я сделал оставив код эквивалентным исходному (за исключением исправления очевидных ошибок). Можно предположить, что в коде есть ещё ряд логических ошибок. Возможно поведение по ветке "x == 0" не должно отличаться от поведения по ветке else условия "dobav in mimic_dict", а вместо константы " " следовало тоже поставить word. Тогда код становится гораздо более простым, понятным и элегантным.
    def print_mimic(mimic_dict, word):
        bred = []
        dobav = word
        for x in range(200):
            dobav = random.choice(mimic_dict.get(dobav, mimic_dict[" "])) 
            bred.append(dobav)
    
        print (bred)
        return bred
    Ответ написан
    1 комментарий
  • Не переходит в цикл, хотя условия выполнены. Где ошибка?

    AnnTHony
    @AnnTHony
    Интроверт
    if dobav in mimic_dict == True:
    >>> False
    if (dobav in mimic_dict) == True:
    >>> True
    Ответ написан
    Комментировать
  • Не переходит в цикл, хотя условия выполнены. Где ошибка?

    @idap
    интересуюсь python, latex, linux, ML, AI
    Приоритет операций нужно учитывать, видимо:
    1 in (1, 2, 3) == True
    даст False, поскольку сначала выполнится (1, 2, 3) == True, что вернёт False, и затем получится проверка 1 in False, что есть False.
    А вот так правильно:
    (1 in (1, 2, 3)) == True
    даст True.
    А вот так ещё правильнее:
    if 1 in (1, 2, 3):
        pass
    Ответ написан
    Комментировать