Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions Lesson_2/1.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

задание выполнено, отдельное спасибо за рекурсию

34 changes: 33 additions & 1 deletion Lesson_2/2.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

отлично, две реализации

30 changes: 29 additions & 1 deletion Lesson_2/3.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)}")

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

супер

31 changes: 30 additions & 1 deletion Lesson_2/4.py
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)}")

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

аналогично дев реализации

25 changes: 24 additions & 1 deletion Lesson_2/5.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

спасибо. хорошо что любой перебор можно реализовать и циклом, и рекурсией
но надо помнить о ресурсах

55 changes: 54 additions & 1 deletion Lesson_2/6.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

хорошо

47 changes: 46 additions & 1 deletion Lesson_2/7.py
Original file line number Diff line number Diff line change
Expand Up @@ -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")

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

отлично

52 changes: 51 additions & 1 deletion Lesson_2/8.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)} раз(а)")

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

здесь в принципе можно только циклом ограничиться

Loading