6 лаба. Лабораторная работа 6 Ветвление и циклы Условный оператор
Скачать 140.49 Kb.
|
while True: print ( "Введите положительное число:" ) n = int ( input() ) if n > 0: break Цикл, который начинается с заголовка while True будет выполняться бесконечно, потому что условие True всегда истинно. Выйти из такого цикла можно только с помощью специального оператора break (в переводе с англ. – «прервать», досрочный выход из цикла). В данном случае он сработает тогда, когда станет истинным условие n > 0, то есть тогда, когда пользователь введет допустимое значение. Цикл с переменной Вернёмся снова к задаче, которую мы обсуждали в начале параграфа – вывести на экран 10 раз слово «привет». Фактически нам нужно организовать цикл, в котором блок операторов вы-полнится заданное число раз (в некоторых языках такой цикл есть, например, в школьном алго-ритмическом языке он называется «цикл N раз»). На языке Python подобный цикл записывается так: for i in range(10): print ( "Привет!" ) Здесь слово for означает «для», переменная i (её называют переменной цикла) изменяется в диапазоне (in range) от 0 до 10, не включая 10 (то есть от 0 до 9 включительно). Таким образом, цикл выполняется ровно 10 раз. информатике важную роль играют степени числа 2 (2, 4, 8, 16 и т.д.) Чтобы вывести все степени двойки от 21 до 210 мы уже можем написать такую программу с циклом «пока»: k = 1 while k <= 10 : print ( 2**k ) k += 1 Вы наверняка заметили, что переменная k используется трижды (см. выделенные блоки): в опе-раторе присваивания начального значения, в условии цикла и в теле цикла (увеличение на 1). Цикл с переменной «собирает» все действия с ней в один оператор: for k in range(1,11): print ( 2**k ) Здесь диапазон (range) задается двумя числами – начальным и конечным значением, причем указанное конечное значение не входит в диапазон. Такова особенность функции range в Python. Шаг изменения переменной цикла по умолчанию равен 1. Если его нужно изменить, указы-вают третье (необязательное) число в скобках после слова range – нужный шаг. Например, такой цикл выведет только нечётные степени числа 2 (21, 23 и т.д.): for k in range(1,11,2): print ( 2**k ) каждым шагом цикла переменная цикла может не только увеличиваться, но и уменьшать-ся. Для этого начальное значение должно быть больше конечного, а шаг – отрицательный. Сле- дующая программа печатает квадраты натуральных чисел от 10 до 1 в порядке убывания: for k in range(10,0,-1): print ( k**2 ) Вложенные циклы более сложных задачах часто бывает так, что на каждом шаге цикла нужно выполнять об-работку данных, которая также представляет собой циклический алгоритм. В этом случае получа-ется конструкция «цикл в цикле» или «вложенный цикл». Предположим, что нужно найти все простые числа в интервале от 2 до 1000. Простейший (но не самый быстрый) алгоритм решения такой задачи на псевдокоде выглядит так:
for n in range(2,1001): if число n простое: print ( n ) Как же определить, что число простое? Как известно, простое число делится только на 1 и само на себя. Если число n не имеет делителей в диапазоне от 2 до n-1, то оно простое, а если хотя бы один делитель в этом интервале найден, то составное. Чтобы проверить делимость числа n на некоторое число k, нужно взять остаток от деления n на k. Если этот остаток равен нулю, то n делится на k. Таким образом, программу можно запи-сать так (здесь n, k и count – целочисленные переменные, count обозначает счётчик делите-лей): for n in range(2,1001): count = 0 for k in range(2,n): if n % k == 0: count += 1 if count == 0: print ( n ) Чтобы еще ускорить работу цикла, заметим, что когда найден хотя бы один делитель, число уже заведомо составное, и искать другие делители в данной задаче не требуется. Поэтому можно за-кончить цикл. Для этого при n%k == 0 выполним досрочный выход из цикла с помощью операто-ра break, причём переменная count уже не нужна: k = 2 while k*k <= n: if n % k == 0: break k += 1 if k*k > n: print ( n ) Если после завершения цикла k*k>n (нарушено условие в заголовке цикла), то число n простое. В любом вложенном цикле переменная внутреннего цикла изменяется быстрее, чем пере- менная внешнего цикла. Рассмотрим, например, такой вложенный цикл: for i in range(1,5): for k in range(1,i+1): print ( i, k ) На первом шаге (при i=1) переменная k принимает единственное значение 1. Далее, при i=2 переменная k принимает последовательно значения 1 и 2. На следующем шаге при i=3 пе-ременная k проходит значения 1, 2 и 3, и т.д. Контрольные вопросы Что такое цикл? Сравните цикл с переменной и цикл с условием. Какие преимущества и недостатки есть у каждого из них? Что означает выражение «цикл с предусловием»? В каком случае цикл с предусловием не выполняется ни разу? В каком случае программа, содержащая цикл с условием, может зациклиться? В каком случае цикл с переменной не выполняется ни разу? Верно ли, что любой цикл с переменной можно заменить циклом с условием? Верно ли об-ратное утверждение? В каком случае можно заменить цикл с условием на цикл с переменной? Как будет работать приведенная программа, которая считает количество цифр введённого числа, при вводе отрицательного числа? Если вы считаете, что она работает неправильно, укажите, как её нужно доработать.
Задачи и задания Найдите ошибку в программе: k = 0 while k < 10: print ( "привет" ) Как её можно исправить? Напишите программу, которая вводит два целых числа и находит их произведение, не ис-пользуя операцию умножения. Учтите, что числа могут быть отрицательными. Напишите программу, которая вводит натуральное число N и находит сумму всех натураль-ных чисел от 1 до N. Используйте сначала цикл с условием, а потом – цикл с переменной. Напишите программу, которая вводит натуральное число N и выводит первые N чётных на-туральных чисел. Напишите программу, которая вводит натуральные числа a и b, и выводит квадраты нату-ральных чисел в интервале от a до b. Например, если ввести 4 и 5, программа должна вы- вести 4*4=16 5*5=25 Напишите программу, которая вводит натуральные числа a и b, и выводит сумму квадратов натуральных чисел в интервале от a до b. Напишите программу, которая вводит натуральное число N и выводит на экран N псевдослу-чайных чисел. Запустите её несколько раз, объясните результаты опыта. Напишите программу, которая строит последовательность из N случайных чисел на отрезке от 0 до 1 и определяет, сколько из них попадает на отрезки [0; 0,25), [0,25; 0,5), [0,5; 0,75) и [0,75; 1). Сравните результаты, полученные при N = 10, 100, 1000, 10000. Найдите все пятизначные числа, которые при делении на 133 дают в остатке 125, а при де-лении на 134 дают в остатке 111. Напишите программу, которая вводит натуральное число N и выводит на экран все нату-ральные числа, не превосходящие N и делящиеся на каждую из своих цифр. Числа Армстронга. Натуральное число называется числом Армстронга,если сумма цифр числа, возведенных в N-ную степень (где N – количество цифр в числе) равна самому числу. Например, 153 = 13 + 53 + 33. Найдите все трёхзначные и четырёхзначные числа Армстронга. Автоморфные числа. Натуральное число называется автоморфным,если оно равно по-следним цифрам своего квадрата. Например, 252 = 625. Напишите программу, которая вво-дит натуральное число N и выводит на экран все автоморфные числа, не превосходящие N. Напишите программу, которая считает количество чётных цифр введённого числа. Напишите программу, которая считает сумму цифр введённого числа. Напишите программу, которая определяет, верно ли, что введённое число содержит две одинаковых цифры, стоящие рядом Напишите программу, которая определяет, верно ли, что введённое число состоит из оди-наковых цифр *Напишите программу, которая определяет, верно ли, что введённое число содержит по крайней мере две одинаковых цифры, возможно, не стоящие рядом
|