Цикл while решение задач

Цикл while решение задач thumbnail

Назад в начало

Цикл while (“пока”) позволяет выполнить одну и ту же последовательность действий, пока проверяемое условие истинно. Условие записывается до тела цикла и проверяется до выполнения тела цикла. Как правило, цикл while используется, когда невозможно определить точное значение количества проходов исполнения цикла.

i = 0

while i 5:

(i)

i += 1

# Вывод:

>>> 0

>>> 1

>>> 2

>>> 3

>>> 4

Цикл while и цикл for имеют схожую структуру, НО есть одно важное различие – цикл while может быть бесконечным.

i = 0

while True:

(i)

i += 1

# Вывод:

>>> 0

>>> 1

>>> 2

>>> 3

>>> 4

# Это может продолжаться долго…

Код выше будет бесконечно печатать возрастаютщую последовательность чисел.

Цикл while можно сравнить с цикличным условным оператором.

text = ‘Hello world’

i = 0

while i len(text):

(text[i])

i += 1

# Вывод:

>>> H

>>> e

>>> l

>>> l

>>> o

>>>

>>> w

>>> o

>>> r

>>> l

>>> d

Код, приведенный выше, печатает строку посимвольно. Приведу пример аналогичного цикла for:

text = ‘Hello world’

for i in text:

(i)

# Вывод:

>>> H

>>> e

>>> l

>>> l

>>> o

>>>

>>> w

>>> o

>>> r

>>> l

>>> d

Более того, я приведу даже два цикла for!

text = ‘Hello world’

for i in range(len(text)):

(text[i])

Напомню, что отличие между двумя, приведенными выше примерами, в следующем: первый цикл проходит по элементам последовательности (в нашем случае строки), а второй – по ее индексам. Здесь также используется функция len(), которая позволяет узнать длину последовательности.

Вернемся к циклу while. Цикл while, как и цикл for, можно остановить с помощью специальной управлющей конструкции break.

j = 0

while True:

if j == 3:

(‘Выход из цикла’)

break

(j)

j += 1

# Вывод:

>>> 0

>>> 1

>>> 2

>>> Выход из цикла

Конструкция break прерывает цикл. Она очень похожа на обычное условие после ключевого слова while.

Так же есть еще одна управляющая конструкция – continue. С ее помощью мы можем не выпонять текущую итерацию (повторение) цикла и перейти сразу к следующему.

j = 0

while j 5:

j += 1

if j == 3:

(‘Пропускаем j == 3’)

continue

(j)

# Вывод:

>>> 1

>>> 2

>>> Пропускаем j == 3

>>> 4

>>> 5

Как и для цикла for, для цикла while мы можем записать конструкцию else.

from random import randint

j = 0

element = randint(0, 15)

while j 10:

j += 1

if j == element:

(‘Нашли element, он равен’, element)

break

else:

(‘Неудачная попытка’)

Примеры решения задач

Возведение числа в степень с помощью цикла while

n = int(input()) # число

k = int(input()) # степень

i = 1 # текущая степень

result = 1

while i k:

result *= n

i += 1

(result)

Сумма последовательности с помощью цикла while

n = int(input())

result = 0

i = 0

while i n:

result += i

i += 1

(result)

Ввод последовательности чисел

i = 0

while True:

n = input()

if n == ‘end’:

(‘Ввод закончен’)

(‘Было введено’, i, ‘чисел’)

break

n = int(n)

i += 1

Сумма введенных чисел

i = 0

summa = 0

while True:

n = input()

if n == ‘end’:

(‘Ввод закончен’)

(‘Было введено’, i, ‘чисел’)

(‘Их сумма равна’, summa)

break

n = int(n)

summa += n

i += 1

Решение задач

1. Дано положительное число N. Вывести все числа от 0 до N с помощью цикла while.

2. Дано положительное число N. Вывести все числа от N до 0 с помощью цикла while. Пример:

Ввод: N = 10

