From 87c6e4b170157deba983fc19f4978b826eb8acfd Mon Sep 17 00:00:00 2001 From: Denis Bogdanovskiy Date: Tue, 4 Jan 2022 22:27:29 +0500 Subject: [PATCH] =?UTF-8?q?=D0=A1ommit=20for=20lesson03?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson03.py | 217 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 lesson03.py diff --git a/lesson03.py b/lesson03.py new file mode 100644 index 0000000..f598856 --- /dev/null +++ b/lesson03.py @@ -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 для продолжения...')