Главная страница

6 лаба. Лабораторная работа 6 Ветвление и циклы Условный оператор


Скачать 140.49 Kb.
НазваниеЛабораторная работа 6 Ветвление и циклы Условный оператор
Анкор6 лаба
Дата01.12.2021
Размер140.49 Kb.
Формат файлаdocx
Имя файлаLab_6.docx
ТипЛабораторная работа
#287915
страница1 из 4
  1   2   3   4



Лабораторная работа №6

Ветвление и циклы
Условный оператор
Возможности, описанные в предыдущей лабораторной, позволяют писать линейные програм-мы, в которых операторы выполняются последовательно друг за другом, и порядок их выполне-ния не зависит от входных данных.


  • большинстве реальных задач порядок действий может несколько изменяться, в зависимо-сти от того, какие данные поступили. Например, программа для системы пожарной сигнализации должна выдавать сигнал тревоги, если данные с датчиков показывают повышение температуры или задымленность.


Для этой цели в языках программирования предусмотрены условные операторы. Например, для того, чтобы записать в переменную M максимальное из значений переменных a и b, можно
использовать оператор:

if a > b:




M = a

else:

M = b
Слово if переводится с английского языка как «если», а слово else – как «иначе». Если верно (истинно) условие, записанное после ключевого слова if, то затем выполняются все команды (блок команд), которые расположены до слова else. Если же условие после if неверно (ложно), выполняются команды, стоящие после else.


    • Python, в отличие от других языков, важную роль играют сдвиги операторов относительно левой границы (отступы). Обратите внимание, что слова if и else начинаются на одном уровне,




  • все команды внутренних блоков сдвинуты относительно этого уровня вправо на одно и то же расстояние. Это позволяет не использовать особые ограничители блоков (слова begin и end в языке Паскаль, фигурные скобки в Си-подобных языках). Для сдвига используют символы табуля-ции (которые вставляются при нажатии на клавишу Tab) или пробелы.

Если в блоке всего один оператор, иногда бывает удобно записать блок в той же строке, что

и ключевое слово if (else):

if a > b: M = a




else: M = b


Или иначе








M = a




if b > a:

M = b
Здесь использован условный оператор в неполной форме, потому что в случае, когда условие ложно, ничего делать не требуется (нет слова else и блока операторов после него).
Поскольку операция выбора максимального из двух значений нужна очень часто, в Python есть встроенная функция max8, которая вызывается так:

M = max ( a, b )


Если выбирается максимальное из двух чисел, можно использовать особую форму условного опе-ратора в Python:

M = a if a > b else b



которая работает так же, как и приведённый выше условный оператор в полной форме: записыва-ет в переменную M значение a, если выполняется условие a > b, и значение b, если это условие ложно.
Часто при каком-то условии нужно выполнить сразу несколько действий. Например, в зада-че сортировки значений переменных a и b по возрастанию нужно поменять местами значения
этих переменных, если a > b:

if a > b:




c = a

a = b

b = c
Все операторы, входящие в блок, сдвинуты на одинаковое расстояние от левого края. Заметим, что в Python, в отличие от многих других языков программирования, есть множественное при-сваивание, которое позволяет выполнить эту операцию значительно проще:

a, b = b, a



Кроме знаков < и >, в условиях можно использовать другие знаки отношений: <= (меньше или равно), >= (больше или равно), == (равно, два знака «=» без пробела, чтобы отличить от опе-рации присваивания) и != (не равно).
Внутри условного оператора могут находиться любые операторы, в том числе и другие ус-ловные операторы. Например, пусть возраст Андрея записан в переменной a, а возраст Бориса – в переменной b. Нужно определить, кто из них старше. Одним условным оператором тут не обой-тись, потому что есть три возможных результата: старше Андрей, старше Борис и оба одного воз-
раста. Решение задачи можно записать так:

if a > b:




print ( "Андрей старше" )

else:

if a == b:

print ( "Одного возраста" )

else:

print ( "Борис старше" )
Условный оператор, проверяющий равенство, находится внутри блока иначе (else), поэтому он называется вложенным условным оператором. Как видно из этого примера, использование вло-женных условных операторов позволяет выбрать один из нескольких (а не только из двух) вариан-тов. Если после else сразу следует еще один оператор if, можно использовать так называемое «каскадное» ветвление с ключевыми словами elif (сокращение от else-if): если очередное
условие ложно, выполняется проверка следующего условия и т.д.

if a > b:




print ( "Андрей старше" )

elif a == b:

print ( "Одного возраста" )

else:



  1. Есть также и аналогичная функция min, которая выбирает минимальное из двух или нескольких значений.




print ( "Борис старше" )




Обратите внимание на отступы: слова if, elif и else находятся на одном уровне.

Если в цепочке if-elif-elif-… выполняется несколько условий, то срабатывает первое
из них. Например, программа

if cost < 1000:




print ( "Скидок нет." )
elif cost < 2000:

print ( "Скидка 2%." )

elif cost < 5000:

print ( "Скидка 5%." )

else:

