diff --git a/Lesson_2/1.py b/Lesson_2/1.py index 7482013f..5dc3f94f 100644 --- a/Lesson_2/1.py +++ b/Lesson_2/1.py @@ -9,3 +9,66 @@ Также сообщать пользователю о невозможности деления на ноль, если он ввел 0 в качестве делителя. """ + +# Расчёт через цикл +print("\nРасчёт через цикл") +while True: + sign = input("Введите знак операции: ") + if sign == "0": + print("Завершение программы") + break + elif sign != "+" and sign != "-" and sign != "*" and sign != "/": + print("Введён неверный знак операции") + continue + else: + a = float(input("Введите первое число: ")) + b = float(input("Введите второе число: ")) + if sign == "/" and b == 0: + print("Деление на ноль невозможно") + continue + if sign == "+": + result = a + b + elif sign == "-": + result = a - b + elif sign == "*": + result = a * b + elif sign == "/": + result = a / b + if b >= 0: + print(f"Результат операции {a} {sign} {b} = {result}") + else: + print(f"Результат операции {a} {sign} ({b}) = {result}") + + +# Расчёт через рекурсию +def calc(): + sign = input("Введите знак операции: ") + if sign == "0": + print("Завершение программы") + return + elif sign != "+" and sign != "-" and sign != "*" and sign != "/": + print("Введён неверный знак операции") + else: + a = float(input("Введите первое число: ")) + b = float(input("Введите второе число: ")) + result = None + if sign == "/" and b == 0: + print("Деление на ноль невозможно") + elif sign == "/" and b != 0: + result = a / b + elif sign == "+": + result = a + b + elif sign == "-": + result = a - b + elif sign == "*": + result = a * b + if result is not None: + if b >= 0: + print(f"Результат операции {a} {sign} {b} = {result}") + else: + print(f"Результат операции {a} {sign} ({b}) = {result}") + calc() + + +print("\nРасчёт через рекурсию") +calc() diff --git a/Lesson_2/2.py b/Lesson_2/2.py index 92f63dbf..d0ca2429 100644 --- a/Lesson_2/2.py +++ b/Lesson_2/2.py @@ -2,4 +2,36 @@ 2. Посчитать четные и нечетные цифры введенного натурального числа. Например, если введено число 34560, то у него 3 четные цифры (4, 6 и 0) и 2 нечетные (3 и 5). -""" \ No newline at end of file +""" + +input_number = int(input("Введите натуральное число: ")) + + +# Расчёт через цикл +print("\nРасчёт через цикл") +number = input_number +even = 0 +odd = 0 +while number: + if number % 2 == 0: + even += 1 + else: + odd += 1 + number = int(number / 10) +print(f"В введённом числе {even} чётных цифр(ы) и {odd} нечётных цифр(ы)") + + +# Расчёт через рекурсию +def even_odd(number, even=0, odd=0): + if number == 0: + print(f"В введённом числе {even} чётных цифр(ы) и {odd} нечётных цифр(ы)") + return + if number % 2 == 0: + even += 1 + else: + odd += 1 + even_odd(int(number / 10), even, odd) + + +print("\nРасчёт через рекурсию") +even_odd(input_number) diff --git a/Lesson_2/3.py b/Lesson_2/3.py index dbf642be..184c6b5e 100644 --- a/Lesson_2/3.py +++ b/Lesson_2/3.py @@ -2,4 +2,32 @@ 3. Сформировать из введенного числа обратное по порядку входящих в него цифр и вывести на экран. Например, если введено число 3486, то надо вывести число 6843. -""" \ No newline at end of file +""" + + +# Расчёт через цикл +def revers_recursion(number): + revers = 0 + while number / 10 > 0: + digit = number % 10 + revers = revers * 10 + digit + number = int(number / 10) + return revers + + +# Расчёт через рекурсию +def revers_recursion(number, revers_number=0): + if number == 0: + return revers_number + digit = number % 10 + revers_number = revers_number * 10 + digit + return revers_recursion(int(number / 10), revers_number) + + +number = int(input("Введите натуральное число: ")) + +print("\nРасчёт через цикл") +print(f"Обратное число {revers_recursion(number)}") + +print("\nРасчёт через рекурсию") +print(f"Обратное число {revers_recursion(number)}") diff --git a/Lesson_2/4.py b/Lesson_2/4.py index a6c31228..43cc8eb3 100644 --- a/Lesson_2/4.py +++ b/Lesson_2/4.py @@ -1,4 +1,33 @@ """ 4. Найти сумму n элементов следующего ряда чисел: 1 -0.5 0.25 -0.125 ... Количество элементов (n) вводится с клавиатуры. -""" \ No newline at end of file +""" + + +# Расчёт через цикл +def sum_range_n(n): + number = -2 + sum_n = 0 + for i in range(n): + number = number / 2 * -1 + sum_n += number + return sum_n + + +# Расчёт через рекурсию +def sum_range_n_recursion(n, i=0, number=-2.0, sum_n=0): + if i >= n: + return sum_n + number = number / 2 * -1 + sum_n += number + i += 1 + return sum_range_n_recursion(n, i, number, sum_n) + + +n = int(input("Введите количество элементов: ")) + +print("\nРасчёт через цикл") +print(f"Сумма {n} чисел из ряда 1 -0.5 0.25 -0.125 ... равна {sum_range_n(n)}") + +print("\nРасчёт через рекурсию") +print(f"Сумма {n} чисел из ряда 1 -0.5 0.25 -0.125 ... равна {sum_range_n_recursion(n)}") diff --git a/Lesson_2/5.py b/Lesson_2/5.py index 1e0d9578..a76f72f0 100644 --- a/Lesson_2/5.py +++ b/Lesson_2/5.py @@ -2,4 +2,27 @@ 5. Вывести на экран коды и символы таблицы ASCII, начиная с символа под номером 32 и заканчивая 127-м включительно. Вывод выполнить в табличной форме: по десять пар "код-символ" в каждой строке. -""" \ No newline at end of file +""" + +# Расчёт через цикл +print("\nРасчёт через цикл") +for symbol in range(32, 128): + print(f"{symbol}-\"{chr(symbol)}\"\t", end="") + if (symbol - 41) % 10 == 0: + print("\n") + + +# Расчёт через рекурсию +def print_ascii_table(symbol=32): + if symbol <= 127: + print(f"{symbol}-\"{chr(symbol)}\"\t", end="") + symbol += 1 + if (symbol - 41) % 10 == 0: + print("\n") + else: + return + print_ascii_table(symbol) + + +print("\n\nРасчёт через рекурсию") +print_ascii_table() diff --git a/Lesson_2/6.py b/Lesson_2/6.py index 8facba65..956dbd42 100644 --- a/Lesson_2/6.py +++ b/Lesson_2/6.py @@ -4,4 +4,57 @@ неудачной попытки должно сообщаться больше или меньше введенное пользователем число, чем то, что загадано. Если за 10 попыток число не отгадано, то вывести загаданное число. -""" \ No newline at end of file +""" + +from random import random + + +# Расчёт через цикл +def guess_number(rand_number, min_number, max_number): + for i in range(10): + number = int(input(f"Введите натуральное от {min_number} до {max_number}: ")) + if number == rand_number: + print("Вы угадали") + break + elif number < rand_number: + print("Ваше число меньше загаданного") + min_number = number + elif number > rand_number: + print("Ваше число больше загаданного") + max_number = number + else: + print(f"Загаданное число {rand_number}") + + +# Расчёт через рекурсию +def guess_number_recursion(rand_number, i=1, min_number=0, max_number=100): + number = int(input(f"Введите натуральное от {min_number} до {max_number}: ")) + if i <= 10: + if number == rand_number: + print("Вы угадали") + return + elif number < rand_number: + print("Ваше число меньше загаданного") + min_number = number + elif number > rand_number: + print("Ваше число больше загаданного") + max_number = number + i += 1 + else: + print(f"Загаданное число {rand_number}") + return + guess_number_recursion(rand_number, i, min_number, max_number) + + +min_number = 0 +max_number = 100 + + +print("\nРасчёт через цикл") +rand_number = int(random() * max_number + 1) +guess_number(rand_number, min_number, max_number) + + +print("\nРасчёт через рекурсию") +rand_number = int(random() * max_number + 1) +guess_number_recursion(rand_number) diff --git a/Lesson_2/7.py b/Lesson_2/7.py index ebe7c7f7..d07fc9a1 100644 --- a/Lesson_2/7.py +++ b/Lesson_2/7.py @@ -2,4 +2,49 @@ 7. Напишите программу, доказывающую или проверяющую, что для множества натуральных чисел выполняется равенство: 1+2+...+n = n(n+1)/2, где n - любое натуральное число. -""" \ No newline at end of file +""" + + +# Расчёт через цикл +def sum_range(n): + sum_range_n = 0 + for i in range(1, n + 1): + sum_range_n += i + return sum_range_n + + +# Расчёт через рекурсию +def sum_range_recursion(n, i=1, sum_range_n=0): + if i < n: + sum_range_n += i + i += 1 + return sum_range_recursion(n, i, sum_range_n) + else: + return sum_range_n + n + + +n = int(input(f"Введите натуральное число: ")) +sum_n = int(n * (n + 1) / 2) + +print("\nРасчёт через цикл") +sum_range_n = sum_range(n) +if sum_range_n == sum_n: + print(f"1+2+...+{n} = {sum_range_n}") + print(f"n(n+1)/2 = {sum_n}") + print(f"1+2+...+{n} = n(n+1)/2") +else: + print(f"1+2+...+{n} = {sum_range_n}") + print(f"n(n+1)/2 = {sum_n}") + print(f"1+2+...+{n} <> n(n+1)/2") + + +print("\n\nРасчёт через рекурсию") +sum_range_n = sum_range_recursion(n) +if sum_range_n == sum_n: + print(f"1+2+...+{n} = {sum_range_n}") + print(f"n(n+1)/2 = {sum_n}") + print(f"1+2+...+{n} = n(n+1)/2") +else: + print(f"1+2+...+{n} = {sum_range_n}") + print(f"n(n+1)/2 = {sum_n}") + print(f"1+2+...+{n} <> n(n+1)/2") diff --git a/Lesson_2/8.py b/Lesson_2/8.py index df9ab5d6..ca31ca74 100644 --- a/Lesson_2/8.py +++ b/Lesson_2/8.py @@ -2,4 +2,54 @@ 8. Посчитать, сколько раз встречается определенная цифра в введенной последовательности чисел. Количество вводимых чисел и цифра, которую необходимо посчитать, задаются вводом с клавиатуры. -""" \ No newline at end of file +""" + + +# Расчёт через цикл +def count_digit(number, my_digit): + count = 0 + while number: + digit = number % 10 + if my_digit == digit: + count += 1 + number = int(number / 10) + return count + + +def loop(n, my_digit): + total_count = 0 + for i in range(1, n + 1): + number = int(input(f"Введите {i}-е число: ")) + total_count += count_digit(number, my_digit) + return total_count + + +# Расчёт через рекурсию +def count_digit_recursion(number, my_digit, count=0): + if number: + digit = number % 10 + if my_digit == digit: + count += 1 + return count_digit_recursion(int(number / 10), my_digit, count) + else: + return count + + +def recursion(n, my_digit, i=1, total_count=0): + if i <= n: + number = int(input(f"Введите {i}-е число: ")) + total_count += count_digit_recursion(number, my_digit) + i += 1 + return recursion(n, my_digit, i, total_count) + else: + return total_count + + +n = int(input(f"Введите колличество вводимых чисел: ")) +my_digit = int(input(f"Введите цифру, которую будем искать: ")) + +print("\nРасчёт через цикл") +print(f"Цифра {my_digit} встречается {loop(n, my_digit)} раз(а)") + +print("\nРасчёт через рекурсию") +print(f"Цифра {my_digit} встречается {recursion(n, my_digit)} раз(а)") diff --git a/Lesson_2/9.py b/Lesson_2/9.py index de8170bd..18e21666 100644 --- a/Lesson_2/9.py +++ b/Lesson_2/9.py @@ -1,4 +1,55 @@ """ 9. Среди натуральных чисел, которые были введены, найти наибольшее по сумме цифр. Вывести на экран это число и сумму его цифр. -""" \ No newline at end of file +""" + + +# Расчёт через цикл +def sum_digits(number): + result = 0 + while number: + digit = number % 10 + result += digit + number = int(number / 10) + return result + + +# Расчёт через рекурсию +def sum_digits_recursion(number, result=0): + if number: + digit = number % 10 + result += digit + return sum_digits_recursion(int(number / 10), result) + else: + return result + + +a = int(input(f"Введите первое натуральное число: ")) +b = int(input(f"Введите второе натуральное число: ")) + + +print("\nРасчёт через цикл") +sum_digits_a = sum_digits(a) +sum_digits_b = sum_digits(b) + +if sum_digits_a > sum_digits_b: + print(f"Наибольшее число по сумме цифр {a}") + print(f"Сумма его цифр равна: {sum_digits_a}") +elif sum_digits_a < sum_digits_b: + print(f"Наибольшее число по сумме цифр {b}") + print(f"Сумма его цифр равна: {sum_digits_b}") +else: + print(f"Суммы цифр введённых чисел равны") + + +print("\nРасчёт через рекурсию") +sum_digits_a = sum_digits_recursion(a) +sum_digits_b = sum_digits_recursion(b) +if sum_digits_a > sum_digits_b: + print(f"Наибольшее число по сумме цифр {a}") + print(f"Сумма его цифр равна: {sum_digits_a}") +elif sum_digits_a < sum_digits_b: + print(f"Наибольшее число по сумме цифр {b}") + print(f"Сумма его цифр равна: {sum_digits_b}") +else: + print(f"Суммы цифр введённых чисел равны")