Следующая тема: БРу. Функции
Вернуться в раздел: Базовый 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
Вернуться в оглавление: Я.Практикум