diff --git a/.idea/algorithms-python-17-04-21.iml b/.idea/algorithms-python-17-04-21.iml
new file mode 100644
index 0000000..74d515a
--- /dev/null
+++ b/.idea/algorithms-python-17-04-21.iml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..105ce2d
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..81dd32a
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..c95a575
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 0000000..61372dc
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,250 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1618919133612
+
+
+ 1618919133612
+
+
+ 1619006548469
+
+
+
+ 1619006548469
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/task1.py b/task1.py
new file mode 100644
index 0000000..48b6280
--- /dev/null
+++ b/task1.py
@@ -0,0 +1,66 @@
+"""
+1. Написать программу, которая будет складывать, вычитать, умножать или делить
+два числа. Числа и знак операции вводятся пользователем. После выполнения
+вычисления программа не должна завершаться, а должна запрашивать новые данные
+для вычислений. Завершение программы должно выполняться при вводе символа '0'
+в качестве знака операции. Если пользователь вводит неверный знак
+(не '0', '+', '-', '*', '/'), то программа должна сообщать ему об ошибке и
+снова запрашивать знак операции.
+Также сообщать пользователю о невозможности деления на ноль,
+если он ввел 0 в качестве делителя.
+Подсказка:
+Вариант исполнения:
+- условие рекурсивного вызова - введена операция +, -, *, / - ШАГ РЕКУРСИИ
+- условие завершения рекурсии - введена операция 0 - БАЗОВЫЙ СЛУЧАЙ
+Пример:
+Введите операцию (+, -, *, / или 0 для выхода): +
+Введите первое число: 214
+Введите второе число: 234
+Ваш результат 448
+Введите операцию (+, -, *, / или 0 для выхода): -
+Введите первое число: вп
+Вы вместо трехзначного числа ввели строку (((. Исправьтесь
+Введите операцию (+, -, *, / или 0 для выхода):
+Решите через рекурсию. Решение через цикл не принимается.
+Для оценки Отлично в этом блоке необходимо выполнить 5 заданий из 7
+"""
+
+
+def int_input(txt):
+ try:
+ return int(input(txt))
+ except ValueError:
+ return int_input(txt)
+
+
+def dev_input(txt):
+ data = int_input(txt)
+ if data == 0:
+ print('Делить на 0 нельзя!')
+ return dev_input(txt)
+ else:
+ return data
+
+
+def input_check(txt, poss_val):
+ data = input(txt)
+ if data in poss_val:
+ return data
+ else:
+ return input_check(txt, poss_val)
+
+
+def calc():
+ operation = input_check('Введите операцию (+, -, *, / или 0 для выхода): ', ['+', '-', '*', '/', '0'])
+ if operation == '0':
+ return
+ else:
+ first = int_input('Введите первое число: ')
+ if operation == '/':
+ second = dev_input('Введите второе число: ')
+ else:
+ second = int_input('Введите второе число: ')
+ print(f'Результат: {eval(f"{first} {operation} {second}")}')
+ calc()
+
+calc()
diff --git a/task2.py b/task2.py
new file mode 100644
index 0000000..4158628
--- /dev/null
+++ b/task2.py
@@ -0,0 +1,39 @@
+"""
+2. Посчитать четные и нечетные цифры введенного натурального числа.
+Например, если введено число 34560, то у него 3 четные цифры
+(4, 6 и 0) и 2 нечетные (3 и 5).
+Подсказка:
+На каждом шаге вам нужно 'доставать' из числа очередную цифру
+и смотреть является ли она четной или нечетной. При этом увеличиваем соответствующий счетчик
+Пока все числа не извлечены рекурсивные вызовы продолжаем
+Условие завершения рекурсии - все числа извлечены
+Используем операции % //, НЕ ИСПОЛЬЗУЕМ ОПЕРАЦИИ ВЗЯТИЯ ЭЛЕМЕНТА ПО ИНДЕКСУ
+Пример:
+Введите число: 123
+Количество четных и нечетных цифр в числе равно: (1, 2)
+Решите через рекурсию. Решение через цикл не принимается.
+Для оценки Отлично в этом блоке необходимо выполнить 5 заданий из 7
+"""
+
+
+def int_input(txt):
+ try:
+ return int(input(txt))
+ except ValueError:
+ return int_input(txt)
+
+
+def even_odd_count(num):
+ odd_count = 0
+ even_count = 0
+ if num // 10 == 0:
+ if num % 2 == 0:
+ even_count += 1
+ else:
+ odd_count += 1
+ return [odd_count, even_count]
+ else:
+ return [even_odd_count(num // 10)[0] + even_odd_count(num % 10)[0],
+ even_odd_count(num // 10)[1] + even_odd_count(num % 10)[1]]
+
+print(even_odd_count(int_input('Введите число: ')))
diff --git a/task3.py b/task3.py
new file mode 100644
index 0000000..5363118
--- /dev/null
+++ b/task3.py
@@ -0,0 +1,36 @@
+"""
+3. Сформировать из введенного числа обратное по порядку входящих в него
+цифр и вывести на экран. Например, если введено число 3486,
+ то надо вывести число 6843.
+Подсказка:
+На каждом шаге вам нужно 'доставать' из числа очередную цифру
+Пока все числа не извлечены рекурсивные вызовы продолжаем
+Условие завершения рекурсии - все цифры извлечены
+Используем операции % //, НЕ ИСПОЛЬЗУЕМ ОПЕРАЦИИ ВЗЯТИЯ ЭЛЕМЕНТА ПО ИНДЕКСУ
+Пример:
+Введите число, которое требуется перевернуть: 123
+Перевернутое число: 321
+Не забудьте проверить и на числах, заканчивающихся нулем.
+Пример:
+Введите число, которое требуется перевернуть: 1230
+Перевернутое число: 0321
+Решите через рекурсию. Решение через цикл не принимается.
+Для оценки Отлично в этом блоке необходимо выполнить 5 заданий из 7
+"""
+
+
+def int_input(txt):
+ try:
+ return int(input(txt))
+ except ValueError:
+ return int_input(txt)
+
+
+def reverse_int(num):
+ if num // 10 == 0:
+ return num % 10
+ else:
+ return f'{num % 10}{reverse_int(num // 10)}'
+
+
+print(reverse_int(int_input('Введите число: ')))
diff --git a/task4.py b/task4.py
new file mode 100644
index 0000000..10942c1
--- /dev/null
+++ b/task4.py
@@ -0,0 +1,32 @@
+"""
+4. Найти сумму n элементов следующего ряда чисел: 1 -0.5 0.25 -0.125 ...
+Количество элементов (n) вводится с клавиатуры.
+Пример:
+Введите количество элементов: 3
+Количество элементов: 3, их сумма: 0.75
+Подсказка:
+Каждый очередной элемент в 2 раза меньше предыдущего и имеет противоположный знак
+Решите через рекурсию. Решение через цикл не принимается.
+Для оценки Отлично в этом блоке необходимо выполнить 5 заданий из 7
+"""
+
+
+def pos_input(txt):
+ try:
+ num = int(input(txt))
+ if num > 0:
+ return num
+ except ValueError:
+ pass
+ return pos_input(txt)
+
+
+def sum_n(n):
+ if n == 1:
+ return 1
+ elif n == 2:
+ return 0.5
+ else:
+ return sum_n(n - 1) + ((sum_n(n - 1) - sum_n(n - 2)) / (-2))
+
+print(sum_n(pos_input('Введите число больше 0: ')))
diff --git a/task5.py b/task5.py
new file mode 100644
index 0000000..39ae220
--- /dev/null
+++ b/task5.py
@@ -0,0 +1,40 @@
+"""
+5. Вывести на экран коды и символы таблицы ASCII, начиная с символа
+под номером 32 и заканчивая 127-м включительно.
+Вывод выполнить в табличной форме: по десять пар "код-символ" в каждой строке.
+Пример:
+32 - 33 - ! 34 - " 35 - # 36 - $ 37 - % 38 - & 39 - ' 40 - ( 41 - )
+42 - * 43 - + 44 - , 45 - - 46 - . 47 - / 48 - 0 49 - 1 50 - 2 51 - 3
+52 - 4 53 - 5 54 - 6 55 - 7 56 - 8 57 - 9 58 - : 59 - ; 60 - < 61 - =
+62 - > 63 - ? 64 - @ 65 - A 66 - B 67 - C 68 - D 69 - E 70 - F 71 - G
+72 - H 73 - I 74 - J 75 - K 76 - L 77 - M 78 - N 79 - O 80 - P 81 - Q
+82 - R 83 - S 84 - T 85 - U 86 - V 87 - W 88 - X 89 - Y 90 - Z 91 - [
+92 - \ 93 - ] 94 - ^ 95 - _ 96 - ` 97 - a 98 - b 99 - c 100 - d 101 - e
+102 - f 103 - g 104 - h 105 - i 106 - j 107 - k 108 - l 109 - m 110 - n 111 - o
+112 - p 113 - q 114 - r 115 - s 116 - t 117 - u 118 - v 119 - w 120 - x 121 - y
+122 - z 123 - { 124 - | 125 - } 126 - ~ 127 -
+Подсказка:
+Допускается исп-е встроенных ф-ций, в частности, chr()
+Решите через рекурсию. Решение через цикл не принимается.
+Для оценки Отлично в этом блоке необходимо выполнить 5 заданий из 7
+"""
+
+# "вроде в задании не сказано, что нельзя использовать несколько рекурсий" (с) Xzibit
+
+
+def show_10_ascii(start, end):
+ if end == start:
+ return f'{end} - {chr(end)} '
+ else:
+ return show_10_ascii(start, end - 1) + show_10_ascii(end, end)
+
+
+def show_ascii(start, end):
+ if (end - start) <= 10:
+ return show_10_ascii(start, end) + '\n'
+ else:
+ return show_ascii(start, start + 9) + show_ascii(start + 10, end)
+
+
+print(show_ascii(32, 127))
+
diff --git a/task6.py b/task6.py
new file mode 100644
index 0000000..af1e9c8
--- /dev/null
+++ b/task6.py
@@ -0,0 +1,37 @@
+"""
+6. В программе генерируется случайное целое число от 0 до 100.
+Пользователь должен его отгадать не более чем за 10 попыток. После каждой
+неудачной попытки должно сообщаться больше или меньше введенное пользователем
+число, чем то, что загадано. Если за 10 попыток число не отгадано,
+то вывести загаданное число.
+Подсказка:
+Базовый случай здесь - угадали число или закончились попытки
+Решите через рекурсию. Решение через цикл не принимается.
+Для оценки Отлично в этом блоке необходимо выполнить 5 заданий из 7
+"""
+
+from random import randrange
+
+
+def guess(num, try_count=10):
+ if try_count == 0:
+ print('Попытки закончились :с')
+ return
+ else:
+ print(f'Осталось попыток: {try_count}')
+ answer = input('Введите число: ')
+ try:
+ answer = int(answer)
+ if answer == num:
+ print('Вы выиграли!')
+ return
+ elif answer > num:
+ print('Загаданное число меньше введённого')
+ else:
+ print('Загаданное число больше введённого')
+ except ValueError:
+ pass
+ guess(num, try_count - 1)
+
+
+guess(randrange(0, 100))
diff --git a/task7.py b/task7.py
new file mode 100644
index 0000000..69360a5
--- /dev/null
+++ b/task7.py
@@ -0,0 +1,31 @@
+"""
+7. Напишите программу, доказывающую или проверяющую, что для множества
+натуральных чисел выполняется равенство: 1+2+...+n = n(n+1)/2,
+где n - любое натуральное число.
+Рекурсия вам нужна для решения левой части выражения.
+Полученный результат нужно просто сравнить с результатом в правой.
+Пример:
+для n = 5
+1+2+3+4+5 = 5(5+1)/2
+Подсказка:
+Правой части в рекурсии быть не должно. Необходимо сравнить результат, который даст рекурсивная ф-ция
+со значением, полученным в правой части (здесь нужно просто подставить n и подсчитать)
+Решите через рекурсию. Решение через цикл не принимается.
+Для оценки Отлично в этом блоке необходимо выполнить 5 заданий из 7
+"""
+
+
+def rec_sum(num):
+ if num == 1:
+ return 1
+ else:
+ return rec_sum(num - 1) + num
+
+
+def check(num):
+ return rec_sum(num) == num * (num + 1)/2
+
+
+# print(rec_sum(101))
+# print(101 * (101 + 1)/2)
+print(check(101))
\ No newline at end of file