#Тема 3 <Зеленкина Ксения Михайловна>
print('2.1. Функция bool')
logiz1=bool(56)
print(type(logiz1))
logiz2=bool(0)
print(type(logiz2))
logiz3=bool("Beta")
print(type(logiz3))
logiz4=bool("")
print(type(logiz4))
print('\n')

print('2.2 Функция int')
tt1=int(198.6) #Отбрасывается дробная часть
print(tt1)
tt2=int("-76")  #Число – в строке символов, система по умолчанию - десятичная
print(tt2)
tt3=int("B",16)
print(tt3)
tt4=int("71",8)
print(tt4)
#tt5=int("98.76")  #Код с ошибкой
#print(tt5)
tt5i = int(float("98.76"))   #Исправленный вариант
print(tt5i)
print('\n')

print('#Функция float')
flt1=float(789)
print(flt1)
flt2=float(-6.78e2)
print(flt2)
flt3=float("Infinity")
print(flt3)
flt4=float("-inf")
print(flt4)
print('\n')

print('2.3. Системы считсления')
hh=123
print(hh)
print('Двоичная система счисления')
dv1=bin(hh)   #Преобразование в строку с двоичным представлением
print(dv1)
print('Восьмеричная система счисления')
vos1=oct(hh)   # Преобразование в строку с восьмеричным представлением
print(vos1)
print('Шестнадцатеричная система счисления')
shs1=hex(hh)   # Преобразование в строку с шестнадцатеричным представлением
print(shs1)
print('\n')

print('3.1 Функция str.')
strk1=str(23.6)
print(strk1)
strk2=str(logiz3)
print(strk2)
strk3=str(["A","B","C"])  #Преобразуем список
print(strk3)
strk4=str(("A","B","C"))  #Преобразуем кортеж
print(strk4)
strk5=str({"A":1,"B":2,"C":9})  #Преобразуем словарь
print(strk5)
print('\n')

print('3.2 Функция list.')
spis1=list("Строка символов")  #Заданная строка разделяется на символы
print(spis1)
spis2=list((124,236,-15,908))   #Кортеж превращается в список
print(spis2)
spis3=list({"A":1,"B":2,"C":9})  #Преобразование словаря в список
print(spis3)
print('\n')

print('3.3 Функция tuple.')
kort7=tuple('Строка символов')  #Преобразование строки символов в кортеж
print(kort7)
kort8=tuple(spis2)   #Преобразование списка в кортеж
print(kort8)
kort9=tuple({"A":1,"B":2,"C":9})   #Преобразование словаря в кортеж
print(kort9)
print('\n')

print('3.4 Функция del.')
del strk5, kort8
print('strk5' in globals()) 
print('kort8' in globals())  
print('\n')

print('#Преобразование ФИО ')
FIO = "Зеленкина Кс. М."
print(FIO)
listFIO = list(FIO)
print(listFIO)
kortFIO = tuple(listFIO)
print(kortFIO)
strFIO = str(kortFIO)
print(strFIO)
print('\n')

print('4.1 Сложение и вычитание')
print(12+7+90)  # Сложение целых чисел
print(5.689e-1 - 0.456)  #Вычитание вещественных чисел
print(23.6+54)   #Сложение вещественного и целого чисел
print(14-56.7+89) # Сложение и вычитание целых и вещественных чисел
print('\n')

print('4.2 Умножение')
print(-6.7*12)   #Умножение вещественного числа на целое число
print('\n')

print('4.3 Деление')
print( -234.5/6)   #Деление вещественного числа на целое
a=(178/45)  #Деление двух целых чисел – проверьте тип объекта a!
print(a, type(a))
print('\n')
 
print('4.4 Округление')
b=178//45   #Деление двух целых чисел
c=-24.6//12.1  #Деление двух вещественных чисел
print(b, c)
print('\n')

print('#Смешанные комбинации')
# Целое // Вещественное
d = 100 // 2.5
e = -50 // 3.2
print(type(d), type(e))
print(d, e)
# Вещественное // Целое  
f = 15.8 // 4     
g = -7.5 // 2
print(type(f), type(g))
print(f, g)
# Отрицательные числа
h = -100 // 3 
i = 100 // -3      
print(type(h), type(i))
print(h, i)
print('\n')

print('4.5 Остаток от деления')
print(148%33)   #Остаток от деления двух целых чисел
print(12.6%3.8)  #Остаток от деления двух вещественных чисел
print('\n')

print('#Смешанные комбинации')
c = 100 % 2.5 
d = 17 % 3.2
print(type(c), type(d))
print(c, d)
# Вещественное % Целое  
e = 15.8 % 4     
f = 7.5 % 2   
print(type(e), type(f))
print(e, f)
# Отрицательные числа
g = -100 % 3 
h = 100 % -3    
i = -12.6 % 3.8
print(type(g), type(h), type(i))
print(g, h, i)
print('\n')

