Почему не срабатывает логическое "или"

def main_data():
    archive_file = input("\nВведите адрес архива ")
    # делаем проверку расширения файла
    if archive_file.endswith('.zip') or archive_file.endswith('.rar') == False:
        print(" Вы указали неверный файл. Файл не имеет расширения 'zip' или 'rar' ")
    

Ответы (2 шт):

Автор решения: Пушистик
def main_data():
    archive_file = input('Введите адрес архива: ')
    if not archive_file.endswith('.zip') and not archive_file.endswith('.rar'):
        print('Вы указали неверный файл. Файл не имеет расширения \'.zip\' или \'.rar\'.')

→ Ссылка
Автор решения: Evrik
  1. У Вас на данном этапе проверяется, что название либо заканчивается на '.zip', либо не заканчивается на '.rar', т.е. оно верно для любых файлов, кроме '.rar'. Вы судя про всему хотели, чтобы проверка была успешной, если расширение файла не совпадает ни с одним из этих случаев. В таком случае нужно либо обе проверки взять в скобки, либо проверять каждую на соответствие условию.
  2. Проверять на ... == False не принято, правильнее проверять not ...
  3. Для Вашего случая все вообще просто, т.к. метод endswith может принимать кортеж в качестве аргумента.
def main_data():
    archive_file = input("\nВведите адрес архива ")
    # делаем проверку расширения файла
    if not archive_file.endswith(('.zip', '.rar')):
        print(" Вы указали неверный файл. Файл не имеет расширения 'zip' или 'rar' ")
→ Ссылка