diff --git a/Practice/FliffyKsenia/lec.2.2.py b/Practice/FliffyKsenia/lec.2.2.py new file mode 100644 index 0000000..981d527 --- /dev/null +++ b/Practice/FliffyKsenia/lec.2.2.py @@ -0,0 +1,6 @@ +start = input("Топлива было: ") +distance = input("Расстояние: ") +end = input("Топлива осталось: ") +diff = int(start) - int(end) +print (f"Result: {diff / int(distance)}") + diff --git a/Practice/FliffyKsenia/lec.3.5.py b/Practice/FliffyKsenia/lec.3.5.py new file mode 100644 index 0000000..e76496f --- /dev/null +++ b/Practice/FliffyKsenia/lec.3.5.py @@ -0,0 +1,9 @@ +#используем функцию дляпроверки строки на палиндром +def is_palindrom(slovo): + slovo = slovo.upper() + perevernutoe_slovo = slovo[::-1] #производим операцию со строками по перевороту слова + return slovo == perevernutoe_slovo #булевая операция сравнения изначального с перевернутым + +#запрашиваем слово для проверки палинрома input("Введите слово для проверки является ли оно палиндромом: ") +a = input("Введите слово для проверки является ли оно палиндромом: ") +print(is_palindrom(a)) #выводим результат работы функции из палиндрома diff --git a/Practice/FliffyKsenia/lec.4.5.py b/Practice/FliffyKsenia/lec.4.5.py new file mode 100644 index 0000000..4b6d176 --- /dev/null +++ b/Practice/FliffyKsenia/lec.4.5.py @@ -0,0 +1,56 @@ +#импортируем(подключаем) функцию random для возможности её использования: +import random + +#объявляем переменныые min и max значения +range_min = " " +range_max = " " + +#объявляем цикл на ввод min и max данных +while True: + + while not range_min.isdigit(): # проверка на то, что min значение являеся целым числом + range_min = input("Введите целое число, являющееся началом диапазона: ") + while not range_max.isdigit():# проверка на то, что max значение являеся целым числом + range_max = input("Введите целое число, являющееся концом диапазона: ") + range_min = int(range_min) + range_max = int(range_max) + if range_min >= range_max: # проверка на то, что min значение меньше max + print("Вы указали не корректный диапазон: ") + range_min = " " + range_max = " " + else: + break + +#вызываем рандом в указанном диапазоне чисел +vybor_kompyter = random.randint(range_min, range_max) +#print(vybor_kompyter) + +# пользователь должен ввести число, в указанном им раннее диапазоне для угадывания выбора компьютером +ugadai_chislo = " " + + +#объявляем цикл на ввод числа для угадывания +while True: + + # пользователь вводит число + ugadai_chislo = input("Попробуйте угадать число, выбранное компьютером в заданном ранее вами диапазоне: ") + # проверка на ввод пользователем числа, если введеное значение не является числом: + if not (ugadai_chislo.isdigit()): + #выход из программы + print("Пока! Жаль, что мы так быстро расстаемся! ") + break + + + # проверка на то, что заданное пользователем число больше или равно введеного им минимального значения + ugadai_chislo = int(ugadai_chislo) + if ugadai_chislo < range_min or ugadai_chislo > range_max: + print("Вы указали число, находящееся вне заданного ранее вами диапазона") + # проверка на то, что заданное пользователем число меньше или равно введеного им максимального значения + elif ugadai_chislo > vybor_kompyter: + print("Очень жаль, но вы не угадали. Вы ввели число больше, чем следовало: ") + elif ugadai_chislo < vybor_kompyter: + print("Очень жаль, но вы не угадали. Вы ввели число меньше, чем следовало: ") + + else: + print("Поздравляю Вас, Вы угадали. У Вас прекрасный дар ясновиденья. Может Вам начать предоставлять услуги ясновиденья?") + break diff --git a/Practice/FliffyKsenia/lec1.py b/Practice/FliffyKsenia/lec1.py new file mode 100644 index 0000000..4dc5045 --- /dev/null +++ b/Practice/FliffyKsenia/lec1.py @@ -0,0 +1,8 @@ +x = input("Hello, enter x: ") +y = input("Enter y: ") +print(f"Result: {int(x)**int(y)}") +input("Thanks") + + + + diff --git a/Practice/FliffyKsenia/lec10.2.py b/Practice/FliffyKsenia/lec10.2.py new file mode 100644 index 0000000..3e71a4d --- /dev/null +++ b/Practice/FliffyKsenia/lec10.2.py @@ -0,0 +1,16 @@ +message = "" # Определяем переменную строкого типа +while message != "ПОКА": # делаем цикл, до момента пока с нами не попрощается пользователь. + message = input("->").upper() # делаем запрос пользователю. и переводим сразу в большие буквы, чтобы невилировать маленькие ошибки пользователя + match message: # проверяем ввод пользователя на соответсвие предопределенным фразам. + case "ПРИВЕТ": # Проверяем соответствует ли ввод пользоваеля предопределенной фразе "Привет" + print("Здраствуйте, давайте начнем наш диалог. Если вам надо можете сказать пока.") # Выводим заранее заданный ответ на фразу "Привет" + case "КАК ДЕЛА?": # Проверяем соответствует ли ввод пользоваеля предопределенной фразе "Как дела?" + print("Дела прекрассны, пока ни одной ошибки.") # Выводим заранее заданный ответ на фразу "Как дела?" + case "КАКАЯ СЕГОДНЯ ПОГОДА?": # Проверяем соответствует ли ввод пользоваеля предопределенной фразе "Какая сегодня погода?" + print("Прекрасная, ведь у природы нет полохой погоды.") # Выводим заранее заданный ответ на фразу "Какая сегодня погода?" + case "ПОКА": # Проверяем соответствует ли ввод пользоваеля предопределенной фразе "пока" + print("До свидания.") # прощаемся с пользователем + case _: # Так как ни одной разе ссответсвие не нашлось, выводим сообщение о "некорректности" + print("Вопрос некорректен, попробуйте сформулировать его по-другому") # Выводим сообщение о некорректности. + + diff --git a/Practice/FliffyKsenia/lec11.1.py b/Practice/FliffyKsenia/lec11.1.py new file mode 100644 index 0000000..2c321d1 --- /dev/null +++ b/Practice/FliffyKsenia/lec11.1.py @@ -0,0 +1,110 @@ +import time +from threading import Thread +import multiprocessing as mp + +start_1 = 3 +end_1 = 10000 +start_2 = 10001 +end_2 = 20000 +start_3 = 20001 +end_3 = 30000 + +class MyError(Exception): + pass + +class Mythread(Thread): + def __init__(self,*args): # переопределяем процедуру инициализации + Thread.__init__(self) # выполняем процедуру инициализации из родительского класса + self.args = args + def run(self): # описываем функцию которая начинает работать при старте потока. + self.lst = find_primes(*self.args) + + +def superfun(fun): + def inner_fun(*args, **kwargs): + start = time.time() + res = fun(*args, **kwargs) + stop = time.time() + print(f"Execution time: {stop - start}") + return res + + return inner_fun + +def find_primes(*args): + match len(args): + case 1: + start, end = 3, args[0] + case 2: + start, end = args[0],args[1] + case _: + raise MyError("too many arguments") + + if start <= 2 and end > 2: + lst = [2] + start = 3 + else: + lst = [] + for i in range(start, end + 1, 2): + + if not ((i > 10) and (i % 10 == 5)): + + for j in range(3, i + 1, 2): + if (i % j == 0): + break + if j * j > i: + lst.append(i) + break + + + return lst + +@superfun +def pusk(): + return find_primes(end_1) + find_primes(start_2, end_2) + find_primes(start_3, end_3) + + +@superfun +def thread_pusk(): + mytread1 = Mythread(end_1) + mytread2 = Mythread(start_2,end_2) + mytread3 = Mythread(start_3,end_3) + mytread1.start() + mytread2.start() + mytread3.start() + mytread1.join() + mytread2.join() + mytread3.join() + return mytread1.lst + mytread2.lst + mytread3.lst + + + +def foo(*args): + args[0].put(find_primes(args[1],args[2])) + + + +@superfun +def process_pusk(): + mp.set_start_method('spawn') + q1 = mp.Queue() + q2 = mp.Queue() + q3 = mp.Queue() + p1 = mp.Process(target=foo, args=(q1,start_1,end_1)) + p2 = mp.Process(target=foo, args=(q2,start_2,end_2)) + p3 = mp.Process(target=foo, args=(q3,start_3,end_3)) + p1.start() + p2.start() + p3.start() + p1.join() + p2.join() + p3.join() + return q1.get() + q2.get() + q3.get() + + +if __name__ == '__main__': + print("Запускаем последовательно процедуру") + print(f"Найдено {len(pusk())} простых чисела") + print("Запускаем процедуру через потоки") + print(f"Найдено {len(thread_pusk())} простых чисела") + print("Запускаем через процессы") + print(f"Найдено {len(process_pusk())} простых чисела") \ No newline at end of file diff --git a/Practice/FliffyKsenia/lec12.1.client.py b/Practice/FliffyKsenia/lec12.1.client.py new file mode 100644 index 0000000..9197ef7 --- /dev/null +++ b/Practice/FliffyKsenia/lec12.1.client.py @@ -0,0 +1,20 @@ +import socket +import pickle + + +def client_program(shifr): + host = socket.gethostname() # получаем имя компьютера на котором запускается клиент, считаем, что сервер запущен на этом же ПК. + port = 5080 # порт к которому будем подключатся. + client_socket = socket.socket() # инициализируем сокет + client_socket.connect((host, port)) # подключаемся к серверу + client_socket.send(pickle.dumps(shifr)) # отправляем сериаоизованный список + data = client_socket.recv(1024) # ждем расшифрованные данные от сервера + print(f'Deciphered words: {pickle.loads(data)}') # выводим расшифрованный список на экран + client_socket.close() # Закрываем соединение + + +if __name__ == '__main__': + # создаем список зашифрованных слов. + shifr = ['dasd', 'rewff', 'gvavasdf', 'fdasferv'] + # вызываем клиент для подключения к серверу. + client_program(shifr) diff --git a/Practice/FliffyKsenia/lec12.1.server.py b/Practice/FliffyKsenia/lec12.1.server.py new file mode 100644 index 0000000..9a27ebf --- /dev/null +++ b/Practice/FliffyKsenia/lec12.1.server.py @@ -0,0 +1,34 @@ +import pickle +import socket + + +def server_program(): + host = socket.gethostname() # получаем имя ПК на котором запускается сервер + port = 5080 # выбираем порт на котором будем работать + server_socket = socket.socket() # создаем сокет + server_socket.bind((host, port)) # подключаемся на выбранный нами порт для ожидания подключений от клиентов + server_socket.listen(2) # выбираем максимальное количество клиентов. + conn, address = server_socket.accept() # ждем подключение клиента + print("Connection from: " + str(address)) # выводим соощение, что клиент подключился + # создаем словарь для расшифровки + shifr_dict = {'dasd': 'hello', 'rewff': 'my', 'gvavasdf': 'dear', 'fdasferv': 'friend'} + while True: + # получаем данные от клиента + data = conn.recv(1024) + if not data: + break + # преобразуем получинные данные от клиента в список зашифрованных слов + shifrs = pickle.loads(data) + message = [] + # проводим расшифровку слов согласно слованя + for shifr in shifrs: + # формируем массив расшифрованных слов. + message += [shifr_dict[shifr]] + # отправляем расшифрованный список назад клиенту. + conn.send(pickle.dumps(message)) + conn.close() + + +# запускаем сервер +if __name__ == '__main__': + server_program() diff --git a/Practice/FliffyKsenia/lec12.2.client1.py b/Practice/FliffyKsenia/lec12.2.client1.py new file mode 100644 index 0000000..e7b6788 --- /dev/null +++ b/Practice/FliffyKsenia/lec12.2.client1.py @@ -0,0 +1,6 @@ +from lec12_2_imports import User +from lec12_2_imports import client_program + +# Создаем объект типа юзер именем и возрастом. +user = User("Jack", 28) +client_program(user) diff --git a/Practice/FliffyKsenia/lec12.2.client2.py b/Practice/FliffyKsenia/lec12.2.client2.py new file mode 100644 index 0000000..3d9c35f --- /dev/null +++ b/Practice/FliffyKsenia/lec12.2.client2.py @@ -0,0 +1,6 @@ +from lec12_2_imports import User +from lec12_2_imports import client_program + +# Создаем объект типа юзер именем и возрастом. +user = User("Mary",24) +client_program(user) diff --git a/Practice/FliffyKsenia/lec12.2.server.py b/Practice/FliffyKsenia/lec12.2.server.py new file mode 100644 index 0000000..bbb2fc4 --- /dev/null +++ b/Practice/FliffyKsenia/lec12.2.server.py @@ -0,0 +1,86 @@ +# сервер который ждет подключения от клиентов, и при каждом новом подключении выдает список активных клиентов с именами пользователей. +import socket +import pickle +from threading import Thread +from lec12_2_imports import User + +PORT = 5089 + + +# создаем класс для создания потока который будет обрабатывать входящие соединения +class Server_thread(Thread): + def __init__(self, conn, addr): # переопределяем процедуру инициализации + Thread.__init__(self) # выполняем процедуру инициализации из родительского класса + self.conn, self.addr = conn, addr # сохраняем в свойства данные о соединении + self.notready = True # создаем парамерт, который сообщает нам получили ли мы данные о пользователе или нет. True не получили, False получили + self.not_die = True + + def server_stop(self): + self.conn.settimeout(1) + self.conn.close() + self.conn.detach() + + def run(self): # описываем функцию которая начинает работать при старте потока. + while True: + data = self.conn.recv(1024) # принимаем данные от клиента + if not data: + self.conn.close() # если нет данных закрываем соединиение + self.not_die = False + break # выходим из потока, завершая его. + else: + self.user = pickle.loads( + data) # обрабатываем данные от клиента и создаем переменную внутри класса типа юзер. + self.notready = False # сообщаем классу, что мы получили данные о пользователе + + +class Server_main(Thread): + def __init__(self, port): + Thread.__init__(self) + self.port = port # задаем имя порта на котором будем ждать соединения + self.threads = [] # объявляем массив для хранения текущих подключений + + def server_stop(self): + self.server_start = False # говорим серверу, что рабочий день закончен. + for t in self.threads: # обходим живые потоки + t.server_stop() # говорим им, что рабочий день закончен. + client_socket = socket.socket() # инициализируем сокет для того, чтобы закрыть сервер, надо выйти из состояния ожидания соединения. для этого фиктивно конектимся. по факту этим говори стоп. + client_socket.connect((self.host, self.port)) # подключаемся к серверу + user = User("", 0) # создаем фикивного пользователя, чтбы не вызывать ошибку. + client_socket.send(pickle.dumps(user)) # запаковываем объект типа юзер и передаем его серверу. + client_socket.close() # закрываем соединиение + + def run(self): + self.server_start = True # переменная состояния сервера. + self.host = socket.gethostname() # получаем имя текущего компа на котором запустился наш сервер + self.server_socket = socket.socket() # создаем сокет + self.server_socket.bind((self.host, self.port)) # открываем заданный порт для прослушивания + self.server_socket.listen(20) # задаем количество возможных соединений + while self.server_start: + conn, addr = self.server_socket.accept() # ждем подключения + threada = Server_thread(conn, addr) # создаем и запускаем новый поток для обработки данных от клиента + threada.start() # запускаем новый поток. + self.threads.append(threada) # добавляем наш поток в список активных потоков + self.server_socket.close() # закрываем соединение + + def connected_users(self): + print("Connected users:") # выводим список подключенных пользователей + for thread in self.threads: # обходим массив активных соединений. + if thread.not_die: # проверяем на живость потока, если умер, то удаляем из массыва живых потоков. + while thread.notready: # ждем когда прийдет информация о пользователе + pass + print(f"name: {thread.user.name}, age: {thread.user.age}") # выводим данные об активном соединении + else: + self.threads.remove(thread) # удаляем умерший поток + + +is_runinng = "" +myserver = Server_main(PORT) # создаем поток сервера. +myserver.start() # запускаем сервер в отдельном потоке. + +while is_runinng != "bye": + is_runinng = input( + "Введите bye для выхода, или любой текст для просмотра подключенных клиентов:") # ждем команды пользователя + myserver.connected_users() # выводим текущие соединения. + +myserver.server_stop() # останавливаем сервер. +print("Bye!") diff --git a/Practice/FliffyKsenia/lec12.3.py b/Practice/FliffyKsenia/lec12.3.py new file mode 100644 index 0000000..572fae8 --- /dev/null +++ b/Practice/FliffyKsenia/lec12.3.py @@ -0,0 +1,29 @@ +import re +from urllib.request import urlopen + +url = "http://www.google.com" # адрес на котором ищем все ссылки +page = urlopen(url) # получаем страницу +find_href = r'(]href=\")(\S*)(\")' # вводим регулярное выражение для поиска ссылок +urls = [[]] # объявляем пустой массив для списка урл +html_bytes = page.read() # загружаем страницу в переменную html_bytes +html = html_bytes.decode("utf-8") # декодируем страницу в кодировку utf-8 +hrefs = re.findall(find_href, html) # применяем регуляроное выражение и ищем все совпадения. +for ur in hrefs: # обходим результаты работы модуля re + u = ur[1] # так как у нас re возвращает tuple, то его изменять нельзя. поэтому вводим значение во временную переменную + if u[0] == "/": # проверяем внутренняя ли ссылка. + u = url + u # если была, внутренняя, то делаем из нее внешнюю. + is_avail = False # вводим переменную доступности + try: + p = urlopen(u) # проверяем на досупность ссылки в инернете + is_avail = True # если мы дошли до этой строчки, то значит ссылка досутупна + except: + pass # пустой оператор, чтобы программы не вылетала + urls.append([u, is_avail]) # дописываем ссылку в массив ссылок и результат ее проверки + +print("Живость ссылки | Ссылка") # выводим на экран получившийся массыв ссылок +urls.pop(0) # удаляем пустой массив +for u in urls: # обходим массыв ссылок + if u[1]: # проверяем параметр доступности + print(f"ссылка досупна | {u[0]}") # выводим сообщение если ссылка достуна + else: + print(f"ссылка недосупна| {u[0]}") # выводим если ссылка недоступна diff --git a/Practice/FliffyKsenia/lec12_2_imports.py b/Practice/FliffyKsenia/lec12_2_imports.py new file mode 100644 index 0000000..379c394 --- /dev/null +++ b/Practice/FliffyKsenia/lec12_2_imports.py @@ -0,0 +1,21 @@ +import socket +import pickle + + +class User: # Cоздаем класс User + def __init__(self, name, age): # объявляем процедуру инициализации + self.name = name # объявляем свойство Name + self.age = age # объявляем свойство Age + + +# клиент для подключения к серверу и при подключении говорит своё имя и возраст, и держит соединение открытым. пока пользователь не наберет Bye. +def client_program(user): + host = socket.gethostname() # получаем имя компьютера на котором запускается клиент, считаем, что сервер запущен на этом же ПК. + port = 5089 # порт к которому будем подключатся. + client_socket = socket.socket() # инициализируем сокет + client_socket.connect((host, port)) # подключаемся к серверу + text = "" + client_socket.send(pickle.dumps(user)) # запаковываем объект типа юзер и передаем его серверу. + while text.lower().strip() != 'bye': # пока не получили стоп слово общаемся с сервером и удерживаем соединение. + text = input("for exit, enter bye -> ") # ждем ввода пользователя, для поддержания соединения + client_socket.close() # Закрываем соединеие diff --git a/Practice/FliffyKsenia/lec14_2.py b/Practice/FliffyKsenia/lec14_2.py new file mode 100644 index 0000000..6173436 --- /dev/null +++ b/Practice/FliffyKsenia/lec14_2.py @@ -0,0 +1,58 @@ +import sqlite3 +import random + +conn = sqlite3.connect("lec14_2.db") # подключаемся к базе +cursor = conn.cursor() + + +def createdb(): # функция создания таблиц и заполнение данными + cursor.execute( # создаем таблицу производителей у которых мы знаем только имя. + "CREATE TABLE IF NOT EXISTS manufacturers (Manufacturersid INTEGER PRIMARY KEY AUTOINCREMENT, name text)") + manufactors = ['adidas', 'nike ', 'noname'] # вводим список для заполения таблицы производителей + for m in manufactors: # заполняем таблицу производителей в цикле. + cursor.execute(f"insert into manufacturers (name) values ('{m}')") + + cursor.execute( # создаем таблицу покупателей у них мы знаем возраст и имя. + "CREATE TABLE IF NOT EXISTS buyers (buyersid INTEGER PRIMARY KEY AUTOINCREMENT, name text, age integer)") + buyers = [['John', 25], ['Mary', 27], ['Barak', 47]] # создаем список для заполнения таблицы покупателей + for b in buyers: # заполняем таблицу покупателей + cursor.execute(f"insert into buyers (name,age) values ('{b[0]}',{b[1]})") + + cursor.execute( # создаем таблицу продуктов + "CREATE TABLE IF NOT EXISTS products (productid INTEGER PRIMARY KEY AUTOINCREMENT, Manufacturersid INTEGER, name text)") + products = [[1, "Олимпийка"], [2, 'Кросовки'], [3, 'Ремень'], + [1, 'Неликвид']] # создаем список для заполения таблицы продуктов + for pr in products: # заполняем таблицу продуктов. + cursor.execute(f"insert into products (Manufacturersid, name) values ({pr[0]},'{pr[1]}')") + + cursor.execute( # создаем таблицу покупок + "CREATE TABLE IF NOT EXISTS purchases (purchasesid INTEGER PRIMARY KEY AUTOINCREMENT, buyersid INTEGER, productid INTEGER, price float, quantity float)") + + for pu in range(15): + cursor.execute( + # заполняем таблицу покупок. так как нам надо вывести, те товары которые никто не покупал, в рандоме для йд товара не участвует цифра 4. чтобы ее точно никто не купил. + f"insert into purchases (buyersid, productid, price, quantity) values ({random.randint(1, 3)},{random.randint(1, 3)},{random.randint(0, 90)},{random.randint(1, 90)})") + + conn.commit() # подтверждаем транзакцию изменения базы. + + +if __name__ == '__main__': + cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='manufacturers'") + if cursor.fetchall() == []: # проверяем есть ли таблица "manufacturers", если нет, то считаем, что нет всех таблиц из запускаем функцию создания таблиц. + createdb() + print("Все товары:") + cursor.execute( + "select p.name,m.name from products p, manufacturers m where p.Manufacturersid = m.Manufacturersid ") # запрос для выборки всех товаров с производиелями + print("Производитель | Модель") + print("--------------|------------") + for fet in cursor.fetchall(): + print(f" {fet[1]} | {fet[0]}") + + print("") + print("Не популярные товары:") + print("Производитель | Модель") + print("--------------|------------") + cursor.execute( + "select p.name,m.name from products p, manufacturers m where p.Manufacturersid = m.Manufacturersid and p.productid not in (select productid from purchases)") # запрос для выборки непопулярных товаров. + for fet in cursor.fetchall(): + print(f" {fet[1]} | {fet[0]}") diff --git a/Practice/FliffyKsenia/lec2.py b/Practice/FliffyKsenia/lec2.py new file mode 100644 index 0000000..d34ac66 --- /dev/null +++ b/Practice/FliffyKsenia/lec2.py @@ -0,0 +1,6 @@ +radius = input("Введите радиус: ") +def square(r): + return math.pi * r ** 2 +import math +result = square(int(radius)) +print(f"Площадь круга: {result}") \ No newline at end of file diff --git a/Practice/FliffyKsenia/lec3.1.py b/Practice/FliffyKsenia/lec3.1.py new file mode 100644 index 0000000..4ad4444 --- /dev/null +++ b/Practice/FliffyKsenia/lec3.1.py @@ -0,0 +1,9 @@ +#запрашиваем длинну прямоугольника +x = int(input("a: ")) +# запрашиваем ширину прямоугольника +y = int(input("b: ")) +#вычисляем периметр прямоугольника +result = 2*(x+y) +#выводим результат на экран +print(f"Result: {result}") + diff --git a/Practice/FliffyKsenia/lec3.2.py b/Practice/FliffyKsenia/lec3.2.py new file mode 100644 index 0000000..d18ae0a --- /dev/null +++ b/Practice/FliffyKsenia/lec3.2.py @@ -0,0 +1,8 @@ +# запрашиваем количество километров +x = int(input("Расстояние которое проехал автомбиль, (км): ")) +# запрашиваем время которое ехал автомобиль. +y = int(input("Время которое проехал автомобиль, (ч): ")) +# вычисляем сколько автомобиль проехал в среднем за час. +result = x / y +# Выводим результат на экран +print(f"Result: {result}") \ No newline at end of file diff --git a/Practice/FliffyKsenia/lec3.3.py b/Practice/FliffyKsenia/lec3.3.py new file mode 100644 index 0000000..9012c4c --- /dev/null +++ b/Practice/FliffyKsenia/lec3.3.py @@ -0,0 +1,21 @@ +#программа по кодировке +kod = 325 +stroka = input("Введие символ: ") +stroka1 = "" +for ind in stroka: + kod_simvola = ord(ind) + #print(kod_simvola) + t = (kod_simvola+kod)%256 + stroka1 += chr(t) +print(stroka1) + +#программа по раскодировке +stroka1 = input("Введите символ: ") +stroka2 = "" +for ind in stroka1: + kod_simvola = ord(ind) + #print(kod_simvola) + e = (kod_simvola-325)%256 + stroka2 += chr(e) +print(stroka2) + diff --git a/Practice/FliffyKsenia/lec3.4.py b/Practice/FliffyKsenia/lec3.4.py new file mode 100644 index 0000000..85c6d32 --- /dev/null +++ b/Practice/FliffyKsenia/lec3.4.py @@ -0,0 +1,6 @@ +#запрашиваем слово с буквой "А" +a = input("Введите слово содержащее букву А: ") +# заменяем все варианты буквы "А" (англ. русскю.) на * +result = a.replace("A", "*").replace("a", "*").replace("А", "*").replace("а", "*") +#выводим на экран +print(f"Result: {result}") diff --git a/Practice/FliffyKsenia/lec4.1.py b/Practice/FliffyKsenia/lec4.1.py new file mode 100644 index 0000000..2ab1ee5 --- /dev/null +++ b/Practice/FliffyKsenia/lec4.1.py @@ -0,0 +1,13 @@ +# вывод на экран числа от 1 до 100 +for x in range(1, 101): + # если сгенерированное число на экран кратно 3 + if x % 15 == 0: + print('FizzBuzz') # выводит на экран "FizzBuzz" согласно условиям + # если сгенерированное число на экран кратно 5 + elif x % 5 == 0: + print('Buzz') # выводит на экран "Buzz" согласно условия + # если сгенерированное число кратно 15 + elif x % 3 == 0: + print('Fizz') # выводит на экран "Fizz" согласно условия + else: # в остальных случаях выводится число + print(x) \ No newline at end of file diff --git a/Practice/FliffyKsenia/lec4.2.py b/Practice/FliffyKsenia/lec4.2.py new file mode 100644 index 0000000..91cecb9 --- /dev/null +++ b/Practice/FliffyKsenia/lec4.2.py @@ -0,0 +1,12 @@ +while True: + # запрашиваем у пользователя ввод данных + x = input("Введите пятизначное число: ") + # проверка является ли введеные данные числом, задаем количество символов в строке + if x.isdigit() and len(x) == 5: + break # выход из цикла при вводе числа соответствующего условиям задачи +# вывод на экран +print(f"Введеное число: {x}") +# цикл для вывода данных столбиком, диапазон = количеству введеных цифр согласно условим +for index in range(1,len(x)+1): +# выводим на экран введеное "x" число столбиком, используя разделитель sep(&) + print(index, "цифра равна", x[index-1], sep = " ") diff --git a/Practice/FliffyKsenia/lec4.3.py b/Practice/FliffyKsenia/lec4.3.py new file mode 100644 index 0000000..468565f --- /dev/null +++ b/Practice/FliffyKsenia/lec4.3.py @@ -0,0 +1,18 @@ +chislo = "" +while True: + # запрашиваем у пользователя ввод данных + x = input("Введите число: ") + # если пользователь вводит слово Stop + if x.upper() == "STOP": + break #выходим из цикла + # проверяем являются введеные данные числом + if x.isdigit(): + # формируем число на основе введенных цифровых данных пользователем + chislo = chislo + x + # выводим сформированное число на основе введеных цифровых данных пользователем + print(f"На данный момент сформировано число: {chislo}") + # если введеные данные не относятся к STOP и не являются числом, выводим предупреждение + else: + print("Введено не число") +# выводим сформированое число на основе введеной информации пользователя +print(f"По результату работы программы было сформировано число: {chislo}") diff --git a/Practice/FliffyKsenia/lec4.4.py b/Practice/FliffyKsenia/lec4.4.py new file mode 100644 index 0000000..dd1340d --- /dev/null +++ b/Practice/FliffyKsenia/lec4.4.py @@ -0,0 +1,7 @@ +otvety = ['Ты сам-то понял, что написал? ', 'Аргументируй ', 'И? '] +# запрашиваем у пользователя ввод данных +fraza = input("Введите вопрос: ") +ind = 0 - 1 +while fraza.upper() != "ХВАТИТ": + ind = ind + 1 + fraza = input(f"{otvety[ind%3]}") \ No newline at end of file diff --git a/Practice/FliffyKsenia/lec4.6.py b/Practice/FliffyKsenia/lec4.6.py new file mode 100644 index 0000000..c24f46a --- /dev/null +++ b/Practice/FliffyKsenia/lec4.6.py @@ -0,0 +1,14 @@ +#вызов функции sravnenie (x, t) +def sravnenie(x, t): + print(max(x,t)) #печать результата сравнения + + +# вызов функции vozvrat(x, t) +def vozvrat(x, t): + return max(x, t) #возврат результата сравнения + + +# вызов на экран функции sravnenie (x, t) +sravnenie(10, 40) +# печать на экране vozvrat(x, t) +print(vozvrat(80, 20)) diff --git a/Practice/FliffyKsenia/lec4.7.py b/Practice/FliffyKsenia/lec4.7.py new file mode 100644 index 0000000..1d86b55 --- /dev/null +++ b/Practice/FliffyKsenia/lec4.7.py @@ -0,0 +1,14 @@ +def decorator(fun): + def funs(*agrs, **kwargs): + print("======================: ") + res = fun(*agrs, **kwargs) + print("======================: ") + return res + return funs + +@decorator +def summ(x, y): + print("ya krevedko") + return x+y + +print(summ(7, 9)) diff --git a/Practice/FliffyKsenia/lec4.8.py b/Practice/FliffyKsenia/lec4.8.py new file mode 100644 index 0000000..ad02af8 --- /dev/null +++ b/Practice/FliffyKsenia/lec4.8.py @@ -0,0 +1,31 @@ +#импортируем(подключаем) функцию random для возможности её использования: +import random + +# задаем компьютеру список слов для выбора: +game_slovs = ['камень', 'ножницы', 'бумага','stop'] +# запрашиваем у пользователя камень, ножницы, бумага +while True: + + while True: + igrok = input("Введите камень, ножницы, бумага(если считаете, что никогда не выйграете, то ваше стоп-слово 'STOP'): ").lower() + if igrok in game_slovs: + break + if igrok == game_slovs[3]: + print("Спасибо, с Вами было приятно играть. До свидания.") + break + # вызываем функцию рандом: + vybor_kompyter = random.randint(0, 2) + vybor_igroka = game_slovs.index(igrok.lower()) + result_of_game = vybor_kompyter - vybor_igroka + # выводим на печать выбор компьютера: + print("Выбор компьютера -", game_slovs[vybor_kompyter]) + # print(game_slovs.index(igrok.lower())) + # print("result of game",result_of_game) + # пишем условия выигрыша: + if result_of_game == 0: + print("Ничья: ") + elif result_of_game == -1 or result_of_game == 2: + print("Сожалеем, вы проиграли: ") + elif result_of_game == -2 or result_of_game == 1: + print("Поздравляем, вы выиграли!: ") + # ничья = 0 пк = -1, 2 игрок = -2,1 diff --git a/Practice/FliffyKsenia/lec5.1.py b/Practice/FliffyKsenia/lec5.1.py new file mode 100644 index 0000000..237dd5e --- /dev/null +++ b/Practice/FliffyKsenia/lec5.1.py @@ -0,0 +1,39 @@ +arr = ['0' ,'3', '24', '2', '3', '7'] +# найти наименьший элемент в массиве +print(min(arr, key=lambda i: int(i))) +# поменять местами его и первый элемент в массиве +# вызываем функцию свопинга +def swapPositions(arr, pos1, pos2): + arr[pos1], arr[pos2] = arr[pos2], arr[pos1] + + return arr +# вызываем функцию драйвера +arr = [0, 3, 24, 2, 3, 7] + +pos1, pos2 = 1, 3 +print(swapPositions(arr, pos1-1, pos2-2)) + +# найти следующий наименьший элемент в массиве +def two_min(arr): + m1, m2 = arr[0], None + for a in arr[1:]: + if a < m1: + m1, m2 = a, m1 + elif m2 == None or a < m2: + m2 = a + return (m2) + + +print(two_min([0, 3, 24, 2, 3, 7])) + +# и поменять местами его и второй элемент массива + + + +# вызываем функцию свопинга + +arr.sort() +print(arr) +#продолжать это пока весь массив не будет отсортирован +arr.sort() +print(arr) \ No newline at end of file diff --git a/Practice/FliffyKsenia/lec5.2.py b/Practice/FliffyKsenia/lec5.2.py new file mode 100644 index 0000000..3ad10a8 --- /dev/null +++ b/Practice/FliffyKsenia/lec5.2.py @@ -0,0 +1,5 @@ +i=0 +arr = [2, 3, 4, 5, 3, 2] +for i in range (0, len(arr) -1): + if arr.index(arr[i]) < i: + print(arr[i]) diff --git a/Practice/FliffyKsenia/lec5.3.py b/Practice/FliffyKsenia/lec5.3.py new file mode 100644 index 0000000..5a197d1 --- /dev/null +++ b/Practice/FliffyKsenia/lec5.3.py @@ -0,0 +1,10 @@ +predlogenie = 'Вася играл Adagio, когда произведение было написано Andante' +print("The original string is : " + str(predlogenie)) + +#словарь +dict_muzica = {"Adagio" : "медленно", "Andante" : "спокойно"} + +res1 = predlogenie +for e in dict_muzica: + res1 = res1.replace(e,dict_muzica[e]) +print(res1) \ No newline at end of file diff --git a/Practice/FliffyKsenia/lec5.4.py b/Practice/FliffyKsenia/lec5.4.py new file mode 100644 index 0000000..abf56d8 --- /dev/null +++ b/Practice/FliffyKsenia/lec5.4.py @@ -0,0 +1,30 @@ +def print_matrix(matrix): + for i in matrix: + print (i) + + +matrix = [[1,2,3,5,2],[4,5,6,2,1],[7,3,9,2,6],[1,2,3,4,5],[5,6,7,8,9]] +print("Bylo:") +print_matrix(matrix) +#удаляем поля, где встречается цифра 2 +delet = 2 +my = len(matrix) +if my > 0: + mx = len(matrix[0]) + + # заходим в цикл и осуществляем перебор с конца + + for indx in range(my): + for indy in range(mx-1,-1,-1): + if matrix[indx][indy] == delet: + for i in range(my): + matrix[i].pop(indy) + mx = mx - 1 + + + print("---------------------------") + print("Stalo:") + print_matrix(matrix) + + + diff --git a/Practice/FliffyKsenia/lec5.5.py b/Practice/FliffyKsenia/lec5.5.py new file mode 100644 index 0000000..1593202 --- /dev/null +++ b/Practice/FliffyKsenia/lec5.5.py @@ -0,0 +1,30 @@ +import os.path + +filename_in = '\/' +vybor = '' +variant_vybora = ("0", "1") +tabs = '\t' +probel = ' ' + +while not os.path.exists(filename_in): + filename_in = input("Введите имя файла: ") + +while not (vybor in variant_vybora): + vybor = input( + "Введите необходимую операцию: если необходимо выполнить замену табуляции (tab) четырмя пробелом, введите 0. Если необходимо заменить 4 пробела табуляцией (tab), введите 1: ") + +# filename_in = "/media/data/python_ucheba/python_ucheba/project/PythonCourse2.0_August22/Practice/FliffyKsenia/in.txt" +filename_out = filename_in + '_temp' + +if vybor == '0': + old_str = tabs + new_str = probel +else: + old_str = probel + new_str = tabs + +with open(filename_in) as file_in, open(filename_out, 'w') as file_out: + for line in file_in: + file_out.write(line.replace(old_str, new_str)) + +os.rename(filename_out, filename_in) diff --git a/Practice/FliffyKsenia/lec6.2.py b/Practice/FliffyKsenia/lec6.2.py new file mode 100644 index 0000000..e8923cc --- /dev/null +++ b/Practice/FliffyKsenia/lec6.2.py @@ -0,0 +1,54 @@ +# объявляем класс для уток. +class Duck: + # пусть у нас все утки будут серыми + COLOR = "серая" + + # инициализируем класс и вводим вес и имя утки. + def __init__(self,name = "",weight = 0): + self.weight = weight + self.name = name + + # возвращаем цвет утки. + def my_color(self): + return self.COLOR + + # подменяем стандартный вывод информацию об утке. + def __str__(self): + return f"Меня зовут:{self.name}, мой вес:{self.weight}, и я {self.COLOR}" + + # подменяем процедуру сравнения уток, и выясняем самую тяжелую. + def __lt__(self, other): + nam = self.name + if self.weight= skolco: + self.money -= skolco + print(f"Получите свои {skolco} чеканных монет.") + else: + print("Извините, но банкомат не распологает требуемой суммой. Попробуйте сократить свои апетиты.") + + # функция инвентарицации выводит имя банкомата количество денег и поддерживаемые операции + def inventory(self): + return f"Имя: {self.name}, количество средств: {self.money}, поддерживаемые операции: {self.operations}" + + # функция объявления банкомата обзывает банкомат и начальная сумма. + def __init__(self, name, cash): + self.name = name + self.money = cash + +# более продвидутый банкомат умеет к и принимать и выдавать деньги. +class Prostoi_bankomat(Bankomat): + operations = {"Выдача наличных.", "Прием наличных."} + def priem_nal(self, skolco): + self.money += skolco + +# Умный банкомат умеет принимать и выдавать деньги, а также проводить онлайн операции. +class Wise_bankomat(Prostoi_bankomat): + operations = {"Выдача наличных.", "Прием наличных.","Онлайн операции"} + def online_payment(self): + print("Онлайн операция проведена! Это было здорово!") + +# объевляем список банкоматов различных типов +bankomats = [Bankomat("Первый",5500),Prostoi_bankomat("Второй",6000),Wise_bankomat("Третий",4500)] + +# производим обход списка банкоматов и выводим их имена и количесво денег. +for inv in bankomats: + print(inv.inventory()) diff --git a/Practice/FliffyKsenia/lec9.1.py b/Practice/FliffyKsenia/lec9.1.py new file mode 100644 index 0000000..298934d --- /dev/null +++ b/Practice/FliffyKsenia/lec9.1.py @@ -0,0 +1,8 @@ +import re + +find_git = r'(git\ )([a-zA-Z\d\_\/\.\@\:\-\ ]+)+(\".+\")?' # формируем строку регулярного выражения для поиска команд git +with open('../README.md', 'rt') as file_readme: # открываем файл в котором надо производить поиск + for line in file_readme: # запускаем цикл для построчного чтения + res = re.findall(find_git, line) # применяем регулярное выражение и ищем все совпадения + for r in res: # пробегаемся по регультату работы модуля ре + print(''.join(r)) # объединяем группы в единую строку для вывода. diff --git a/Practice/FliffyKsenia/lec9.2.py b/Practice/FliffyKsenia/lec9.2.py new file mode 100644 index 0000000..eb6c0fd --- /dev/null +++ b/Practice/FliffyKsenia/lec9.2.py @@ -0,0 +1,29 @@ +# Список праздников в РФ в соответствии ТК РФ. +# 1, 2, 3, 4, 5, 6 и 8 января: Новый год +# 7 января: Рождество Христово +# 23 февраля: День защитника Отечества +# 8 марта: Международный женский день +# 1 мая: Праздник Весны и Труда +# 9 мая: День Победы +# 12 июня: День России +# 4 ноября: День народного единства +import datetime + + +def working_days(start_time, end_time): + # Массив официальных праздников по ТК РФ. + red_days = [[1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [7, 1], [8, 1], [23, 2], [8, 3], [1, 5], [9, 5], + [12, 6], [4, 11]] + worked_days = 0 # объявляем переменную отвечающую за количество рабочих дней. + while start_time <= end_time: # начинаем обход дней в нужном нам диапазоне. + # проверяем день является ли он рабочим. т.е. что день не является субботой или воскресением, а также не попадает в список праздников РФ. + if not (start_time.weekday() >= 5 or [start_time.day, start_time.month] in red_days): + worked_days += 1 # проверка прошла успешно, значит добавляем к итоговому количеству дней новый день. + start_time = start_time + datetime.timedelta(1) # прибавляем 1 день к начальной дате. + return worked_days # возвращаем получившиеся количество рабочих дней. + + +start_day = "01.01.2021" # объявляем начальную дату диапазона в формате ДД.ММ.ГГГГ +end_day = "14.01.2022" # объявляем конечную дату диапозона в формате ДД.ММ.ГГГГ +# выводим результат работы нашей фукции. +print(working_days(datetime.datetime.strptime(start_day, "%d.%m.%Y"), datetime.datetime.strptime(end_day, "%d.%m.%Y"))) diff --git a/Practice/FliffyKsenia/lec9.3.py b/Practice/FliffyKsenia/lec9.3.py new file mode 100644 index 0000000..ef46c72 --- /dev/null +++ b/Practice/FliffyKsenia/lec9.3.py @@ -0,0 +1,47 @@ +import os +import time +# просим у пользователя имя папки в которой нужна чистота. +source = input("Введите имя папки за чистотой которой надо следить: ") + +# функция рекурсивного удаления каталогов. +def remove_dir(dir_path): + # строим древо каталогов от пути переданного в функцию + for oswalk in os.walk(dir_path): + # удаляем все файлы в директории + for files in oswalk[2]: + file_path = os.path.join(oswalk[0],files) + if os.path.isfile(file_path): + os.remove(file_path) + # если каталог пуст, удаляем иначе идем в рекурсию. + if oswalk[1]+oswalk[2]==[]: + os.rmdir(dir_path) + else: + for dirs in oswalk[1]: + remove_dir(os.path.join(oswalk[0],dirs)) + + +while True: + # раз в секунду смотрим в нутри требуемой папки на предмет устаревших файлов и папок + time.sleep(1) + # строим древо каталогов + for oswalk in os.walk(source): + path = oswalk[0] + # обходим все папки + for dirs in oswalk[1]: + # строим путь до конкретной папки + path = os.path.join(oswalk[0], dirs) + # заправиваем время создания папки + create_time = os.path.getctime(path) + # проверяем, если папка создана больше чем 120 секунд назад вызываем функцию удаления папки. + if create_time+120