"""
Урок 3. Функции
1. Реализовать функцию, принимающую два числа (позиционные аргументы) и выполняющую их деление.
Числа запрашивать у пользователя, предусмотреть обработку ситуации деления на ноль.
"""


def division(a: int, b: int) -> str:
    result = ""
    if not a.isdigit():
        result += f" \"{a}\" - не число;"
    if not b.isdigit():
        result += f" \"{b}\" - не число;"
    try:
        c: int = int(a) / int(b)
        return str(c)
    except ZeroDivisionError:
        result += f" деление на 0;"
    except ValueError:
        pass
    return result


while True:
    a = input("Делимое:")
    b = input("Делитель:")
    if a == "" or b == "":
        break
    print(f"{a}/{b}={division(a, b)}")

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


def fio(**kwargs):
    for i in kwargs:
        print(kwargs[i], end="; ")


fio(name=input("name:"), surname=input("surname:"), year=input("year:"), city=input("city:"), email=input("email:"),
    telephone=input("telephone:"))

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


def my_func(a: int, b: int, c: int):
    s = sorted([a, b, c])
    return s[1] + s[2]


print(my_func(1, 2, -3))

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


def my_func1(x, y):
    if x < 0 or y > 0:
        raise ValueError("положительное число x и целое отрицательное число y")
    else:
        return (x ** y)


def my_func2(x, y):
    if x < 0 or y > 0:
        raise ValueError("положительное число x и целое отрицательное число y")
    else:
        result = 1
        if y == 0:
            return 1
        for i in range(abs(y)):
            result *= x
        return 1 / result


print(my_func1(2.1, -2),
      my_func2(2.1, -2),
      my_func1(2.2, -4),
      my_func2(2.2, -4))

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


def summi(result: str, s: str) -> tuple:
    sl = s.split()
    status = 1
    for n in sl:
        if n.isdigit():
            result += int(n)
        else:
            status = 0
            break
    return result, status


def start() -> int:
    result = 0
    while True:
        inpt = input("Cтрока чисел, разделенных пробелом, не часло - выход:")
        result, status = summi(result, inpt)
        if not status:
            return result


print(start())

"""
6. Реализовать функцию int_func(), принимающую слово из маленьких латинских букв и возвращающую его же, но с прописной первой буквой. Например, print(int_func(‘text’)) -> Text.
Продолжить работу над заданием.
В программу должна попадать строка из слов, разделенных пробелом. Каждое слово состоит из латинских букв в нижнем регистре.
Сделать вывод исходной строки, но каждое слово должно начинаться с заглавной буквы.
Необходимо использовать написанную ранее функцию int_func().
"""
print("d"[1:])


def int_func(text: str) -> str:
    return (f"{chr(ord(text[:1]) - 32)}{text[1:]}")


def int_func2(text: str) -> str:
    stext = text.split()
    for i in range(len(stext)):
        stext[i] = int_func(stext[i])
    return " ".join(stext)


print(int_func("qwertyu"))
print(int_func2("qwe rtyu"))
