@LikeKey

Что то не так с if'ом?

Есть код
response = event.text.upper()
        if event.from_user and event.to_me:
                print(response)
                """Для работы с методами vk_api"""
                vkFunc = VkClassFunc.VkMethod(event.user_id, vk_session, event)

                """Проверка отправленного сообщения"""
                if response != 'МАТЕМАТИКА' or response != 'РУССКИЙ ЯЗЫК':
                    vkFunc.send_msg(vkFunc.new_message(response), vkFunc.new_keyboard(response))
                elif response == 'МАТЕМАТИКА' or response == 'РУССКИЙ ЯЗЫК':
                    print('1')
                    vkFunc.send_msg(vkFunc.new_message(response), vkFunc.new_keyboard(response))
                    print('2')
                    vkFunc.verification()
                    print('3')

В ходе исполнения кода, response == 'МАТЕМАТИКА', но почему то выполняется другой блок if

P.S. то что криво раставлены условия, это я уже пытался решение придумать
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
kshnkvn
@kshnkvn
yay ✌️ t.me/kshnkvn
Проблема в том, что вы не правильно понимаете принцип if
if response != 'МАТЕМАТИКА' or 'РУССКИЙ ЯЗЫК':
Эта проверка будет срабатывать всегда. Вы можете условно разбить эту проверку на 2 группы:
1. if response != 'МАТЕМАТИКА'
2. if 'РУССКИЙ ЯЗЫК'

Если вы откроете интерактивную консоль Python и введете 2 часть вашего условия, то увидите:
>>> if 'РУССКИЙ ЯЗЫК':
...     True
...
True

Дальше у вас используется логический оператор or, так что у вас условия будет выполняться если response != 'МАТЕМАТИКА'ИЛИ response != 'РУССКИЙ ЯЗЫК', а т.к. 'МАТЕМАТИКА' != 'РУССКИЙ ЯЗЫК' и наоборот, то проверка будет срабатывать в обеих случаях.
Соответственно в вашем случае проверки должны быть вида:
if response != 'МАТЕМАТИКА' and response != 'РУССКИЙ ЯЗЫК':
    ...

При этом во втором блоке вы сделали правильно ;)
Будьте внимательнее.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@kolomiec_artiom
Вы пропустили:
if response != 'МАТЕМАТИКА' or response КАКОЙ-ТО ЗНАК 'РУССКИЙ ЯЗЫК':


В вашем коде получается условие: если ответ != 'математика' или 'русский язык'. В питоне принято считать, что не пустая строка всегда истинна => ваше первое условие будет выполняться всегда
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы