Следующая тема: БРу. Функции

Вернуться в раздел: Базовый Python

Вернуться в оглавление: Я.Практикум

6. Условный оператор.

 6.1 Введение

 6.2 Булев тип данных

 6.3 Логические выражения и операторы сравнения

 6.4 Условный оператор

Задание 1

С помощью условного оператора проверьте рейтинг фильма «Крёстный отец». Если он выше или равен 8.5, выведите на экран сообщение 'Высокий рейтинг', иначе — 'Обычный рейтинг'.

movie_rating = 8.73 # рейтинг фильма «Крёстный отец»
# напишите ваш код здесь
if movie_rating >=8.5:
    print('Высокий рейтинг')
else:
    print('Обычный рейтинг')

Задание 2

Проверьте год выхода фильма «Бойцовский клуб»: если он вышел после 2000 года, выведите на экран 'Да'; если в 2000 году или раньше — 'Нет'. Для этого вызовите условный оператор и обратитесь к нужному элементу списка по индексу.

movie_info = ['Бойцовский клуб', 'США', 1999, 'триллер, драма, криминал', 139, 8.644]
# напишите ваш код здесь
if movie_info[2]>2000:
    print('Да')
else:
    print('Нет')

 6.5 Дополнительные ветки кода

Задание №1

переведите оценки из стобалльной системы в пятибалльную по этим правилам: оценка 2: от 0 до 59 баллов; оценка 3: от 60 до 72 баллов; оценка 4: от 73 до 84 баллов; оценка 5: от 85 до 100 баллов. По мере прохождения по списку печатайте результаты на экране — как в примере со списком years. Каждую оценку выводите на новой строке.

marks = [91, 35, 65, 89, 78, 93]

# напишите ваш код здесь
for i in marks:
    if 0<i<=59:
        print(2)
    if 60<i<=72:
        print(3)
    if 73<i<=84:
        print(4)
    if 85<i<=100:
        print(5)

Задание №2

Перед вами список со странами выхода некоторых фильмов. Для каждого элемента напечатайте сообщение в зависимости от названия страны: для СССР напечатайте 'Фильм вышел в СССР.'; для США — 'The movie was released in USA.'; для Италии — 'Il film e stato rilasciato in Italia.'; для любой другой страны — 'Страна не определена.'. Каждое сообщение выводите на новой строке.

countries = ['СССР', 'Новая Зеландия', 'Италия', 'Италия', 'СССР', 'США']

# напишите ваш код здесь
for i in countries:
    if i == 'СССР':
        print('Фильм вышел в СССР.')
    elif i == 'США':
        print('The movie was released in USA.')
    elif i == 'Италия':
        print('Il film e stato rilasciato in Italia.')
    else:
        print('Страна не определена.')

 6.6 Фильтр для таблицы

Задание №1

С помощью фильтра извлеките из movies_table фильмы, снятые в США. Результат сохраните в movies_filtered. Тогда цикл for выведет результат на экран.

movies_table = [
    ['Побег из Шоушенка', 'США', 1994, 'драма', 142, 9.111],
    ['Крёстный отец', 'США', 1972, 'драма, криминал', 175, 8.730],
    ['Тёмный рыцарь', 'США', 2008, 'фантастика, боевик, триллер', 152, 8.499],
    ['Список Шиндлера', 'США', 1993, 'драма', 195, 8.818],
    ['Властелин колец: Возвращение Короля', 'Новая Зеландия', 2003, 'фэнтези, приключения, драма', 201, 8.625],
    ['Криминальное чтиво', 'США', 1994, 'триллер, комедия, криминал', 154, 8.619],
    ['Хороший, плохой, злой', 'Италия', 1966, 'вестерн', 178, 8.521],
    ['Бойцовский клуб', 'США', 1999, 'триллер, драма, криминал', 139, 8.644],
    ['Харакири', 'Япония', 1962, 'драма, боевик, история', 133, 8.106],
    ['Сталкер', 'СССР', 1979, 'фантастика, драма, детектив', 163, 8.083],
    ['Иди и смотри', 'СССР', 1985, 'драма, военный', 136, 8.094]
]

movies_filtered = [] # пустая переменная для хранения результатов

# напишите ваш код здесь
for movies in movies_table:
    if movies[1] == 'США':
        movies_filtered.append(movies)

for movie in movies_filtered: # для каждого списка в списке
    for elem in movie: # перебираем элементы очередного списка
        print(f'{elem:<45}', end='') # выравнивание каждого элемента по левому краю с фиксированной шириной строки 45
    print() # после вывода очередной строки на экран переводим на новую строку

Задание №2

С помощью фильтра извлеките из movies_table фильмы с рейтингом выше 8.6. Результат сохраните в movies_filtered. Тогда цикл for выведет результат на экран.

movies_table = [
    ['Побег из Шоушенка', 'США', 1994, 'драма', 142, 9.111],
    ['Крёстный отец', 'США', 1972, 'драма, криминал', 175, 8.730],
    ['Тёмный рыцарь', 'США', 2008, 'фантастика, боевик, триллер', 152, 8.499],
    ['Список Шиндлера', 'США', 1993, 'драма', 195, 8.818],
    ['Властелин колец: Возвращение Короля', 'Новая Зеландия', 2003, 'фэнтези, приключения, драма', 201, 8.625],
    ['Криминальное чтиво', 'США', 1994, 'триллер, комедия, криминал', 154, 8.619],
    ['Хороший, плохой, злой', 'Италия', 1966, 'вестерн', 178, 8.521],
    ['Бойцовский клуб', 'США', 1999, 'триллер, драма, криминал', 139, 8.644],
    ['Харакири', 'Япония', 1962, 'драма, боевик, история', 133, 8.106],
    ['Сталкер', 'СССР', 1979, 'фантастика, драма, детектив', 163, 8.083],
    ['Иди и смотри', 'СССР', 1985, 'драма, военный', 136, 8.094]
]

movies_filtered = [] # здесь будет отфильтрованный список списков

# напишите ваш код здесь
for movies in movies_table:
    if movies[5] > 8.6:
        movies_filtered.append(movies) 

for movie in movies_filtered: # для каждого списка в списке
    for elem in movie: # перебираем элементы очередного списка
        print(f'{elem:<45}', end='') # выравнивание каждого элемента по левому краю с фиксированной шириной строки 45
    print() # после вывода очередной строки на экран переводим на новую строку

 6.7 Сложные логические выражения

Задание №1

Оставьте в списке списков movies_filtered информацию только о тех фильмах таблицы movies_table, которые вышли в США и имеют хронометраж более 150 минут.

movies_table = [
    ['Побег из Шоушенка', 'США', 1994, 'драма', 142, 9.111],
    ['Крёстный отец', 'США', 1972, 'драма, криминал', 175, 8.730],
    ['Тёмный рыцарь', 'США', 2008, 'фантастика, боевик, триллер', 152, 8.499],
    ['Список Шиндлера', 'США', 1993, 'драма', 195, 8.818],
    ['Властелин колец: Возвращение Короля', 'Новая Зеландия', 2003, 'фэнтези, приключения, драма', 201, 8.625],
    ['Криминальное чтиво', 'США', 1994, 'триллер, комедия, криминал', 154, 8.619],
    ['Хороший, плохой, злой', 'Италия', 1966, 'вестерн', 178, 8.521],
    ['Бойцовский клуб', 'США', 1999, 'триллер, драма, криминал', 139, 8.644],
    ['Харакири', 'Япония', 1962, 'драма, боевик, история', 133, 8.106],
    ['Сталкер', 'СССР', 1979, 'фантастика, драма, детектив', 163, 8.083],
    ['Иди и смотри', 'СССР', 1985, 'драма, военный', 136, 8.094]
]