print ( "Скидка 10%." )
при cost = 1500 выдает «Скидка 2%.», хотя условие cost < 5000 тоже выполняется.
Сложные условия
Предположим, что ООО «Рога и Копыта» набирает сотрудников, возраст которых от 25 до 40 лет включительно. Нужно написать программу, которая запрашивает возраст претендента и выда-ет ответ: «подходит» он или «не подходит» по этому признаку.
На качестве условия в условном операторе можно указать любое логическое выражение, в том числе сложное условие, составленное из простых отношений с помощью логических опера-ций (связок) «И», «ИЛИ» и «НЕ» (см. главу 3). В языке Python они записываются английскими сло-вами «and», «or» и «not».
Пусть в переменной v записан возраст сотрудника. Тогда нужный фрагмент программы бу-дет выглядеть так:

if v >= 25 and v <= 40:




print ( "подходит" )

else:
print ( "не подходит" )
При вычислении сложного логического выражения сначала выполняются отношения (<, <=, >, >=, ==, !=) а затем – логические операции в таком порядке: сначала все операции not, затем – and,


  • в самом конце – or (во всех случаях – слева направо). Для изменения порядка действий исполь-зуют круглые скобки.


Иногда условия получаются достаточно длинными и их хочется перенести на следующую строку. Сделать это в Python можно двумя способами: использовать обратный слэш (это не реко-
мендуется):

if v >= 25 \




and v <= 40:

...
или взять все условие в скобки (перенос внутри скобок разрешён):

if ( v >= 25




and v <= 40 ):

...


  • языке Python разрешены двойные неравенства, например if A < B < C:


...




означает то же самое, что и

if A < B and B < C:




...



  • Контрольные вопросы




    1. Чем отличаются разветвляющиеся алгоритмы от линейных?

    2. Как вы думаете, почему не все задачи можно решить с помощью линейных алгоритмов?




    1. Как вы думаете, хватит ли линейных алгоритмов и ветвлений для разработки любой про-граммы?




    1. Почему нельзя выполнить обмен значений двух переменных в два шага: a=b; b=a?



  1. Чем отличаются условные операторы в полной и неполной формах? Как вы думаете, можно ли обойтись только неполной формой?




  1. Какие отношения вы знаете? Как обозначаются отношения «равно» и «не равно»?

  2. Как организовать выбор из нескольких вариантов?

  3. Что такое сложное условие?

  4. Как определяется порядок вычислений в сложном условии?


Задачи и задания


  1. Покажите, что приведенная программа не всегда верно определяет максимальное из трёх

чисел, записанных в переменные a , b и c :

if

a > b: M = a

else:

M = b

if

c > b: M = c

else:

M = b











Приведите контрпример, то есть значения переменных, при котором в переменной M будет получен неверный ответ. Как нужно доработать программу, чтобы она всегда работала пра-вильно?


  1. Напишите программу, которая выбирает максимальное и минимальное из пяти введённых чисел (не используя встроенные функции min и max).




  1. Напишите программу, которая определяет, верно ли, что введённое число – трёхзначное.




  1. Напишите программу, которая вводит номер месяца и выводит название времени года. При вводе неверного номера месяца должно быть выведено сообщение об ошибке.




  1. Напишите программу, которая вводит с клавиатуры номер месяца и определяет, сколько дней в этом месяце. При вводе неверного номера месяца должно быть выведено сообще-ние об ошибке.




  1. Напишите программу, которая вводит с клавиатуры номер месяца и день, и определяет, сколько дней осталось до Нового года. При вводе неверных данных должно быть выведено сообщение об ошибке.




  1. Напишите программу, которая вводит возраст человека (целое число, не превышающее 120) и выводит этот возраст со словом «год», «года» или «лет». Например, «21 год», «22 года», «25 лет».




  1. Напишите программу, которая вводит целое число, не превышающее 100, и выводит его




прописью, например, 21 «двадцать один».


  1. Напишите программу, которая вводит координаты точки на плоскости и определяет, попала ли эта точка в заштрихованную область.




  1. Напишите два варианта программы, которая вводит координаты точки на плоскости и опре-деляет, попала ли эта точка в заштрихованную область. Один вариант программы должен использовать сложные условия, второй – обходиться без них.






Циклические алгоритмы
Как организовать цикл?
Цикл – это многократное выполнение одинаковых действий. Доказано, что любой алгоритм может быть записан с помощью трёх алгоритмических конструкций: циклов, условных операторов и последовательного выполнения команд (линейных алгоритмов).
Подумаем, как можно организовать цикл, который 10 раз выводит на экран слово «привет». Вы знаете, что программа после запуска выполняется процессором автоматически. И при этом на каждом шаге нужно знать, сколько раз уже выполнен цикл и сколько ещё осталось выполнить. Для этого необходимо использовать ячейку памяти, в которой будет запоминаться количество вы-полненных шагов цикла (счётчик шагов). Сначала можно записать в неё ноль (ни одного шага не сделано), а после каждого шага цикла увеличивать значение ячейки на единицу. На псевдокоде алгоритм можно записать так (здесь и далее операции, входящие в тело цикла, выделяются отсту-пами):




счётчик = 0

пока счётчик != 10




print ( "Привет!" )




увеличить счётчик на 1



Возможен и другой вариант: сразу записать в счётчик нужное количество шагов, и после каждого шага цикла уменьшать счётчик на 1. Тогда цикл должен закончиться при нулевом значении счёт-чика:




счётчик = 10
пока счётчик > 0



  1   2   3   4


написать администратору сайта