Предыдущую задачу можно решить более коротким способом, используя сложные условия. 
Давайте разберемся, что такое СЛОЖНЫЕ УСЛОВИЯ
Простейшие условия состоят из одного отношения (больше, меньше и т.п.) Но иногда необходимо объединение простых условий в более сложные, например: на улице холодно и идет дождь. Два простых условия (на улице холодно), (на улице идет дождь) здесь связаны связкой И.
СЛОЖНОЕ УСЛОВИЕ - состоит из двух или нескольких простых отношений (условий), которые объединяются с помощью логических операций
  И - логическое умножение - на языке Python записывается как and 
  ИЛИ - логическое умножение - на языке Python записывается как or
  НЕ - логическое умножение -на языке Python записывается как not
Операция И - требует одновременного выполнения двух условий
  условие 1 and условие 2   - будет принимать истинное значение, только если оба простых условия истинны одновременно
причем, если условие 1 ложно, то условие 2 проверяться не будет
Операция ИЛИ - требует выполнения хотя бы одного из условий
  условие 1 or  условие 2   - будет принимать ложное значение, только если оба простых условия ложны одновременно
причем, если условие 1 истинно, то условие 2 проверяться не будет
Операция НЕ 
 not условие 1 - будет принимать ложное значение, если условие 1 истинно и наоборот
Например, следующие два условия равносильны:   A>B     и    not (A<=B)
ПРИОРИТЕТ ВЫПОЛНЕНИЯ ЛОГИЧЕСКИХ ОПЕРАЦИЙ И ОТНОШЕНИЙ
1 операции в скобках
2 операция НЕ
3 логические отношения >, <, >=, <=, ==, !=
4 операция И
5 операция ИЛИ
Для изменения порядка действий используются круглые скобки
ЛОГИЧЕСКИЕ ПЕРЕМЕННЫЕ
Во многих языках программирования есть возможность использовать переменные, которые хранят логические значения ("истина"/"ложь"). В Python такие переменные могут принимать значения True (истина) или False (ложь). Например, программа  
a = True
b = False
print(a or b)
Выведет на экран True.
Логические переменные относятся к типу 
bool, названному в честь английского математика Джорджа Буля - создателя алгебры логики.