Skip to content
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

Lesson03 #3

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
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
217 changes: 217 additions & 0 deletions lesson03.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,217 @@
import string
# 1. Реализовать функцию, принимающую два числа (позиционные аргументы) и выполняющую их деление. Числа запрашивать у пользователя, предусмотреть обработку ситуации деления на ноль.
print("==================== 1 ====================")
print("Задача: Реализовать функцию, принимающую два числа (позиционные аргументы) и выполняющую их деление. "
"Числа запрашивать у пользователя, предусмотреть обработку ситуации деления на ноль.")
print("===========================================")


def func_1():
def dev_func(*args):
if args[1] == 0:
return "Деление на 0 запрещено!"
else:
return f"{args[0]} / {args[1]} = {args[0] / args[1]}"

while True:
try:
a = int(input('Введите числетель: '))
break
except Exception as e:
print('Вы ввели неверное значение! Попробуйте снова.')
while True:
try:
b = int(input('Введите знаменатель: '))
if b == 0:
raise Exception("Деление на 0 запрещено!")
break
except Exception as e:
if e is Exception("Деление на 0 запрещено!"):
print('Деление на 0 запрещено! Попробуйте ввести знаменатель снова.')
print('Вы ввели неверное значение! Попробуйте снова.')
return dev_func(a, b)


print(func_1())
input('Нажмите Enter для продолжения...')

# 2. Реализовать функцию, принимающую несколько параметров, описывающих данные пользователя: имя, фамилия, год рождения, город проживания, email, телефон. Функция должна принимать параметры как именованные аргументы. Реализовать вывод данных о пользователе одной строкой.
print("==================== 2 ====================")
print("Задача: Реализовать функцию, принимающую несколько параметров, описывающих данные пользователя: "
"имя, фамилия, год рождения, город проживания, email, телефон. "
"Функция должна принимать параметры как именованные аргументы. "
"Реализовать вывод данных о пользователе одной строкой.")
print("===========================================")


def func_2():
param_list = ('имя', 'фамилия', 'год рождения', 'город проживания', 'email', 'телефон')

def get_param_list(p_list=[]):
d = {}
for p in p_list:
while True:
try:
d[p] = input(f'Введите {p}: ')
break
except Exception as e:
print('Вы ввели неверное значение! Попробуйте снова.')
return d

def print_param_list(**kwargs):
print(kwargs)
for k, v in kwargs.items():
print(f'{str(k).capitalize()}:{v}; ', end='')
print()
return dict
print_param_list(**get_param_list(param_list))
return True


func_2()
input('Нажмите Enter для продолжения...')

# 3. Реализовать функцию my_func(), которая принимает три позиционных аргумента, и возвращает сумму наибольших двух аргументов.
print("==================== 3 ====================")
print("Задача: Реализовать функцию my_func(), которая принимает три позиционных аргумента, "
"и возвращает сумму наибольших двух аргументов.")
print("===========================================")


def func_3(*args):
if len(args) < 2:
raise Exception("Должно быть 2 или более параметров!")
l_args = list(args)
l_args.sort(reverse=True)
return args, l_args[0], l_args[1], l_args[0] + l_args[1]


try:
li, a, b, s = func_3(2, 3, 4)
print(f"Сумма наибольших двух аргументов в {li} => {a} + {b} = {s}")
except Exception as e:
print(e)
input('Нажмите Enter для продолжения...')

# 4. Программа принимает действительное положительное число x и целое отрицательное число y. Необходимо выполнить возведение числа x в степень y. Задание необходимо реализовать в виде функции my_func(x, y). При решении задания необходимо обойтись без встроенной функции возведения числа в степень.
# Подсказка: попробуйте решить задачу двумя способами. Первый — возведение в степень с помощью оператора **. Второй — более сложная реализация без оператора **, предусматривающая использование цикла.
print("==================== 4 ====================")
print("Задача: Программа принимает действительное положительное число x и целое отрицательное число y. "
"Необходимо выполнить возведение числа x в степень y. Задание необходимо реализовать в виде функции my_func(x, y). "
"При решении задания необходимо обойтись без встроенной функции возведения числа в степень.")
print("===========================================")


