-
Notifications
You must be signed in to change notification settings - Fork 0
lesson-2 is done #2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -2,4 +2,36 @@ | |
| 2. Посчитать четные и нечетные цифры введенного натурального числа. | ||
| Например, если введено число 34560, то у него 3 четные цифры | ||
| (4, 6 и 0) и 2 нечетные (3 и 5). | ||
| """ | ||
| """ | ||
|
|
||
| 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) | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. отлично, две реализации |
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -2,4 +2,32 @@ | |
| 3. Сформировать из введенного числа обратное по порядку входящих в него | ||
| цифр и вывести на экран. Например, если введено число 3486, | ||
| то надо вывести число 6843. | ||
| """ | ||
| """ | ||
|
|
||
|
|
||
| # Расчёт через цикл | ||
| 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)}") | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. супер |
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,4 +1,33 @@ | ||
| """ | ||
| 4. Найти сумму n элементов следующего ряда чисел: 1 -0.5 0.25 -0.125 ... | ||
| Количество элементов (n) вводится с клавиатуры. | ||
| """ | ||
| """ | ||
|
|
||
|
|
||
| # Расчёт через цикл | ||
| 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)}") | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. аналогично дев реализации |
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -2,4 +2,27 @@ | |
| 5. Вывести на экран коды и символы таблицы ASCII, начиная с символа | ||
| под номером 32 и заканчивая 127-м включительно. | ||
| Вывод выполнить в табличной форме: по десять пар "код-символ" в каждой строке. | ||
| """ | ||
| """ | ||
|
|
||
| # Расчёт через цикл | ||
| 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() | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. спасибо. хорошо что любой перебор можно реализовать и циклом, и рекурсией |
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -4,4 +4,57 @@ | |
| неудачной попытки должно сообщаться больше или меньше введенное пользователем | ||
| число, чем то, что загадано. Если за 10 попыток число не отгадано, | ||
| то вывести загаданное число. | ||
| """ | ||
| """ | ||
|
|
||
| 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) | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. хорошо |
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -2,4 +2,49 @@ | |
| 7. Напишите программу, доказывающую или проверяющую, что для множества | ||
| натуральных чисел выполняется равенство: 1+2+...+n = n(n+1)/2, | ||
| где n - любое натуральное число. | ||
| """ | ||
| """ | ||
|
|
||
|
|
||
| # Расчёт через цикл | ||
| 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") | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. отлично |
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -2,4 +2,54 @@ | |
| 8. Посчитать, сколько раз встречается определенная цифра в введенной | ||
| последовательности чисел. Количество вводимых чисел и цифра, | ||
| которую необходимо посчитать, задаются вводом с клавиатуры. | ||
| """ | ||
| """ | ||
|
|
||
|
|
||
| # Расчёт через цикл | ||
| 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)} раз(а)") | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. здесь в принципе можно только циклом ограничиться |
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
задание выполнено, отдельное спасибо за рекурсию