---
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)))
```
:::