def func_4_1(x, y):
return x ** y


def func_4_2(x, y):
res = 1
for i in range(0, abs(y)):
res *= x
if y < 0:
res = 1 / res
return res


while True:
try:
x = float(input('Введите число для возведения в степень: '))
break
except Exception as e:
print('Вы ввели неверное значение! Попробуйте снова.')
while True:
try:
y = int(input('Введите степень: '))
break
except Exception as e:
print('Вы ввели неверное значение! Попробуйте снова.')

print(f"Способ 1: {x} ** {y} = {func_4_1(x, y)}")
print(f"Способ 2: {x} ** {y} = {func_4_2(x, y)}")
input('Нажмите Enter для продолжения...')

# 5. Программа запрашивает у пользователя строку чисел, разделенных пробелом. При нажатии Enter должна выводиться сумма чисел. Пользователь может продолжить ввод чисел, разделенных пробелом и снова нажать Enter. Сумма вновь введенных чисел будет добавляться к уже подсчитанной сумме. Но если вместо числа вводится специальный символ, выполнение программы завершается. Если специальный символ введен после нескольких чисел, то вначале нужно добавить сумму этих чисел к полученной ранее сумме и после этого завершить программу.
print("==================== 5 ====================")
print("Задача: Программа запрашивает у пользователя строку чисел, разделенных пробелом. "
"При нажатии Enter должна выводиться сумма чисел. Пользователь может продолжить ввод чисел, разделенных пробелом "
"и снова нажать Enter. Сумма вновь введенных чисел будет добавляться к уже подсчитанной сумме. "
"Но если вместо числа вводится специальный символ, выполнение программы завершается. "
"Если специальный символ введен после нескольких чисел, то вначале нужно добавить сумму этих чисел к "
"полученной ранее сумме и после этого завершить программу.")
print("===========================================")
s = 0


def func_5():
global s
plist = []
while True:
try:
params = input('Введите числа разделенные пробелами: ')
for p in params.split():
if p in ('!', 'exit'):
plist.append(p)
break
else:
plist.append(float(p))
break
except Exception as e:
print('Вы ввели неверное значение! Попробуйте снова.')
for p in plist:
if p in ('!', 'exit'):
print(f"Сумма: {s}")
return False
s += float(p)
print(f"Сумма: {s}")
return True


while func_5():
pass
input('Нажмите Enter для продолжения...')

# 6. Реализовать функцию int_func(), принимающую слово из маленьких латинских букв и возвращающую его же, но с прописной первой буквой. Например, print(int_func(‘text’)) -> Text.
# Продолжить работу над заданием. В программу должна попадать строка из слов, разделенных пробелом. Каждое слово состоит из латинских букв в нижнем регистре. Сделать вывод исходной строки, но каждое слово должно начинаться с заглавной буквы. Необходимо использовать написанную ранее функцию int_func().
print("==================== 6 ====================")
print("Задача: Реализовать функцию int_func(), принимающую слово из маленьких латинских букв и возвращающую его же, "
"но с прописной первой буквой. Например, print(int_func(‘text’)) -> Text.")
print("===========================================")
word_latin = string.ascii_letters
text_latin = string.ascii_letters + string.digits + string.whitespace
print(word_latin)
print(text_latin)

def int_func(txt):
return txt.capitalize()

while True:
try:
txt = input('Введите слово: ')
for l in txt:
if l not in word_latin:
raise Exception("Текст содержит некорректные данные")
break
except Exception as e:
print('Вы ввели неверное значение! Текст содержит некорректные данные! Попробуйте снова.')

print(f"Вы ввели слово: {txt} -> Результат: {int_func(txt)}")


while True:
try:
txt = input('Введите текст: ')
for l in txt:
if l not in text_latin:
raise Exception("Текст содержит некорректные данные")
break
except Exception as e:
print('Вы ввели неверное значение! Попробуйте снова.')

print(f"Вы ввели текст: {txt} -> Результат: ", end='')
for w in txt.split():
print(int_func(w), end=' ')
print()

input('Нажмите Enter для продолжения...')