--- tags: Python Step --- # Практика по теме 6. Циклы с проверкой условий На сайте http://pythontutor.ru/lessons/while/problems/list_of_squares/ решить все задачи к занятию *6. Цикл while* Выслать *архив с решениями всех задач (файлы с расширением .py) и скриншотом с сайта*, на котором видно количество решенных задач и имя текущего пользователя. ## [Задача 1. Список квадратов](http://pythontutor.ru/lessons/while/problems/list_of_squares/) По данному целому числу `N` распечатайте все квадраты натуральных чисел, не превосходящие `N`, в порядке возрастания. :::spoiler Решение ``` python N = int(input()) i = 1 while i ** 2 <= N: print(i ** 2, end = ' ') i += 1 ``` ::: ## [Задача 2. Минимальный делитель](http://pythontutor.ru/lessons/while/problems/minimal_divisor/) Дано целое число, не меньшее 2. Выведите его наименьший натуральный делитель, отличный от 1. :::spoiler Решение ``` python a = int(input()) b = 2 while a % b != 0: b += 1 print(b) ``` ::: ## [Задача 3. Степень двойки](http://pythontutor.ru/lessons/while/problems/minimal_divisor/) По данному натуральному числу N найдите наибольшую целую степень двойки, не превосходящую N. Выведите показатель степени и саму степень. Операцией возведения в степень пользоваться нельзя! :::spoiler Решение ``` python n = int(input()) a = 1 a_in_power = 2 while n >= a_in_power: a += 1 a_in_power *= 2 print(a-1, a_in_power // 2) ``` ::: ## [Задача 4. Утренняя пробежка](http://pythontutor.ru/lessons/while/problems/running/) В первый день спортсмен пробежал `x` километров, а затем он каждый день увеличивал пробег на 10% от предыдущего значения. По данному числу `y` определите номер дня, на который пробег спортсмена составит не менее `y` километров. Программа получает на вход действительные числа `x` и `y` и должна вывести одно натуральное число. :::spoiler Решение ``` python x = float(input()) y = float(input()) d = 1 while x < y: x *= 1.1 d += 1 print(d) ``` ::: ## [Задача 5. Длина последовательности](http://pythontutor.ru/lessons/while/problems/seq_len/) Программа получает на вход последовательность целых неотрицательных чисел, каждое число записано в отдельной строке. Последовательность завершается числом 0, при считывании которого программа должна закончить свою работу и вывести количество членов последовательности (не считая завершающего числа 0). Числа, следующие за числом 0, считывать не нужно. :::spoiler Решение ``` python number = int(input()) count = 0 while number != 0: count += 1 number = int(input()) print(count) ``` ::: ## [Задача 6. Сумма последовательности](http://pythontutor.ru/lessons/while/problems/seq_sum/) Определите сумму всех элементов последовательности, завершающейся числом 0. В этой и во всех следующих задачах числа, следующие за первым нулем, учитывать не нужно. :::spoiler Решение ``` python number = int(input()) sum = 0 while number != 0: sum += number number = int(input()) print(sum) ``` ::: ## [Задача 7. Среднее значение последовательности](http://pythontutor.ru/lessons/while/problems/seq_avg/) Определите среднее значение всех элементов последовательности, завершающейся числом 0. :::spoiler Решение ``` python number = int(input()) count, sum = 0, 0 while number != 0: count += 1 sum += number number = int(input()) print(sum / count) ``` ::: ## [Задача 8. Максимум последовательности](http://pythontutor.ru/lessons/while/problems/seq_max/) Последовательность состоит из натуральных чисел и завершается числом 0. Определите значение наибольшего элемента последовательности. :::spoiler Решение ``` python number = int(input()) max = number while number != 0: number = int(input()) if number > max: max = number print(max) ``` ::: ## [Задача 9. Индекс максимума последовательности](http://pythontutor.ru/lessons/while/problems/seq_index_of_max/) Последовательность состоит из натуральных чисел и завершается числом 0. Определите индекс наибольшего элемента последовательности. Если наибольших элементов несколько, выведите индекс первого из них. Нумерация элементов начинается с нуля. :::spoiler Решение ``` python number = int(input()) count = 0 max = number max_index = 0 while number != 0: number = int(input()) count += 1 if number > max: max, max_index = number, count print(max_index) ``` ::: ## [Задача 10. Количество четных элементов последовательности](http://pythontutor.ru/lessons/while/problems/seq_num_even/) Определите количество четных элементов в последовательности, завершающейся числом 0. :::spoiler Решение ``` python number = int(input()) count = 0 while number != 0: if number % 2 == 0: count += 1 number = int(input()) print(count) ``` ::: ## [Задача 11. Количество элементов, которые больше предыдущего](http://pythontutor.ru/lessons/while/problems/seq_increasing_neighbours/) Последовательность состоит из натуральных чисел и завершается числом 0. Определите, сколько элементов этой последовательности больше предыдущего элемента. :::spoiler Решение ``` python count = 0 prev = int(input()) number = int(input()) while number != 0: if number > prev: count += 1 prev = number number = int(input()) print(count) ``` ::: ## [Задача 12. Второй максимум](http://pythontutor.ru/lessons/while/problems/seq_second_max/) Последовательность состоит из различных натуральных чисел и завершается числом 0. Определите значение второго по величине элемента в этой последовательности. Гарантируется, что в последовательности есть хотя бы два элемента. :::spoiler Решение ``` python max = max2nd = 0 number = int(input()) while number != 0: if number > max: max, max2nd = number, max elif number > max2nd: max2nd = number number = int(input()) print(max2nd) ``` ::: ## [Задача 13. Количество элементов, равных максимуму](http://pythontutor.ru/lessons/while/problems/seq_num_maximal/) Последовательность состоит из натуральных чисел и завершается числом 0. Определите, сколько элементов этой последовательности равны ее наибольшему элементу. :::spoiler Решение ``` python max = count = 0 number = int(input()) while number != 0: if number > max: max = number count = 1 elif number == max: count += 1 number = int(input()) print(count) ``` ::: ## [Задача 14. Числа Фибоначчи](http://pythontutor.ru/lessons/while/problems/kth_fibonacci/) Последовательность Фибоначчи определяется так: $$ \phi_0 = 0, \phi_1 = 1, \phi_n = \phi_{n-1} + \phi_{n-2} $$ По данному числу _n_ определите _n_-е число Фибоначчи _φ<sub>n</sub>_. Эту задачу можно решать и циклом `for`. :::spoiler Решение ``` python n = int(input()) if n < 2: print(n) else: prev, prev2 = 1, 0 for _ in range(2, n + 1): number = prev + prev2 prev, prev2 = number, prev print(number) ``` ::: ## [Задача 15. Номер числа Фибоначчи](http://pythontutor.ru/lessons/while/problems/is_fibonacci/) Дано натуральное число `A`. Определите, каким по счету числом Фибоначчи оно является, то есть выведите такое число `n`, что $\phi_n = A$. Если `А` не является числом Фибоначчи, выведите число -1. :::spoiler Решение ``` python A = int(input()) if A == 1: print(1) else: number, prev, prev2 = 1, 1, 0 n = 1 while number < A: number = prev + prev2 prev, prev2 = number, prev n += 1 if number == A: print(n) break else: print(-1) ``` ::: ## [Задача 16. Максимальное число идущих подряд равных элементов](http://pythontutor.ru/lessons/while/problems/seq_max_chunk_of_repetitions/) Дана последовательность натуральных чисел, завершающаяся числом 0. Определите, какое наибольшее число подряд идущих элементов этой последовательности равны друг другу. :::spoiler Решение ``` python prev = count = 0 max = 1 number = int(input()) while number != 0: if number == prev: count += 1 if count > max: max = count else: count = 1 number, prev = int(input()), number print(max) ``` ::: ## [Задача 17. Стандартное отклонение](http://pythontutor.ru/lessons/while/problems/std_dev/) Дана последовательность натуральных чисел $x_1, x_2, \dots, x_n$. *Стандартным отклонением* называется величина $$ \sigma = \sqrt{\frac{(x_1 - s)^2 + (x_2 - s)^2 + \dots + (x_n - s)^2}{n - 1}} $$ где $s = \frac{x_1 + x_2+ \dots +x_n}{n}$ -- среднее арифметическое последовательности. Определите стандартное отклонение для данной последовательности натуральных чисел, завершающейся числом 0. :::spoiler Решение ``` python import math n = sum_x = sum_x2 = 0 number = int(input()) while number != 0: n += 1 sum_x += number sum_x2 += number ** 2 number = int(input()) s = sum_x / n print(math.sqrt((sum_x2 - 2 * s * sum_x + n * (s ** 2)) / (n - 1))) ``` :::