print('4.6 Возведение в степень')
print(14**3)  #Целое число возводится в целую степень
e=2.7**3.6  #Вещественное число возводится в вещественную степень
print(e)
print('\n')

print('#Операции с комплексными числами')
print((3+4j) + (2-1j)) 
print((5+2j) - (1+3j))
print((2+3j) * (1-2j))
print((4+0j) * 2.5)
print((6+8j) / (2+0j))
print((10+5j) / 2)
print((1+1j)**2 )
#print((5+3j) // (2+1j))
#print((8+4j) % (3+1j))
print('\n')

print('5.1 Двоичная инверсия')
dv1=9
dv2=~dv1
print(dv1, dv2)
print('\n')

print('5.2 Двоичное "И"')
print(7&9)    # 111 и 1001 = 0001
print(7&8)    # 111 и 1000 = 0000
print('\n')

print('5.3 Двоичное "ИЛИ"')
print(7|9)     # 111 или 1001 = 1111
print(7|8)     # 111 или 1000 = 1111
print(14|5)   # 1110 или 0101 = 1111
print('\n')

print('5.4  Двоичное "исключающее  ИЛИ"')
print(14^5)  # 1110 исключающее или 0101 = 1011
print('\n')

print('5.5 Сдвиг двоичного представления')
h =14   #Двоичное представление = 1110
print(h)
g=h<<2  # Новое двоичное представление = 111000
print(g)
g1=h>>1  # Новое двоичное представление = 0111
print(g1)
g2=h>>2  # Новое двоичное представление = 0011
print(g2)
print('\n')

print('#Пример с 7 - ми битными числами')
a = 0b1101010  # 106 (десятичное
b = 0b1011011  # 91 (десятичное)
print(a & b)   
print(a | b)    
print(a ^ b)   
print(a << 2) 
print(b >> 1) 
print(~a)
print('\n')

print('6.1 Объединение последовательностей (конкатенация)(+)')
print('Система '+'регулирования')  #Соединение двух строк символов
print(['abc','de','fg']+['hi','jkl'])  # Объединение двух списков
print(('abc','de','fg')+('hi','jkl'))  # Объединение двух кортежей
print('\n')

print('6.2 Повторение (*)')
print('ля-'*5)   #Повторение строки 5 раз
print(['ку','-']*3) #Повторение списка 3 раза
print(('кис','-')*4)  #Повторение кортежа 4 раза
signal1=[0]*3+[1]*99
print(signal1)
signal2=(0,)*3+(1,)*5+(0,)*7
print(signal2)
print('\n')
      
print('6.3 in')
stroka='Система автоматического управления'
print(stroka)
print('автомат' in stroka)  #Наличие подстроки в строке
print('ку' in ['ку','-']*3)  #Наличие контекста в списке
print('ля-' in ('abc', 'de', 'fg', 'hi', 'jkl'))  #Наличие контекста в кортеже
print('\n')

print('6.4 Подстановка значений в строку с помощью оператора «%»')
print('Пример 1')
stroka='Температура = %g %s  %g'
print(stroka)
print(stroka % (16,' меньше ',25))
print('Пример 2')
stroka='Температура = %(zn1)g %(sravn)s  %(zn2)g'
print(stroka)
print(stroka % {'zn1':16,'sravn':' меньше ','zn2':25})
print('\n')

print('7.1 Обычное присваивание значения переменной (=)')
zz=-12
print('zz = ', zz)
print('\n')

print('7.2 Увеличение значения переменной на заданную величину  (+=) или уменьшение (-=)')
zz+=5   # Значение zz увеличивается на 5
print('zz + 5 = ', zz)
zz-=3  # Значение уменьшается на 3
print('zz - 3 = ', zz)
stroka='Система'
print(stroka)
stroka+=' регулирования'
print(stroka)
print('\n')

print('7.3 Умножение текущего значения переменной на заданную величину (*=) или деление (/=)')
zz/=2
print(zz)
zz*=5
print(zz)
stroka *= 2
print('stroka * 2 = ', stroka)
print('\n')

print('7.4 Операции //=, %=, **=')
zz = zz1 =zz2 = 17
zz //= 5
print(zz)
zz1 %= 5
print(zz1)
zz2 **= 4
print(zz2)
print('\n')

print('7.5 Множественное присваивание')
w = v = 10  # Переменным присваивается одно и то же значение
print(w, v)
n1,n2,n3 = (11,-3,'all')  #Значения переменных берутся из кортежа
print(n1, n2, n3)

