import math

k = 30
print("*" * k)
print('''Лабораторна робота №3
        \nз теми "Цикли суми ряду"
        \nстудент ОМ-02 Ребріков Ярослав B-20''')
print("*" * k)
print("Умова:Підрахувати суму та кількість елементів ряду з точністю, вказаною користувачем")
print("Приклад: сума членів ((-1)^(n+1))* (((x-2)^(n+1))/(2n)!) від n=1 до k")

def myInput(s):  # функція для коректного вводу данних
    while -1:
        try:
            return int(input(s))
        except:
            print("Невірні дані")

count = myInput('Number: ')
def fact(count):
    number = 1
    while count > 1:
        number *= count
        count -= 1
    return(number)

print(fact(count))

change = str(input('''Виберіть один із пунктів(1-3), або 'quit' для того щоб вийти з програми: '''))  # меню
while change != 'quit': 
    result = 0
    S = 0
    if change=='1':
    	print("\n"+str(change)+". Обрахунок суми ряду   ")
    	x = myInput("x = "); t = myInput("t(точність обчислення) = ")
    	S=0
    	L = True
    	while L:
     		Sn = x/((4**int(change))*(math.factorial(int(change)))) 
     		S = S + Sn
     		print("n =",str(change),"Sn =",Sn,"S =",S)
     		change = int(change) + 1
     		if abs(Sn) <= t:
      			L = False
    	print("Відповідь:\nпри n =",str(change),"сума ряду  S =",S)
    if change == '2':  # завдання №2, підрахувати суму ряду, з заданою кількістю елементів
        x = myInput("x = ")  # дані, які вводяться користувачем, для завдання №2
        n = int(myInput("n = "))  # вводиться ціле число (кількість елементів)
        for i in range(1, n + 1):  # з яким кроком змінюються елементи ряду
            Sn =((-1)^(n+1))*(((x-2)^(n+1))/(fact(2*n)))# рівння для суми ряду (Sn)
            S = S + Sn  #з корисним проходженням циклу, S(сума ряду) збільшується на Sn
            print("n =", i, "Sn =", Sn, "S =", S)
        print("Відповідь:\nпри n =", n, "сума ряду  S =", S)  # відповідь №2
    if change == '3':  # завдання 3, підрахувати суму ряду з заданим патковим елементом та останнім
        x = myInput("x = ")  # дані, які вводиться користувачем для завдання №3
        a = int(myInput("a = "))  # початковий елемент ряду
        b = int(myInput("b = "))  # кінцевий елемент ряду
        for i in range(a, b + 1):  # з яким кроком змінюються елементи ряду
            Sn = ((-1)^(i+1))* (((x-2)^(i+1))/(fact(2*i)))# рівння для суми ряду (Sn)
            S = S + Sn  # з корисним проходженням циклу, S(сума ряду) збільшується на Sn
            print("n =", i, "Sn =", Sn, "S =", S)
        print("Відповідь:\nпри a =", a, "та b =", b, "сума ряду  S =", S)  # відповідь №3
    change = str(input('''Виберіть один із пунктів(1-3), або 'quit' для того щоб вийти з програми: '''))
print("Вихід, до побачення!!!!!!")