# создайте пустой список movies_filtered здесь
movies_filtered=[]
# напишите ваш код здесь
for movies in movies_table:
    if movies[1] == 'США' and movies[4]>150:
        movies_filtered.append(movies)
        
for movie in movies_filtered:
    for elem in movie:
        print(f'{elem:<45}', end='')
    print()

Задание №2

Сохраните в movies_filtered информацию только о тех фильмах таблицы, которые либо вышли в 1994 году, либо имеют рейтинг ниже 8.5.

movies_table = [
    ['Побег из Шоушенка', 'США', 1994, 'драма', 142, 9.111],
    ['Крёстный отец', 'США', 1972, 'драма, криминал', 175, 8.730],
    ['Тёмный рыцарь', 'США', 2008, 'фантастика, боевик, триллер', 152, 8.499],
    ['Список Шиндлера', 'США', 1993, 'драма', 195, 8.818],
    ['Властелин колец: Возвращение Короля', 'Новая Зеландия', 2003, 'фэнтези, приключения, драма', 201, 8.625],
    ['Криминальное чтиво', 'США', 1994, 'триллер, комедия, криминал', 154, 8.619],
    ['Хороший, плохой, злой', 'Италия', 1966, 'вестерн', 178, 8.521],
    ['Бойцовский клуб', 'США', 1999, 'триллер, драма, криминал', 139, 8.644],
    ['Харакири', 'Япония', 1962, 'драма, боевик, история', 133, 8.106],
    ['Сталкер', 'СССР', 1979, 'фантастика, драма, детектив', 163, 8.083],
    ['Иди и смотри', 'СССР', 1985, 'драма, военный', 136, 8.094]
]

movies_filtered = [] # создайте пустой список movies_filtered здесь

# напишите ваш код здесь
for movies in movies_table:
    if movies[2] == 1994 or movies[5] < 8.5:
        movies_filtered.append(movies)

for movie in movies_filtered:
    for elem in movie:
        print(f'{elem:<45}', end='')
    print()

 6.8 Счетчики

Задание №1

Посчитайте триллеры в movies_table. Результат сохраните в thrillers_count — тогда функция выведет его на экран.

movies_table = [
    ['Побег из Шоушенка', 'США', 1994, 'драма', 142, 9.111],
    ['Крёстный отец', 'США', 1972, 'драма, криминал', 175, 8.730],
    ['Тёмный рыцарь', 'США', 2008, 'фантастика, боевик, триллер', 152, 8.499],
    ['Список Шиндлера', 'США', 1993, 'драма', 195, 8.818],
    ['Властелин колец: Возвращение Короля', 'Новая Зеландия', 2003, 'фэнтези, приключения, драма', 201, 8.625],
    ['Криминальное чтиво', 'США', 1994, 'триллер, комедия, криминал', 154, 8.619],
    ['Хороший, плохой, злой', 'Италия', 1966, 'вестерн', 178, 8.521],
    ['Бойцовский клуб', 'США', 1999, 'триллер, драма, криминал', 139, 8.644],
    ['Харакири', 'Япония', 1962, 'драма, боевик, история', 133, 8.106],
    ['Сталкер', 'СССР', 1979, 'фантастика, драма, детектив', 163, 8.083],
    ['Иди и смотри', 'СССР', 1985, 'драма, военный', 136, 8.094]
]

thrillers_count = 0 # присвойте начальное значение

# напишите ваш код здесь 
for movies in movies_table:
    if 'триллер' in movies[3]:
        thrillers_count += 1

print(thrillers_count)

Задание №2

Посчитайте фильмы, которые вышли после 1990 года. Результат сохраните в переменную after_ninety_count.