Вывод: 10

9

8

7

6

3. Даны два положительных числа K и N (K

4. Даны положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти длину незанятой части отрезка A (взятие остатка A % B)

5. Даны положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти количество отрезков B, размещенных на отрезке A (деление нацело A // B)

6. Дано положительное число N. Найти сумму всех четных чисел от 0 до N с помощью цикла while.

7. Даны два положительных числа K и N (K нечетных чисел от K до N с помощью цикла while.

8. Дано положительное число N. Найти факториал числа N. Факториалом числа называется произведение всех чисел от 1 до N. Например, факториал числа 5 равен 5! = 1*2*3*4*5 = 120, 2! = 1*2 = 2, 9! = 1*2*3*4*5*6*7*8*9 = 362880

9. Дано целое число N (> 0). Если оно является степенью числа 3, то вывести YES, если не является – вывести NO.

10. Дано целое число N (> 0). Найти двойной факториал N: N!! = N * (N-2) * (N-4)* …. Для решения этой задачи посмотрите на задачу 2

Сложные задачи

1. Дано целое число N (> 1). Найти наименьшее целое число K, при котором выполняется неравенство 3^K > N, где 3^K – это 3 в степени K или число 3, умноженное само на себя K раз. Например, 3^5 = 3*3*3*3*3. Ответом в задаче будет первая степень числа 3, которая больше, чем заданное число N. Например, если N=41, распишем степени числа три: 3^1 = 3; 3^2 = 3*3 = 9; 3^3 = 3*3*3 = 27; 3^4 = 3*3*3*3 = 27 * 3 = 81;. Таким образом, первая степень, в которую возвести число 3, превышающая число N – это 4.

В этой задаче нужно выполнять цикл while, пока остаток от деления на число три равен 0

2. Дано целое число N (> 0). Используя операции деления нацело и взятия остатка от деления, вывести все его цифры, начиная с самой правой (разряда единиц).

Перед решением этой задачи вспомните, как найти сумму цифр трехначного числа.

3. Даны целые положительные числа A и B. Найти их наибольший общий делитель (НОД), используя алгоритм Евклида: НОД(A, B) = НОД(B, A mod B), если B = 0; НОД(A, 0) = A.

4. Спортсмен-лыжник начал тренировки, пробежав в первый день 10 км. Каждый следующий день он увеличивал длину пробега на P процентов от пробега предыдущего дня (P – вещественное, 0

5. Дано целое число N (> 1). Последовательность чисел Фибоначчи FK определяется следующим образом: F(1) = 1, F(2) = 1, F(K) = F(K-2) + F(K-1), K = 3, 4, …. Проверить, является ли число N числом Фибоначчи. Если является, то вывести TRUE, если нет – вывести FALSE.

6. Даны положительные числа A, B, C. На прямоугольнике размера A x B размещено максимально возможное количество квадратов со стороной C (без наложений). Найти количество квадратов, размещенных на прямоугольнике. Операции умножения и деления не использовать.

7. Дано целое число N (> 1), являющееся числом Фибоначчи: N = F(K). Найти целое число K – порядковый номер числа Фибоначчи N.

Источник

Задачи цикл WHILE

Задача №1

Найти сумму и количество элементов последовательности, которые по модулю больше 0.001.

Последовательность: S = 1/2 – 2/4 + 3/8 – 4/16 + … – …

1.Откройте программу Free Pascal,Turbo Pascal и т.д. Создайте новый документ.Сохраните под именем summa1.pas

2.Присваиваем переменной sum значение ноль, переменной a=1 и b=2, так как первый элемент 1/2.

знак будет меняться через один элемент и только потом каждая из переменных будет увеличиваться.

3.Алгоритм решения задачи:

while a/b > 0.001 do

Задача №2

Вывести все квадраты натуральных чисел, не превосходящие данного числа N.

Пример: N=50 | 1 4 9 16 25 36 491.Откройте программу Free Pascal,Turbo Pascal и т.д. Создайте новый документ и сохраните под именем kvadrat.pas

2.Алгоритм решения задачи:

  1. Ввести число N.
  2. Присвоить x единицу.
  3. Пока sqr(x) < n
  4. Увеличить значение x на единицу.

Задача №3

Определить и вывести на экран цифры целого числа n.

Например:

453 mod 10 = 3,

“1 – я цифра справа равна 3”.

45 mod 10 = 5,

2 – я цифра справа равна 5,

3 – й раз;

4 mod 10 = 4,

3 – я цифра справа равна 4,

4 div 10 = 0.

1.Откройте программу Free Pascal,Turbo Pascal и т.д. Создайте новый документ.Сохраните под именем zifru.pas

2.Переменная n для целого числа, p – для цифр числа, i – счетчик цифр.

В разделе операторов

С помощью оператора write выводится на экран запрос для пользователя о вводе целого числа. Оператор readln заносит его значение в память и присваивает переменной n.

Счетчику i устанавливается первоначальное значение 1.

В операторе while записывается условие (пока n не равно 0), при котором цикл будет выполняться.

Так как в цикле несколько операторов, то используются операторные скобки

begin … end.

В них записаны операторы:

p := n mod 10; – определяется последняя цифра;

writeln(i,” – я цифра справа равна “, p); – выводится на экран порядковый номер цифры справа и сама эта цифра;

n := n div 10; – от числа “зачеркивается” последняя цифра;

i := i + 1; – счетчик увеличивается на 1.

Задача №4

Составить программу разложения натурального числа n на простые множители.

Пример: 360 = 2 2 2 3 3 5. 1.Откройте программу Free Pascal,Turbo Pascal и т.д. Создайте новый документ и сохраните под именем mnozeteli.pas

2.Алгоритм решения задачи:

В качестве первого делителя взять 2, присвоить это значение некоторой переменной i;

начать цикл “пока i <= n”;

если данное число n делится на i, тогда выдать на экран значение i и разделив данное число на i, присвоить новое значение той же переменной n (n := n div i);

далее цикл продолжить, но значение i не увеличивать на 1, а проверить деление нового значения n на прежнее значение i;

если n не делится на i, тогда i увеличить на 1 (i := i + 1) и продолжить цикл, т.е. выполнить проверку условия цикла (i <= n), а затем снова проверить деление n на уже новое значение i.

Задача №5

Написать программу, в результате выполнения которой выяснится, входит ли цифра 2 в запись данного целого числа n.

Пример: 365842. 1.Откройте программу Free Pascal,Turbo Pascal и т.д. Создайте новый документ и сохраните под именем zifra2.pas

2.Алгоритм решения задачи:

1. Начало. Переменные целого типа n, p, k: n – для вводимого числа; p – для цифр этого числа; k – счетчик, подсчитывающий количество цифр в числе, равных 2.

2. Ввод целого числа.

Счетчику k устанавливается первоначальное значение 0.

3. Цикл, пока n <> 0. В цикле, переменной p присваивать значение цифры числа.

Если p = 2, тогда увеличивать k на единицу.

Вычесть из числа n последнюю цифру и разделить его на 10.

Продолжить и закончить цикл.

4. Если k = 0, тогда выдать сообщение: “Цифра 2 не входит в запись числа”, иначе, выдать сообщение: “Цифра 2 входит в запись числа”.

5. Конец.

Задача №6

Составить программу вывода всех натуральных чисел, меньших n, квадрат суммы цифр которых равен заданному числу m.

Пример: 21 и 4, искомые числа 2,11,20. 1.Откройте программу Free Pascal,Turbo Pascal и т.д. Создайте новый документ и сохраните под именем kvadratsummu.pas

2.Алгоритм решения задачи:

1. Раздел описаний.

Переменные: n, m, k, a, p, s. Тип целый.

n – для границы значений натуральных чисел, m – для числа, с которым сравнивается квадрат суммы цифр (точный квадрат), k – для натуральных чисел от 1 до n, a – для запоминания натурального числа, перед тем, как будет определяться сумма его цифр, p – для цифр числа, s – для суммы цифр.

2. Раздел операторов.

Ввод значений n и m. Установить первоначальное значение для k (эта переменная “перебирает” все натуральные числа от 1 до n, k := 1).

Цикл, пока k <= n.

В цикле: установить первоначальные значения для суммы s (s:=0); запомнить число в переменную a (a := k).

Цикл для подсчета суммы цифр, пока k <> 0.

В цикле: выделять по одной цифре числа, известным способом; прибавлять по одной цифре к сумме; уменьшать число на последнюю цифру и на порядок.

Закончить цикл для подсчета суммы цифр.

Проверка выполнения условия.

Если квадрат суммы цифр равен заданному числу,

тогда вывести это натуральное число на экран.

Перейти к проверке следующего числа.

Закончить основной цикл проверки чисел.

3. Закончить программу.

Читайте также:  Тесты к циклу патологии

Источник

Оператор цикла WHILE

Задача 1. Дано целое число а и натуральное (целое неотрицательное) число n. Вычислить а в степени n. {Введем целую переменную k, которая меняется от 0 до n, причем поддерживается такое свойство: b = (a в степени k).}

USES Crt;

VAR

A, N, B, K : INTEGER;

BEGIN

ClrScr;

Write(‘ Введите два значения ‘); ReadLn(A,N);

K := 0; B := 1;

While K <> N DO Begin

K := K + 1; B := B * A;

End;

Write(‘ A в степени N = ‘,B);

END.

Другое решение той же задачи:

USES Crt;

VAR

A, N, B, K : INTEGER;

BEGIN

ClrScr; { Чистка экрана }

Write(‘ Введите два значения ‘); ReadLn(A,N);

K := N; B := 1;

{A в степени N = B * (A в степени K)}

While K <> 0 DO Begin

K := K – 1; B := B * A;

End;

Write(‘ A в степени N = ‘,B);

END.

Задача 2. Даны натуральные числа а, b. Вычислить произведение а*b, используя в программе лишь операции +, -, =, <>.

USES Crt;

VAR

A, B, C, K : INTEGER;

BEGIN

Write(‘ Введите два значения ‘); ReadLn(A,B);

K := 0; C := 0;

While K <> B DO Begin

K := K + 1; C := C + A;

End;

{C = A * K и K = B, следовательно, C = A * B}

Write(‘ A*B= ‘,C);

END.

Задача 3. Дано натуральное (целое неотрицательное) число A и целое положительное число D. Вычислить частное Q и остаток R при делении A на D, не используя операций DIV и MOD. (Согласно определению, А = Q * D + R, 0 <= R < D.)

USES Crt;

VAR

A, D, R, Q : INTEGER;

BEGIN

ClrScr;

Write(‘ Введите два значения ‘); ReadLn(a,d);

R := A; Q := 0;

While Not (R < D) DO Begin

R := R – D; {R >= 0}

Q := Q + 1;

End;

WriteLn(‘ Частное = ‘,Q);

WriteLn(‘ Остаток = ‘,R);

END.

Задача 4. Каждый год урожайность повышается на 5%. Через сколько лет урожай удвоится?

Читайте также:  Мо социально гуманитарного цикла

USES Crt;

VAR

YR, KL: BYTE; YRG: REAL;

Begin

ClrScr;

Write(‘Введите урожайность ‘); ReadLn(YR);

YRG:=YR;

While (YRG <2*YR) Do Begin

YRG:=YRG+0.05*YRG;

KL:=KL+1;

End;

WriteLn(‘Новый урожай ‘,YRG:5:0);

Write(‘Через ‘,KL,’ лет урожай удвоится’);

END.

Задача 5. Деду M лет, а внуку N лет. Через сколько лет дед станет вдвое старше внука. И сколько при этом лет будет деду и внуку.

USES Crt;

VAR

M,N: BYTE; Kl: BYTE;

BEGIN

ClrScr;

Write(‘Введите количество лет деда ‘); ReadLn(m);

Write(‘Введите количество лет внука ‘); ReadLn(n);

KL:=0;

While (M>2*N) DO Begin

M:=M+1; N:=N+1; KL:=KL+1;

End;

WriteLn(M,’ лет деду’);

WriteLn(N,’ лет внуку’);

WriteLn(‘Через ‘,KL,’ лет дед вдвое станет старше внука’);

END.

Задача 6. Поле засеяли цветами двух сортов на площади S1 и S2. Каждый год площадь цветов первого сорта увеличивается вдвое, а площадь второго сорта увеличивается втрое. Через сколько лет площадь первых сортов будет составлять меньше 10% от площади вторых сортов.

USES Crt;

VAR

S1,S2:WORD; KL:BYTE;

BEGIN

ClrScr;

Write(‘Введите площадь, которую засеяли цветами 1-го сорта ‘); ReadLn(S1);

Write(‘Введите площадь, которую засеяли цветами 2-го сорта ‘); ReadLn(S2);

KL:=1;

While (S1>0.1*S2) DO Begin

S1:=S1*2; S2:=S2*3; KL:=KL+1;

End;

WriteLn(‘Площадь, которую засеяли цветами 1-го сорта ‘,S1);

WriteLn(‘Площадь, которую засеяли цветами 2-го сорта ‘,S2);

WriteLn(‘Через ‘, kl,’ лет’);

END.

Задача 7. Составить программу перевода числа из 10 системы счисления в 2 систему счисления.

Для этой задачи представлено два решения.

a)

USES Crt;

VAR

DES, OST, I, DW:INTEGER;

BEGIN

ClrScr;

Write(‘Введите десятичное число ‘); ReadLn(DES);

I:=1;

While (DES>=2) DO Begin

OST:=DES mod 2;

DES:=DES div 2;

DW:=DW+OST*I;

I:=I*10;

End;

DW:=DW+DES*I;

Write(‘Двоичная запись числа ‘,DW);

END.

b)

USES Crt;

Const A=10;

VAR

DES, OST, I:INTEGER;

DW:Array[1..100] OF INTEGER;

BEGIN

ClrScr;

Write(‘Введите десятичное число ‘); ReadLn(des);

I:=1;

While (des>=2) DO Begin

OST:=DES mod 2;

DES:=DES div 2;

DW[I]:=OST;

I:=I+1;

End;

DW[I]:=DES;

FOR I:=I DownTo 1 DO

Write(DW[I]);

END.

…………………………………………………………………………………………………………………….

Практические задания

…………………………………………………………………………………………………………………….

  1. Составить программу, печатающую квадраты всех натуральных чисел от 0 до заданного натурального n.

  2. Дано натуральное n, вычислить n! (0!=1, n! = n * (n-1)!).

  3. Последовательность Фибоначчи определяется так: a(0)= 1, a(1) = 1, a(k) = a(k-1) + a(k-2) при k >= 2. Дано n, вычислить a(n).

  4. К старушке на обед ходят кошки. Каждую неделю две кошки приводят свою подружку. В доме у старушки 100 мисок. Через какое время появятся лишние кошки, и сколько кошек при этом останется голодными.

  5. Известна сумма номеров страниц, определить номер страницы.

  6. Лягушка каждый последующий прыжок делает в два раза короче предыдущего. Достигнет ли она болота и за сколько прыжков. Длину первого прыжка задайте самостоятельно.

Источник

Содержание

  • 1. Назначение оператора while. Общая форма оператора while
  • 2. Примеры решения задач на оператор while
    • 2.1. Вычисление суммы элементов списка
    • 2.2. Создать список заданной длины и записать в него заданное число
    • 2.3. Создание списка чисел по условию
  • 3. Понятие вложенной инструкции (оператора) while
  • 4. Примеры решения задач, где инструкция while есть внешней для других инструкций
    • 4.1. Подсчет количества вхождений заданной строки в списке строк
    • 4.2. Определение месяца, числа и дня недели по номеру дня в году
    • 4.3. Подсчет количества вхождений заданного символа в строке
  • 5. Примеры решения задач, в которых инструкция while есть вложенной
    • 5.1. Обнуление двумерного списка
    • 5.2. Задача о быках, коровах и телятах
  • 6. Общая форма оператора while, предусматривающего использование инструкции break
  • 7. Пример использования оператора while, предусматривающего использование инструкции break
  • Связанные темы

Поиск на других ресурсах:

1. Назначение оператора while. Общая форма оператора while

Оператор while предназначен для организации циклического процесса в программе. В языке программирования Python оператор while используется в случаях, если количество повторений цикла заранее неизвестно (в отличие от оператора for). В операторе while следующий шаг итерации цикла определяется на основе истинности некоторого условия.

Общая форма оператора while имеет вид

while условие: инструкции

здесь

  • условие – условие выполнения строки (строк) инструкции;
  • инструкции – один оператор или набор операторов, которые выполняются если значение условие=True. Если значение условие становится равным False, то происходит завершение выполнения оператора цикла while.

2. Примеры решения задач на оператор while
2.1. Вычисление суммы элементов списка

Условие задачи. Задан некоторый список A содержащий целые числа. Используя инструкцию while разработать программу, которая вычисляет сумму элементов списка.

# сформировать список и инициализировать значениями переменные A=[1,3,5,8,-3,10] i=0 summ=0 # искомая сумма # цикл вычисления суммы while i<len(A): summ=summ+A[i] i=i+1 (“summ = “, summ) # summ = 24

Для определения количества элементов списка A используется функция len(A).

В результате выполнения вышеприведенного кода будет получен результат

summ = 24

2.2. Создать список заданной длины и записать в него заданное число

В примере, с помощью цикла while, формируются два списка A и B разными способами.

# создать список элементов A=[] n=10 i=0 while i<n: # в цикле формируется список [0,1,2,3,4,5,6,7,8,9] A=A+[i] i=i+1 # сформировать новый список B=[] k=5 # число, которое записывается в список B n=4 # количество чисел # цикл while i=0 while i<n: # формируется список [5,5,5,5] B = B + [k] i=i+1 # вывести список A i=0 (“Список A:”) while i<len(A): (A[i]) i=i+1 # вывести список B i=0 (“Список B:”) while i<len(B): (B[i]) i=i+1

В результате выполнения вышеприведенного кода будет получен следующий результат

Список A: 0 1 2 3 4 5 6 7 8 9 Список B: 5 5 5 5

2.3. Создание списка чисел по условию

Условие задачи. Задано число a (1<a<1.5). Из чисел 1+1/2, 1+1/3, 1+1/4 …, напечатать те, которые не меньше a.

Решение.

a=1.08 (“Число a = “, a) n=2 t=1+1/n (“Числа, которые не меньше a:”) while t>a: (t) n=n+1 t=1+1/n (“———————–“)

В результате выполнения вышеприведенного кода будет выведен следующий результат

Число a = 1.08 Числа, которые не меньше a: 1.5 1.3333333333333333 1.25 1.2 1.1666666666666667 1.1428571428571428 1.125 1.1111111111111112 1.1 1.0909090909090908 1.0833333333333333 ———————–

3. Понятие вложенной инструкции (оператора) while

Инструкция while может иметь несколько уровней вложения. Она может быть внешней для других инструкций, например, for, if, while. Также инструкция while может размещаться внутри других инструкций (for, if, while). Количество уровней (глубина) вложений неограничено.

4. Примеры решения задач, где инструкция while есть внешней для других инструкций
4.1. Подсчет количества вхождений заданной строки в списке строк

В цикле while используется вложенная инструкция if.

# Подсчет количества вхождений заданной строки в списке строк # Входные данные LIST = [ ‘abc’, ‘bcd’, ‘xvm’, ‘abc’, ‘abd’, ‘bcd’, ‘abc’ ] ITEM = str(input(‘Введите строку: ‘)) # вычисление i=0 k=0 while i<len(LIST): if LIST[i]==ITEM: k=k+1 i=i+1 (“k = “, k)

Читайте также:  Создатель цикла произведений про девочку алису

В результате выполнения вышеприведенного кода будет получен результат

Задайте строку: bcd k = 2

4.2. Определение месяца, числа и дня недели по номеру дня в году

Задано целое число k (1<k<365). Написать фрагмент кода, который определяет:

  • каким будет k-й день года: выходной (суббота, воскресенье);
  • какая будет дата (месяц и число).

В программе использовать цикл while.

Текст программы следующий:

# входные данные (“Входные данные: “) k = int(input(‘Номер дня в году: ‘)) first_day=3 # первый день года, 3 – среда (“Первый день недели в году: “, first_day) # вспомогательный список – количество дней в месяцах года MONTHS=[31,28,31,30,31,30,31,31,30,31,30,31] # начальная инициализация перед вычислением tk=1 # текущее значение дня tday=first_day # текущий день недели tmonth=1 # текущий номер месяца tday2=1 # текущий номер дня в месяце tmonth # цикл while – вычисление while tk<k: # перейти на следующий день tday=tday+1 tday2=tday2+1 tk=tk+1 # скорректировать день недели if tday>7: tday=1 # скорректировать день месяца и номер месяца if tday2>MONTHS[tmonth-1]: tday2=1 tmonth=tmonth+1 # перейти на следующий месяц (“——————–“) (“Результат: “) (“День недели: “, tday) (“Номер месяца: “, tmonth) (“Число: “, tday2)

В вышеприведенном коде для вычисления используются дополнительные внутренние переменные (объекты) tk, tday, tmonth, td2 и список MONTHS, содержащий количество дней в любом месяце года. В примере цикл while содержит несколько вложенных инструкций присваивания и две инструкции if.

В результате выполнения вышеприведенного кода будет получен следующий результат:

Входные данные: Номер дня в году: 256 Первый день недели в году: 3 ——————– Результат: День недели: 6 Номер месяца: 9 Число: 13

Как можно увидеть, 256-й день в невисокосном году попадает на 13 сентября, который соответствует Дню программиста (а что еще может быть?).

4.3. Подсчет количества вхождений заданного символа в строке

Задан список строк. В каждой строке подсчитать количество вхождений заданного символа

Программный код на языке Python будет следующий

# количество вхождений символа в списке строк ListStr=[‘text’, ‘file’, ‘notepad’, ‘windows’, ‘hello’] c=’t’ # символ ‘t’ List=[] # количество вхождений i=0 while i<5: j=0 k=0 while j<len(ListStr[i]): if c==ListStr[i][j]: k=k+1 j=j+1 ListK=ListK+[k] i=i+1 (ListK) # ListK = [2, 0, 1, 0, 0]

После выполнения вышеприведенного кода будет получен следующий результат

[2, 0, 1, 0, 0]

5. Примеры решения задач, в которых инструкция while есть вложенной
5.1. Обнуление двумерного списка

В данном примере в инструкции while реализована другая, вложенная инструкция while. Реализуется обнуление двумерного списка чисел с использованием вложенной инструкции while

# задан некоторый список A размером 3*4 A=[ [1, 3, -2, -3], [0, 8, 1, -3], [2, 5, 3, 1]] # обнуление списка A # использование вложенного оператора while i=0 # строки while i<3: j=0 while j<len(A[i]): A[i][j]=0 j=j+1 i=i+1 # вывод списка A (“Список A:”) i=0 while i<3: j=0 while j<len(A[i]): (“A[“, i,”][“,j,”] = “, A[i][j]) j=j+1 i=i+1 (“——————–“)

5.2. Задача о быках, коровах и телятах

Условие задачи. Имеется в наличии 100 рублей. Сколько быков, коров и телят можно купить на все эти деньги, если плата за быка – 10 рублей, плата за корову – 5 рублей, плата за теленка – 0.5 рублей. Обязательно нужно купить минимум по одному экземпляру каждого вида (один бык, одна корова, один теленок). Вывести все возможные варианты оплаты.

Решение. Эта задача решается разными способами. В данном случае задача решается упрощенным для понимания способом с использованием вложенных циклов while.

# задача о быках, коровах и телятах x=1 while x<=9: y=1 while y<=19: z=1 while z<=198: cost=10*x+5*y+0.5*z if cost==100: (“x=”, x,”; y=”, y, “z=”, z) z=z+1 y=y+1 x=x+1

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

6. Общая форма оператора while, предусматривающего использование инструкции break

Оператор while имеет и другую, более полную форму использования, которая предусматривает использование инструкции break. В этом случае общая форма оператора while следующая:

while <условие1>: <инструкции1> if <условие2>: break # выйти из цикла if <условие3>: continue # перейти в начало цикла до условие1 else: <инструкции2> # выполняется, если не была использована инструкция break

здесь

  • условие1 определяет, нужно ли выполнять следующую итерацию цикла. Если значение условие1 равно True (истинно), то выполняется следующая итерация цикла;
  • условие2 определяет, должен ли выполняться оператор break;
  • условие3 определяет, должен ли выполняться оператор continue;
  • инструкции1, инструкции2 – один или несколько операторов.

Вышеприведенная форма оператора цикла while работает по следующему принципу. Сначала проверяется условие1. Если условие1 истинно (равно True), то выполняются инструкции1.

В теле оператора цикла while также проверяются условия условие2, условие3. Если выполняется условие2, то происходит выход из цикла. Если выполняется условие3, то происходит переход к следующей итерации цикла до проверки условие1.

Если в теле цикла не выполнится оператор break, то это значит, что пройдены все возможные итерации. В этом случае определяются соответствующие инструкции в блоке else оператора while.

7. Пример использования оператора while, предусматривающего использование инструкции break

В примере осуществляется поиск (определение наличия) заданного элемента в списке. Если элемент не найден, то выводится соответствующее сообщение.

# задан список List=[2,8,3,4,3,5,2,1,0,3,4,4,5,8,7,7,5] (“Заданный список:”, List) # ввод искомого елемента t = int(input(“Элемент, который нужно найти: “)) # цикл i=0 while i<len(List): if List[i]==t: (“Элемент “, t, ” есть в списке”) break i=i+1 else: (“Елемента “, t, ” нету в списке”)

В вышеприведенном цикле while условием выполнения циклического процесса есть проверка

i<len(List)

В теле цикла while проверяется, совпадает ли значение искомого элемента t со значением элемента List[i] списка

if List[i]==t: …

Если совпадение найдено, то нету смысла продолжать дальнейший обход списка. Поэтому, в теле оператора if вызывается инструкция break.

Если пройден весь список и не найден ни один элемент, то это значит, что оператор break не был выполнен ни разу. В этом случае вызывается блок else оператора while:

… else: (“Елемента “, t, ” нет в списке”)

После запуска на выполнение вышеприведенной программы, будет выведен следующий результат

Заданный список: [2, 8, 3, 4, 3, 5, 2, 1, 0, 3, 4, 4, 5, 8, 7, 7, 5] Элемент, который нужно найти: 4 Элемент 4 есть в списке

Связанные темы

  • Оператор присваивания. Формы присваивания. Примеры. Позиционное присваивание кортежей, списков
  • Инструкция (оператор) if. Определение. Примеры
  • Оператор for. Примеры

Источник