n1, n2, n3 = "11-"
print(n1, n2, n3)
n1, n2, n3 = [11, -3, 'all']
print(n1, n2, n3)
n1, n2, n3 = {11, -3, 'all'}
print(n1, n2, n3)
n1, n2, n3 = {11: 'a', -3: 'b', 'all': 'c'}
print(n1, n2, n3)
print('\n')

print('8.1 Операции сравнение')
print(w == v)
print(w != v)
print(w < v)
print(w > v)
print(w <= v)
print( w >= v)
print('\n')

print('8.2 Операции со множеством')
mnoz1={'pen','book','pen','iPhone','table','book'}
print('book' in mnoz1)
print('cap' in mnoz1)
print('Операции со словарем')
dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
print('Vologda' in dic1)
print('Pskov' in dic1)
print(56 in dic1.values())
print('Ещё пример работы со словарем:')
dct1={'Institut':['AVTI','IEE','IBB'],'Depart':['UII','PM','VMSS','MM'],'gruppa': ['A-01-15','A-02-15']}
print('UII' in dct1['Depart'])
dct1['Depart'][1] == 'MM'
print(dct1)
print('\n')

print('8.3 Логические "И", "ИЛИ", "НЕ"')
a=17
b=-6
print((a>=b) and ('book' in mnoz1) and not ('Pskov' in dic1))
print('\n')

print('#Сложные примеры')
x = 10
y = 20
z = 30
result = (x < y) and (y < z) or (x == 10) and not (z == 40)
print(result)
a = 5
b = 12
c = 8
d = 20
result = (a < b) and (b < d) or (c == 8) and not (d == 15)
print(result)
print('\n')

print('8.4 Проверка ссылок переменных на один и тот же объект (is)')
w=v=10  #При таком присваивании переменные ссылаются на один и тот же объект в оперативной памяти
print(w is v)
w1=['A','B']
v1=['A','B']
print(w1 is v1)
print('\n')

print('9 dir')
stroka='Микропроцессорная система управления'
print(dir(stroka))
print('\n')

print('9.1 Методы для работы со строками')
print(stroka.find('пр'))   #Возвращает номер позиции первого вхождения указанного контекста или значение -1
print(stroka.count("с")) #Подсчет числа вхождений строки “с” в stroka
print(stroka.replace(' у',' автоматического у'))
spis22=stroka.split(' ') #Возвращает список подстрок, между которыми в строке стоит  заданный разделитель
print(spis22)
print(stroka.upper())   #Возвращает строку со всеми заглавными буквами
stroka3=" ".join(spis22)  #Возвращает строку, собранную из элементов списка
print(stroka3)
print(stroka3.partition("с"))  #Возвращает кортеж с результатами поиска «с» слева
print(stroka3.rpartition("с")) #Возвращает кортеж с результатами поиска «с» справа
print('\n')

print('#format')
strk1 = 'Момент времени {}, значение = {}'
result1 = strk1.format(1, 89.7)
print(result1)
print()

strk2 = 'Момент времени {1}, значение = {0}:{2}'
result2 = strk2.format(36.7, 2, 'норма!')
print(result2)
print()

strk3 = 'Момент времени {num}, значение = {znch}'
result3 = strk3.format(znch=89.7, num=2)
print(result3)
print()

print('9.2 Методы для работы со списками. ')
spsk = [10, 'apple', 3.14, 'banana', 42]
print(spsk)
print("Атрибуты списка:", dir(spsk))
print(spsk.pop(2))
spsk.append('c')
print(spsk)
spsk.insert(2,'a')
print(spsk)
print(spsk.count('a'))
print()

print('9.3 Изучение применение методов кортежа')
kort = (1, 2, 3, 2, 4, 2, 5)
print(kort)
print(dir(kort))
print(kort.count(2))
print(kort.index(3)) # 2 (число 3 на позиции 2
print(kort.index(2, 3)) # 5 (число 2 начиная с позиции 3)
print()

print('9.4 Изучение применение методов словарей и множеств')
print('#Словарь')
d = {'a': 1, 'b': 2, 'c': 3}
print(d)
print(dir(d))
print(d.keys())
print(d.values())
d.update({'d': 4}) # Добавляет/обновляет элементы
print(d)
removed = d.pop('b')  # Удаляет ключ и возвращает значение
print(removed)
print()
print('#Множество')
s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}
print(dir(s1))
print("Множество 1:", s1)
print("Множество 2:", s2)
print(s1.union(s2)) #Объединение
print(s1.intersection(s2)) # {3, 4} - пересечение
print(s1.difference(s2)) #разность
s1.add(5)
print(s1)
s1.remove(1)
print(s1)