movies_table = [
    ['Побег из Шоушенка', 'США', 1994, 'драма', 142, 9.111],
    ['Крёстный отец', 'США', 1972, 'драма, криминал', 175, 8.730],
    ['Тёмный рыцарь', 'США', 2008, 'фантастика, боевик, триллер', 152, 8.499],
    ['Список Шиндлера', 'США', 1993, 'драма', 195, 8.818],
    ['Властелин колец: Возвращение Короля', 'Новая Зеландия', 2003, 'фэнтези, приключения, драма', 201, 8.625],
    ['Криминальное чтиво', 'США', 1994, 'триллер, комедия, криминал', 154, 8.619],
    ['Хороший, плохой, злой', 'Италия', 1966, 'вестерн', 178, 8.521],
    ['Бойцовский клуб', 'США', 1999, 'триллер, драма, криминал', 139, 8.644],
    ['Харакири', 'Япония', 1962, 'драма, боевик, история', 133, 8.106],
    ['Сталкер', 'СССР', 1979, 'фантастика, драма, детектив', 163, 8.083],
    ['Иди и смотри', 'СССР', 1985, 'драма, военный', 136, 8.094]
]

after_ninety_count = 0 # присвойте начальное значение

# напишите ваш код здесь
for movies in movies_table:
    if movies[2] > 1990:
        after_ninety_count += 1

print(after_ninety_count)

Задание №3

Посчитайте среднее значение рейтинга драм. Для этого вычислите сумму рейтингов всех драм и разделите её на количество драм. Результат выведите на экран.

movies_table = [
    ['Побег из Шоушенка', 'США', 1994, 'драма', 142, 9.111],
    ['Крёстный отец', 'США', 1972, 'драма, криминал', 175, 8.730],
    ['Тёмный рыцарь', 'США', 2008, 'фантастика, боевик, триллер', 152, 8.499],
    ['Список Шиндлера', 'США', 1993, 'драма', 195, 8.818],
    ['Властелин колец: Возвращение Короля', 'Новая Зеландия', 2003, 'фэнтези, приключения, драма', 201, 8.625],
    ['Криминальное чтиво', 'США', 1994, 'триллер, комедия, криминал', 154, 8.619],
    ['Хороший, плохой, злой', 'Италия', 1966, 'вестерн', 178, 8.521],
    ['Бойцовский клуб', 'США', 1999, 'триллер, драма, криминал', 139, 8.644],
    ['Харакири', 'Япония', 1962, 'драма, боевик, история', 133, 8.106],
    ['Сталкер', 'СССР', 1979, 'фантастика, драма, детектив', 163, 8.083],
    ['Иди и смотри', 'СССР', 1985, 'драма, военный', 136, 8.094]
]

drama_rating_total = 0 # переменная для суммарного рейтинга драм
drama_rating_count = 0 # переменная для количества драм

# напишите ваш код здесь
for drama in movies_table:
    if 'драма' in drama[3]:
        drama_rating_count += 1
        drama_rating_total += drama[5]

# здесь разделите суммарный рейтинг на количество и выведите результат на экран
print(drama_rating_total/drama_rating_count)

 6.9 Заключение

В этой теме вы поработали с условным оператором. Условный оператор if входит в конструкцию if..elif..else. С помощью конструкции с условным оператором можно создать несколько веток кода, которые Python выполнит или пропустит. Теперь вы знаете, что: Алгоритм может предполагать разные пути, почти как в сказке: «Направо пойдёшь — коня потеряешь, прямо пойдёшь...» Чтобы создать несколько веток кода, нужно использовать логическое выражение и условный оператор. Ветвление бывает разной сложности: условный оператор с одной ветвью (if); условный оператор с двумя ветвями (if...else); условный оператор с несколькими ветвями (if...elif или if...elif...else). Чтобы ничего не забыть, скачайте шпаргалку темы. 

 6.10  Проверочные задания. Условный оператор

Проверочные задания.

Условный оператор. Цикл while Чтобы пройти тест нужно правильно ответить на 5 вопросов из 9. Время на прохождение: 10 минут

 

Задание 1 из 10

Какие предложения можно назвать логическими высказываниями? Выберите несколько вариантов.

Правильный ответ Адам Левин является солистом группы Maroon 5.

Правильный ответ Фильм «Сыщик» вышел в 1972 году.

