def uspeh():
    """Подтверждение успеха операции"""
    print('Выполнено успешно!')

uspeh()

def sravnenie(a,b):
    """Сравнение a и b"""
    if a>b:
        print(a,' больше ',b)
    elif a<b:
        print(a, ' меньше ',b)
    else:
        print(a, ' равно ',b)

n,m=16,5
sravnenie(n,m)

n,m="16","5"
sravnenie(n,m)

def logistfun(b,a):
    """Вычисление логистической функции"""
    import math
    return a/(1+math.exp(-b))

v,w=1,0.7
z=logistfun(w,v)
print(z)

def slozh(a1,a2,a3,a4):
    """ Сложение значений четырех аргументов"""
    return a1+a2+a3+a4

print(slozh(1,2,3,4))
print(slozh('1','2','3','4'))

b1=[1,2]
b2=[-1,-2]
b3=[0,2]
b4=[-1,-1]
q=slozh(b1,b2,b3,b4)
print(q)

kor1 = ("s", 1, "n")
kor2 = ("e", 2, "g")
kor3 = ("u", 3, "r")
kor4 = ("a", 4, "d")
k=slozh(kor1, kor2, kor3, kor4)
print(k)

def inerz(x,T,ypred):
    """ Модель устройства с памятью:
    x- текущее значение вх.сигнала,
    T -постоянная времени,
    ypred - предыдущее значение выхода устройства"""
    y=(x+T*ypred)/(T+1)
    return y

sps=[0]+[1]*100
spsy=[]
TT=20
yy=0

for xx in sps:
    yy=inerz(xx,TT,yy)
    spsy.append(yy)

fnkt=sravnenie
v=16
fnkt(v,23)

typ_fun=8
if typ_fun==1:
    def func():
        print('Функция 1')
else:
    def func():
        print('Функция 2')

func()

def fun_arg(fff,a,b,c):
    """fff-имя функции, используемой 
    в качестве аргумента функции fun_arg"""
    return a+fff(c,b)

zz=fun_arg(logistfun,-3,1,0.7)
print(zz)

def logistfun(a,b=1):
    """Вычисление логистической функции"""
    import math
    return b/(1+math.exp(-a))

print(logistfun(0.7))
print(logistfun(0.7,2))
print(logistfun(b=0.5,a=0.8))

b1234=[b1,b2,b3,b4]
qq=slozh(*b1234)
print(qq)

dic4={"a1":1,"a2":2,"a3":3,"a4":4}
qqq=slozh(**dic4)
print(qqq)

e1=(-1,6)
dd2={'a3':3,'a4':9}
qqqq=slozh(*e1,**dd2)
print(qqqq)

def func4(*kort7):
    """Произвольное число аргументов в составе кортежа"""
    smm=0
    for elt in kort7:
        smm+=elt
    return smm

print(func4(-1,2))
print(func4(-1,2,0,3,6))

def func4(a,b=7,*kort7):
    """Кортеж - сборка аргументов - должен быть последним!"""
    smm=0
    for elt in kort7:
        smm+=elt
    return a*smm+b

print(func4(-1,2,0,3,6))

def func5(**slovar):
    print(slovar)

func5(a=1, n=2, m=3)

a=90
def func3(b):
    a=5*b+67

print(a)

sps1=[1,2,3,4]
def func2(sps):
    sps[1]=99

func2(sps1)
print(sps1)

import math
anfun1=lambda: 1.5+math.log10(17.23)
print(anfun1())

anfun2=lambda a,b : a+math.log10(b)
print(anfun2(17,234))

anfun3=lambda a,b=234: a+math.log10(b)
print(anfun3(100))

def func5(diap,shag):
    """ Итератор, возвращающий значения
    из диапазона от 1 до diap с шагом shag"""
    for j in range(1,diap+1,shag):
        yield j

for mm in func5(7,3):
    print(mm)

alp=func5(7,3)
print(alp.__next__())
print(alp.__next__())
print(alp.__next__())

glb=10
def func7(arg):
    loc1=15
    glb=8
    return loc1*arg

res=func7(glb)
print(res)
print(glb)

glb=11
def func7(arg):
    loc1=15
    global glb
    print(glb)
    glb=8
    return loc1*arg

res=func7(glb)
print(glb)
print(res)

def func8(arg):
    loc1=15
    glb=8
    print(globals().keys())
    print(locals().keys())
    return loc1*arg

hh=func8(glb)

def func9(arg2,arg3):
    def func9_1(arg1):
        loc1=15
        glb1=8
        print('glob_func9_1:',list(globals().keys())[:10])
        print('locl_func9_1:',locals().keys())
        return loc1*arg1
    loc1=5
    glb=func9_1(loc1)
    print('loc_func9:',locals().keys())
    print('glob_func9:',list(globals().keys())[:10])
    return arg2+arg3*glb

kk=func9(10,1)
print(kk)

# Моделирование системы управления
def realdvig(xtt,kk1,TT,yti1,ytin1):
    #Модель реального двигателя
    yp=kk1*xtt
    yti1=yp+yti1
    ytin1=(yti1+TT*ytin1)/(TT+1)
    return [yti1,ytin1]

def tahogen(xtt,kk2,yti2):
    #Модель тахогенератора
    yp=kk2*xtt
    yti2=yp+yti2
    return yti2

def nechus(xtt,gran):
    #зона нечувствительности
    if xtt<gran and xtt>(-gran):
        ytt=0
    elif xtt>=gran:
        ytt=xtt-gran
    elif xtt<=(-gran):
        ytt=xtt+gran
    return ytt

# Параметры системы
k1,T,k2,Xm,A,F,N=0.5,35,0.6,5,1000,5,15

import math
vhod=[]
for i in range(N):
    vhod.append(A*math.sin((2*i*math.pi)/F))

print('Входные данные:', vhod[:5])

yi1=0
yin1=0
yi2=0
vyhod=[]

for xt in vhod:
    xt1=xt-yi2
    [yi1,yin1]=realdvig(xt1,k1,T,yi1,yin1)
    yi2=tahogen(yin1,k2,yi2)
    yt=nechus(yin1,Xm)
    vyhod.append(yt)

print('y=',vyhod)