Попробуйте задать вопрос: «Может ли это предложение быть истинным или ложным?». Про высказывания с просьбой, приказом или вопросом так сказать нельзя, поэтому их не считают логическими. Третье и четвёртое высказывания логическими назвать можно. И неважно, что фильм «Сыщик» вышел в 1979 году — предложение всё равно останется логическим высказыванием.

Задание 2 из 10

Данные какого типа возвращают логические выражения?

Правильный ответ bool

Логические выражения возвращают True или False. Это булевы значения, их тип — bool.

Задание 3 из 10

Выберите логические операторы, которые используют в Python.

Правильный ответ and

Правильный ответ not

Комбинировать условия в коде полезно. Так можно фильтровать данные или уточнять алгоритм. Для таких инструкций используют логические операторы. В Python их три: and, or и not. Операторы and и or объединят логические выражения, а оператор not поменяет значение выражения на противоположное. Правила, по которым действуют операторы, лучше запомнить.

Задание 4 из 10

В какой части условной конструкции указывают логическое выражение — условие?

Правильный ответ В заголовке условной конструкции

Условные конструкции состоят из разных веток кода, и в них легко запутаться. Поэтому правильный синтаксис так важен. В условных конструкциях две части: заголовок и тело. В заголовке указывают условие, а в теле — инструкции, которые выполняются в зависимости от условия.

Задание 5 из 10

Как называют такую форму условной конструкции? price = 999 if price >= 1000: print('Дорого! :(') else: print('Норм цена! :)')

Правильный ответ Полной

Условную конструкцию с веткой else называют полной. Такая конструкция охватывает все случаи: если условие из первой ветки не выполняется, в дело вступает ветка с else.

Задание 6 из 10

Как называют такую форму условной конструкции? passengers_amount = 10 if passengers_amount > 8: print('Перегрузка лифта!')

Правильный ответ Неполной

В этой конструкции нет ветви на случай, если логическое выражение вернёт False. Такие конструкции называют неполными. Они тоже полезны: если пассажиров больше 8, нужно сообщить о перегрузке лифта. Если их меньше, то ничего выводить не нужно.

Задание 7 из 10

Сколько ветвей может включать условная конструкция?

Правильный ответ Любое количество

Количество ветвей в конструкции не ограничено. С помощью ключевого слова elif можно добавить сколько угодно дополнительных условий. Главное — не переборщить, иначе в коде будет не разобраться. Например, так станет сложнее проследить, что условия не перекрывают друг друга.

Задание 8 из 10

Во вложенном списке указаны названия треков и их продолжительность. Какой код отберёт треки длиннее 210 секунд и сложит их продолжительность? tracks = [ ['Love Planet', 270], ['Dove', 291], ['Seen Change', 55], ['Home', 195] ]

Правильный ответ

tracks_length_count = 0

for track in tracks: if track[1] > 210: tracks_length_count += track[1]

Отобрать нужные значения поможет конструкция с условным оператором if. А для сложения используйте уже знакомую переменную-счётчик. Не забудьте, что такую переменную объявляют до запуска цикла. Иначе счётчик будет перезаписываться на каждой итерации.

Задание 9 из 10

Теперь добавили новый столбец с жанром. Какой код отберёт поп-треки длиннее 210 секунд и сложит их продолжительность? tracks = [ ['Donna', 'pop', 242], ['Dove', 'indie', 291], ['Pleasure To Meet You', 'pop', 255], ['Home', 'jazz', 195] ]

Правильный ответ

pop_tracks_length_count = 0

for track in tracks: if track[1] == 'pop' and track[2] > 210: pop_tracks_length_count += track[2]

С помощью условных операторов можно фильтровать данные по нескольким параметрам сразу. Например, отобрать треки и по длительности, и по жанру одновременно. Для такой задачи нужен оператор and, тогда оба условия будут соблюдены.

Следующая тема: БРу. Функции

Вернуться в раздел: Базовый Python

Вернуться в оглавление: Я.Практикум