diff --git a/Lab_2/Task_1.py b/Lab_2/Task_1.py new file mode 100644 index 0000000..91b3bd6 --- /dev/null +++ b/Lab_2/Task_1.py @@ -0,0 +1,12 @@ +from math import * + +try: + x = float(input("Введіть значення x: ").replace(",", ".")) + y = float(input("Введіть значення y: ").replace(",", ".")) + + r = (pow(e, 2 * x) + sin(y)) / (log10(3.8 * x + y)) + + print(f"R = {r}") + +except Exception as err: + print("Error ocured:", err) diff --git a/Lab_2/Task_2.py b/Lab_2/Task_2.py new file mode 100644 index 0000000..ac7dcf5 --- /dev/null +++ b/Lab_2/Task_2.py @@ -0,0 +1,22 @@ +from math import * + +try: + a = float(input("Введіть число a: ").replace(",", ".")) + b = float(input("Введіть число b: ").replace(",", ".")) + + sqr_of_sum = pow(a+b, 2) + sum_of_sqr = pow(a, 2) + pow(b, 2) + + print(f"Квадрат суми = {sqr_of_sum}") + print(f"Сума квадратів = {sum_of_sqr}") + + if sqr_of_sum > sum_of_sqr: + print("Квадрат суми - більше.") + elif sum_of_sqr > sqr_of_sum: + print("Сума квадратів - більше.") + else: + print("Квадрат суми та сума квадратів рівні.") + + +except Exception as err: + print("Error ocured:", err) \ No newline at end of file diff --git a/Lab_2/Task_3.py b/Lab_2/Task_3.py new file mode 100644 index 0000000..788431d --- /dev/null +++ b/Lab_2/Task_3.py @@ -0,0 +1,13 @@ +try: + a = int(input("Введіть число a: ")) + b = int(input("Введіть число b: ")) + + if a < b: + numbers = [i for i in range(a, b+1)] + print(*numbers) + print(len(numbers)) + else: + print("Error ocured: A>B") + +except Exception as err: + print("Error ocured:", err) \ No newline at end of file diff --git a/Lab_2/Test.sh b/Lab_2/Test.sh new file mode 100644 index 0000000..ae12b19 --- /dev/null +++ b/Lab_2/Test.sh @@ -0,0 +1,13 @@ +# !/bin/sh + +for i in $(seq -1 0.5 1); +do + for j in $(seq -1 0,5 1) + do + + printf "Probe x = $i $((i * 2))\n"; + printf "%s\n%s\n" "$i" "$j" | python3 dummy.py; + printf "\n"; + sleep 0.25; + done +done diff --git a/Lab_2/dummy.py b/Lab_2/dummy.py new file mode 100644 index 0000000..c953da5 --- /dev/null +++ b/Lab_2/dummy.py @@ -0,0 +1,2 @@ +print(input().replace(",", ".")) +print(input().replace(",", ".")) \ No newline at end of file diff --git a/Lab_3/lab3_1.py b/Lab_3/lab3_1.py new file mode 100644 index 0000000..a2ce06d --- /dev/null +++ b/Lab_3/lab3_1.py @@ -0,0 +1,7 @@ +text = input("Введіть ваш рядок: ").split() + +if not text: + print("Ви ввели пустий рядок, спробуйте ще раз.") + exit() + +print("Ваш рядок без зайвих пробілів: {}".format(" ".join(text))) diff --git a/Lab_3/lab3_2.py b/Lab_3/lab3_2.py new file mode 100644 index 0000000..a1722fb --- /dev/null +++ b/Lab_3/lab3_2.py @@ -0,0 +1,12 @@ +inp = bytes(input("Введіть вашу послідовність: "), encoding="utf-8") + +if not inp: + print("Ви ввели пусту послідовність, спробуйте ще раз.") + exit() + +inp = inp.replace(b"<#s>", b"<#>") +inp = inp.replace(b"<#S>", b"<#>") +inp = inp.replace(b"", b"<#s>") +inp = inp.replace(b"", b"<#s>") + +print("Ваша послідовність після редагування: {}".format(inp.decode("utf-8"))) diff --git a/Lab_4/lab4_1.py b/Lab_4/lab4_1.py new file mode 100644 index 0000000..0dc7dc7 --- /dev/null +++ b/Lab_4/lab4_1.py @@ -0,0 +1,34 @@ +from random import * + +size = input("Введіть розмір бажаного списку: ").strip() + +if not size.isdigit() or size == "0": + print("Розмір списку має бути цілим додатним числом десяткової системи числення, спробуйте знову.") + exit() +else: + size = int(size) + +lim_raw = input("Введіть нижню та верхню межі для генерації списку через пробіл: ").split() + +lim_check = "".join(lim_raw).replace("-", "") + +if not lim_check.isdigit() or len(lim_check) <= 1: + print("Межі для генерації списку мають бути цілими числами десяткової системи числення, спробуйте знову.") + exit() +else: + low_n, high_n = map(int, lim_raw) + if low_n > high_n: + print("Нижня межа має бути введена перед верхньою, спробуйте знову.") + exit() + +odd_to_even = [randint(low_n, high_n) for i in range(size * 2)] +even_to_odd = [randint(low_n, high_n) for i in range(size * 2 - 1)] +res_list = [] + +for i in range(1, len(odd_to_even), 2): + res_list.append(odd_to_even[i]) + res_list.append(even_to_odd[i - 1]) + +res_list = map(str, sample(res_list, size)) + +print(f"Список згенерований для вас: {' '.join(res_list)}") diff --git a/Lab_4/lab4_2.py b/Lab_4/lab4_2.py new file mode 100644 index 0000000..2e3dadc --- /dev/null +++ b/Lab_4/lab4_2.py @@ -0,0 +1,21 @@ +from random import * + +size = input("Введіть кількість рядків та стовпців матриці через пробіл: ").split() + +if not "".join(size).isdigit() or len(size) <= 1 or "0" in size: + print("Кількість рядків та стовпців матриці мають бути цілими додатними числами десяткової системи числення надрукованими через пробіл, спробуйте знову.") + exit() +else: + m, n = map(int, size) + +matrix = [[randint(0, 10) for i in range(n)] for i in range(m)] + +print("Згенерована матриця:\n{}|\n".format("|\n".join(["|".join([f"{item:4}" for item in row]) for row in matrix]))) + +fixed_matrix = [matrix[i] for i in range(len(matrix)) if len(matrix[i]) == len(set(matrix[i]))] + +if not fixed_matrix: + print("Повторювані елементи є в усіх рядках матриці.") + exit() + +print("Матриця без рядків з повторюваними елементами:\n{}|\n".format("|\n".join(["|".join([f"{item:4}" for item in row]) for row in fixed_matrix]))) diff --git a/Lab_4/tst.py b/Lab_4/tst.py new file mode 100644 index 0000000..d2dd1cc --- /dev/null +++ b/Lab_4/tst.py @@ -0,0 +1,6 @@ +from random import sample + +symbols = bytearray(input("Your sequence: ").replace(" ", ""), "utf_8") + +print(str(bytearray(sample(symbols, 3)), "utf_8")) +#print(f"Your word: {bytearray(sample(symbols, 3)).decode(encoding='utf_8')}.") diff --git a/Lab_5/Namelist.py b/Lab_5/Namelist.py new file mode 100644 index 0000000..3a83dfa --- /dev/null +++ b/Lab_5/Namelist.py @@ -0,0 +1,8 @@ +from random import sample, randint + +with open("list.txt") as surnames_list: + surnames = surnames_list.read().splitlines() + +surnames = sample(surnames, randint(5, len(surnames))) + +print(surnames) diff --git a/Lab_6/example.py b/Lab_6/example.py new file mode 100644 index 0000000..cffab0b --- /dev/null +++ b/Lab_6/example.py @@ -0,0 +1,182 @@ +import random +import curses +import copy + +class Participant: + def __init__(self, surname, gender, drugs, weight_category, result): + self.surname = surname + self.gender = gender + self.drugs = drugs + self.weight_category = weight_category + self.result = result + +class CompetitionContainer: + def __init__(self): + self.participants = [] + + def clamp_result(self, result): + if 0 <= result <= 100: + return result + elif result > 100: + return 100 + else: + return 0 + + @property + def max_len(self): + return max( [len(j.surname) for j in self.participants] ) + + def generate_random_participant(self, max_surname_len = 10): + surname = chr(random.randint(1040, 1066)) + "".join([chr(random.randint(1072, 1098)) for i in range(random.randint(4, max_surname_len))]) + gender = random.choice(["чоловік", "жінка"]) + drugs = (random.random() <= 0.04) + weight_category = random.choice(["мінімальна", "найлегша", "легка", "напівсередня", "середня", "напівважка", "важка"]) + result = round(random.random() * 100, 2) + return Participant(surname, gender, drugs, weight_category, self.clamp_result(result + int(drugs)*random.randint(0, round(100 - result)))) + + def add_new_participants(self, amount = 40): + self.participants += [self.generate_random_participant() for i in range(amount)] + self.participants.sort(key = lambda x: x.result, reverse = True) + + def get_table(self, params): + p = copy.deepcopy(self.participants) + for i in params: + p = [j for j in p if getattr(j, i[0], False) == i[1]] + + return "Таблиця найкращих результатів за фільтрами: {}\n".format(", ".join([ "{} - {}".format(k[0], k[1]) for k in params ])) + "\n".join( [ "{}: {} балів".format(i.surname.rjust(self.max_len), i.result) for i in p if (not i.drugs) ] ) + + def get_disqualified(self): + return ["Дискваліфіковані:"] + ["{}: {} балів".format(k.surname.rjust(self.max_len), k.result) for k in self.participants if k.drugs] + +class ScreenManager: + def __init__(self): + self.buffered_result = ["Вітаємо у інтерактивній консолі!", "Наявні команди:", "лідери [жінки/чоловіки] [мінімальна/найлегша/легка/напівсередня/середня/напівважка/важка]", "учасники [жінки/чоловіки] [мінімальна/найлегша/легка/напівсередня/середня/напівважка/важка]", "дискваліфіковані"] + self.input_buffer = [] + self.suggests_buffer = ["учасник", "найращі", "додати_учасників", "очистити_учасників", "дискваліфіковані", "вихід"] + self.screen = curses.initscr() + self.LINES, self.COLS = self.screen.getmaxyx() + curses.noecho() + self.running = True + + self.possible_parameters = {"gender": {"жінка", "чоловік"}, "weight_category": {"мінімальна", "найлегша", "легка", "напівсередня", "середня", "напівважка", "важка"}} + self.suggest_base_commands = ["учасник", "найкращі", "додати_учасників", "очистити_учасників", "дискваліфіковані", "вихід"] + self.suggest_types = ["жінка", "чоловік", "мінімальна", "найлегша", "легка", "напівсередня", "середня", "напівважка", "важка"] + + self.render_buffer() + + while self.running: + self.process_input() + + curses.endwin() + + def process_input(self): + c = self.screen.get_wch() + if c == '\x0a': + self.buffer_results() + del self.input_buffer[:] + elif c == '\x7f': + if len(self.input_buffer): + self.input_buffer.pop() + elif c == '\x09': + if len(self.suggests_buffer) > 0: + self.input_buffer = list("".join("".join(self.input_buffer).rsplit(" ", 1)[:-1]) + " " + self.suggests_buffer[0]) + else: + self.input_buffer.append(c) + + self.auto_suggest() + self.render_buffer() + + def render_buffer(self): + self.screen.clear() + + # rendering results of previous command + for i in range(min(len(self.buffered_result), self.LINES-13)): + self.screen.addstr(i, 0, self.buffered_result[i]) + + # auto-completion (missing at the moment) + for i in range(min(len(self.suggests_buffer), 10)): + overflow = max(len(self.suggests_buffer[i]) - (self.COLS - len(self.input_buffer)) + 5, 0) + self.screen.addstr(self.LINES-2-i, len(self.input_buffer) + 2, self.suggests_buffer[i][overflow:]) + + # rendering user input string + if len(self.input_buffer) < self.COLS - 6: + self.screen.addstr(self.LINES-1, 0, "> " + "".join(list(map(lambda x: str(x), self.input_buffer)))) + else: + overflow_amount = len(self.input_buffer) - (self.COLS - 6) + self.screen.addstr(self.LINES-1, 0, "> ..." + "".join(list(map(lambda x: str(x), self.input_buffer[overflow_amount:])))) + + # flush the screen buffers + self.screen.refresh() + + def auto_suggest(self): + if len(self.input_buffer) > 0: + cs = [i for i in "".join(self.input_buffer).split(" ") if i != ""] + if len(cs) == 1: + self.suggests_buffer = [j for j in self.suggest_base_commands if j.startswith(cs[0])] + elif len(cs) == 2: + if cs[0] == "учасник": + self.suggests_buffer = [k.surname for k in cc.participants if k.surname.startswith(cs[1])] + elif len(cs) > 1: + if cs[0] == "найкращі": + self.suggests_buffer = [i for i in self.suggest_types if i.startswith(cs[-1])] + + + def buffer_results(self): + command = "".join(self.input_buffer) + + if len(command) > 0: + cs = command.split(" ") + + while "" in cs: + cs.remove("") + + if len(cs) == 0: + self.buffered_result = ["Команда не введена!"] + return 0 + + params = {} + + if cs[0] == "найкращі": + if len(cs) == 1: + self.buffered_result = cc.get_table([]).split("\n") + else: + for i in cs[1:]: + for j in self.possible_parameters: + if i in self.possible_parameters[j]: + params[j] = i + + self.buffered_result = cc.get_table(list(params.items())).split("\n") + + elif cs[0] == "учасник": + if len(cs) == 2: + if cs[1] in [i.surname for i in cc.participants]: + self.buffered_result = [ "{}: {} балів".format(i.surname.rjust(len(i.surname)), i.result) for i in cc.participants if i.surname == cs[1]] + else: + self.buffered_result = ["Помилка!", "Невідомий учасник"] + + elif cs[0] == "дискваліфіковані": + self.buffered_result = cc.get_disqualified() + elif cs[0] == "вихід": + self.running = False + + elif cs[0] == "очистити_учасників": + cc.participants.clear() + self.buffered_result = ["Успіх!", "Список учасників було очищено"] + elif cs[0] == "додати_учасників": + if (len(cs) == 2) and (cs[1].isdigit()): + cc.add_new_participants(int(cs[1])) + elif (len(cs) == 1): + cc.add_new_participants() + else: + self.buffered_result = ["Помилка!", "Ви ввели неправильну кількість аргументів для команди додати_учасників"] + else: + self.buffered_result = ["Такої команди не існує!"] + else: + self.buffered_result = ["Команда не введена!"] + + +if __name__ == "__main__": + cc = CompetitionContainer() + cc.add_new_participants() + + sm = ScreenManager() diff --git a/Lab_7/2.txt b/Lab_7/2.txt new file mode 100644 index 0000000..87f5ac1 --- /dev/null +++ b/Lab_7/2.txt @@ -0,0 +1,698 @@ + . i + . i + + + I + - i i , + ! i, , , ; i i +i ', , , i i, i i, + . i , , + , i , i. I -, i +i , i i - . , +; , , i . + , i . , , + , i, , i . + , - i. - + , i ; , + - , i , i i, i , i +i . , - + ; , i . + , , i : + - , - , - , ? : + - i, i-, i +; ; i , i . + - ! I ! - + i , - ! + - , , - . - : + ! + i, i, i ; +, , ! + II + ' ; . I +, , ! , +i i. i i , , +' i i . ? , + i . i, i . +i: , i ! i + , , i i i, -! + , , , i ? i i +, i, , i - +. i, , ii ( + , , ' , i i - +); : " ! +, ! , i , i +i-! !" + i , i i, +i - i ! , , , , + i ! + i , i i i, ! +i , i + . ! +, , . , i +. i i - , i i + i: i i. i : + - ? + - , - . + - i , . . +, i. , i, . +, i , i, ! +, i - . i i +i: + - ! - , - ! i , +! + i . + - , , ! - . - + ! i! i! ! + - , , - , - i, +. + . I , +i; i , i i . + III + , - i i , +: + - ! ! , ? i , + ? + - i , , - , - +i, . + : i i i , . + , - i , i . + , . , +, , i i +. . " i - ", - +. , i , , i + i , : " !" + i, i . + , - i , +! . , +i. i , i... i : . +, , - : , . + IV + - ! - . + - , , ? i. i i. + , . + i i. + - i! i ! - . - ! i! +. " i?" - , i, , i +i ii. , i i +, . + - , - , - ! + - , - , - , ! , +! + i , , - i ! i + . + , i, , . i , i +i . i i; +. + . , +i i. + - , - , - . + . . , - +. - , . + , . i , + i i i. , i i +, ; , . I i + i, , i ! i + . , . + i i . , +', ! , i. +iii i i; , ? +" , - , -  ". + : " ii i !" + i i, , i + , i. i , , i i + , i i. I +, : i i ii i, +, i, , -i i; + i, i i, ... i, +i i, i , i i . + + I + - , '. i i + , i i i . + i, i . + , - , . - , +i !" + : i, i . + , i; , , i , +: i i . - i i +, ! i ! + i i ; . . + , i i, i . i i + i. i , ! +, ... - ! i i, +; ! i , i +. - , , i, + i, i i ! i i , + i . ", - , - i". +i, , i i, i i, +i. . i, +, , i . + i i . i ! - +! i... i + . i ' ! +: i. , , i i. + - i - i. +i, i ii - i i ! , , +... ... + . i i + . + - , ! i i! i + , ! + II + i , i; + , , i! I , i, +, i , . + i i . + : i . - +! ; i i i : i +, ; ' i : i i +i. , '. i , i i +i i. i i . + - ! - . - , i ! +, - , , i ! + i i, , i +i i i: i , i i, i +, . i: " i, i , i +!" i , . + , . + , ! , . + I , i : +" i!", i : "!" i, + , i . + i . i i, +i, ! ", ! - . - i , + ". , , - -i ; + ; . , + , i. i ; + ii. + i. ; , , +i i . i i - i i; i, + i ... : " , i !" + - i. . + . + - , - , - ! + - i. + - i ! + - i ? + - , i . + - , ! - i i . + i . i +i i. . + - , - , - i , + ! i i! + , ... ! i i +... + - , - , - i, ! i + , i i! - + . + i. i : " , i !" +i ; , i + i. i, , +. i , , , ! i i; +i . " i , i?" - " i?" - " +, ' ", - , , +. , i , ; + i i ! I i i - : +"i-! ? , ? , +?" i , ii . " ", - +i i . + III + , i, i. i . i + i: + - i, i, , !.. + i . i i. + - , ? + - i, , . + i ii ii, . + - i! - . - , , ! : i +i ! + - i ! i , i + i ! , ? i +! + i. + i : + - , , i ? , ! +? + , i ii i . i + , i : + - , - , - , ! i , + i i. i ii... ii + , i , +i! + - i, ! , + , - . - i , + , i i i, i! , - +. + - , , i! + - , , . + i i : + - ? + - i ! + - i, ! , ! - + , i i, - i : + - ! + i. ! ! + - i ! ! , i +, ! + , i . + i . + , , : + - i, , i ! i +, i i. + . + . : , , + . , ! +, i , i, +i , , i , i ! , + i, ! , ! + ! i ; i , + , i ! i, +i i i, , ; . + IV + ii-ii i. i ; i +, - i. i, . I +. i . + I, i i . i , +i. i i ; +... i, i i ii , + , ii . i +i', i , i, i i +. i i , - . i +, iii; i i + i, i i , i i i - +. + i ? i i , i , i i i. + i -i, 'ii i i +i: . "i i , - +, - i ii , i i ". + I , - , ! , i +i . : i, i, , + . i i , i , i , i + i : 'i, i-i + i. + i i . + i, i i; i +; i, i , + ; , i i - ; i + i , i, + . + - i i : i i, i, i i; + . "! - i. - +i, ". , i. + - i ? - , , + i + - , i , - . - + ? + - 'i, . + - , i 'i! i ; + i i! + - ? + - ? ? i, , . +i, i, i i, i . + - , , - , i i, +i , i i . - + i i , - ! i +i! + - , ? + -, . i i ' . i + ; , . i +, ' i ; i i . i, + i , i . , , i? , +? . + - , , . + - ! i , ? + - I , , i, i , +, i i! , ! + - i, ! ! i + , I . i , i +i, i i , , , i . i , +ii, i! i , i . , + i, - . i , + i i . , i! +I i i i ', . + , i i , - i +. , +. " i, - , - i , + i i; + i i i i, i + ". i , + - , i ... +I , . . , . + - i , ! ! + - , i i. i +, . + V + 'i i, i, . + . i , , , ' +, . I +; i , i , i , - , +. + i i , i . + i, . i +, . , , +, i i i. i i. +, i. + - i , , - . + i, , i i, , i. i + i, i, i . + i ; i i, i ii +i . + i i, . +i , i . , +i: , , i , , +i. + - i , , - . - , + , i i. i , , + ! , !.. , . + i, , , - + i , . + - , , , . + , i i . i: +"- i? ?" + . i, ; i , i! + , . , , i, i +i i i . i + , i - , ! +i , i; . I + i , i , i i +i . , , , i i +i i. i ! , i +. + - , - , - i . , i +i, , i . , , , + ii; ' - ! +i, , , ! , i ! + . i , , i ; +i i i; i-i i, i +i i i; i i + i i, i i; + i i, i, . I , , i +, i, , ... , i i + - i i, i i', i i. !.. + - ...i - i i; - i ! -, , , + . + - i, ! - i . i i +i . + - i! - . + VI + , i i i. , +- , i ! i! +, i - i. i: + - i ? , i . + . I 'i ( , , ), , +, - i, - , , i + , . + - i ? - . - i ? , + ? + - ! I i , . +i ? + - i , i , i i, i '... + ! , - , + . + - ? + - - , ! - i , +. + - i , -, - . : +i . + i , , , - . + i -! + - i, i , , +. , , ! + - , . ? . ! + i ! i i! i +, , i'. ! + - - , i i i, - . + - , i ! - i, i. + , i, ... . + i , i : + - i ! + - i? - , . + - i, , , i , i +i . . + - . - i i. + i! i i! i: , i -, +- . i : " i +. i i (i , i ), + i : ". + i i, , i +: + - , i , ! + - i, . + , '; i i . + , . , +, . + i, i , i i . + i, i , , i, +i - i i, - . i-i, +, , , . + i , i i i. , + i i, i : +i i; , +: !.. . + i. i i ; + i : , ! + i i! - , ! - ' + i ; i i , : " +, i i i? I : i i + ', i !" + i i i, , - + i , , i , +, - i, i . + - , - , - ' i, i ! + ? i , i ! + ; , , , , +, . + VII + i . i +. " , - , - ! i i + i, , i !" , + , . I i . + 'i. i i, i + i. , i . + - i , - . - , , + . + - ! I . , +. i i , + , i . + i . i i . + , - ii, i + , i ! I - , i i +, i i - i , + i i i i i ; + i . i + i, i i : +"i!" ; + , , i , i i, + i . + . , , ! i , + ! , ! i, i - i + . , i i i . +, , i i . i , + , - i i. + - ! - . + - i! + i - _ i. + - , - , - ? + - ! i , ! , , , +: . + - , - , - i . + - i, . + : , +, i, i, , , - i , , i +i; , . , i . +i i, i - + i. , , , , + : ", ! i i! i , +! , , , i ! , , +!"- , i ii i +i i i. , + : + --_ i, i, i , , , +, i, ! + -- i , i ! - . - + ! i! ? + , i, , i , i +, i i. + , i , , i +i, i , i i : ", +! i?" + , , i. i + i. + - i, i ? + - ? - i. - i i. + . i: " i , , i , + , i , i i, , i , i . i i +!" + - i i, - , . : + . + - , i! + i . ", -, -- i. +: , , i, + . i i ". + VIII + i  . ; i +i, i, i, i , i i +, i , - , , + i: i ... i , + i, i. + - , i, - , - ? + - i . . + - , ! , ! ? + i i, i , i . i + , ! + , i , i, . + , i ! , + i ? + i . + - , - , - i, ! i i i +, , i. + i i i , - , , +i i, i i i. i : + - , , , ! + i , . , - +, ! iii i; i, + . : + , ! - , +i - . I , , i , i + ... , i i : +", - , - , I i, +-, ? -. , , +!" . , : " , +, ! , i - !" + , , : ", ! i! +, i i i i. , + i i!" + i i. + - ? - , , i, - , +! ii, . + , i, ! ? + , . + i i. ; +, , , i . , + i , i i i-!.. +, , . + - i: , i, + i. + : i . , + : + - , ! , i + ! , , + . i i i : i i, i +i, ii i . , , i , +. , i i + i! , ! + i i. : + - , , ' i i i? + - ', ! + i. i, i, i i +. I , i i; i + : i! + IX + i : i i , i +- . i , + , i, i , i + i: , +. , i i , +, i , i i. i + i, i ; , +, i i i, i, i +, , - ' i : , +, ! + , i , i i , +i, i, , i... + . i ! + i ; i i i. + - ? - . - i +i, 'i, , +i. " , - , - , , +, !" + - ? - . - i, i i i? + i? + - ! i i, i i. . + , ! , i . +i , i i . + - i, - , - i i ? + ? i , , i, +ii. + - , - , - , i. + ' i : +, i. i i , + i i , ' +i, , , , i i, i +i i i, - , i i! + i, i i. i ! +, i . +, i, i ! +i : ii , i, i, , +, i, i i i , i . + , i +. , , i, i +ii. + i i i . +, , . ", i + ii ", - , . - +! , , i , i +. + - i , - , - i , . + i , i , i, +i ! + - i ! i. , i +: ! + - i, i . , +i . + : ii ; , + , i i , - : i +, . + + i , . + i . i i! + i : + - , i ! i , i ! + - i, i! - . - i, i +i, i i ! i +'. + , i i i , i. + ! I , i , i... + . + - i, ? + - i . . i + i . + i i i, , i . +i i i, , i i, i , + i , i i i . , + i , , i , ! + : + - i ! ii: , i +, i . , + i. i, i i, i +i, , , i. + , i i... i + i, i . + - i, !.. + . + i i. i i, : + - ? ! - . - i + : i '. + - , - , - +. + - i, , ? i , +, ? + - i, - . - i. ? + - i, - . - , , i, + i i . I i i . + : i , i i . , +, . + - , - , - i . i, i, + i . , i ' i. + "i, - i, - ': +i". + , i , i, +. + - , - , - i! i ! + i i. , , +. i ! + i. I ii i . +, , ! , , - +! , , , i , i + i. i, ! + \ No newline at end of file diff --git a/Lab_7/Lab_5.py b/Lab_7/Lab_5.py new file mode 100644 index 0000000..df24f5e --- /dev/null +++ b/Lab_7/Lab_5.py @@ -0,0 +1,143 @@ +from random import randint, sample +from collections import Counter + +# Генеруємо список прізвищ для генерації учасників конкурсу. +with open("list.txt") as surnames_list: + surnames = ( + surnames_list.read().splitlines() + ) + +if __name__ == "__main__": + while True: + # Запит кількості учасників конкурсу. + competitor_sample = input( + f"Введіть кількість учасників конкурсу, мінімум 3, максимум {len(surnames)} " + "(введіть \"в\" щоб вийти): " + ) + + # Вихід з програми. + if competitor_sample.lower() == "в": + print("\nВихід з програми.") + exit() + # Перевірка коректності введених даних. + elif not competitor_sample.isdigit(): + print( + "\nКількість учасників конкурсу має бути цілим додатнім числом, " + "спробуйте ще раз.\n" + ) + continue + + competitor_sample = int(competitor_sample) + + # Перевірка коректності введених даних. + if competitor_sample < 3: + print( + "\nКількість учасників конкурсу має бути не менше 3.\n" + ) + continue + elif competitor_sample > len(surnames): + print( + f"\nКількість учасників конкурсу має бути не більше {len(surnames)}.\n" + ) + continue + break +else: + competitor_sample = len(surnames) + +# Генеруємо список прізвищ. +surnames = sample(surnames, competitor_sample) +indent = len(max(surnames, key=len)) + 4 + +# Генеруємо словник з результатами тестування. +competitors = {surname: randint(0, 100) for surname in surnames} + +if __name__ == "__main__": + # Виводимо результати тестування. + print("\nРезультати тестування:") + + for surname in competitors: + if competitors[surname] % 10 == 1: + print(f"{surname:>{indent}} : {competitors[surname]} бал.") + elif ( + competitors[surname] % 10 > 1 + and competitors[surname] % 10 <= 4 + and competitors[surname] > 20 + ): + print(f"{surname:>{indent}} : {competitors[surname]} бали.") + else: + print(f"{surname:>{indent}} : {competitors[surname]} балів.") + +# Генеруємо список переможців. +winners = Counter(competitors).most_common(3) +indent = len(max([surname[0] for surname in winners], key=len)) + 4 + +if __name__ == "__main__": + # Виводимо переможців. + print("\nПереможці:") + + for surname in winners: + if surname[1] % 10 == 1: + print(f"{surname[0]:>{indent}} : {surname[1]} бал.") + elif surname[1] % 10 > 1 and surname[1] % 10 <= 4 and surname[1] > 1: + print(f"{surname[0]:>{indent}} : {surname[1]} бали.") + else: + print(f"{surname[0]:>{indent}} : {surname[1]} балів.") + + + while True: + # Запитуємо користувача про бажання шукати учасників. + search_mode = input( + "\nЧи хочете знайти конкретних учасників за прізвищами? " + "(Так/Ні): " + ).lower() + + if search_mode == "так": + + while True: + surnames_to_search = input( + "\nВведіть прізвища учасників яких хочете шукати через кому " + "(введіть \"в\" щоб вийти): " + ).strip(" ,.:").split(", ") + + # Перевірка коректності введених даних. + for i in surnames_to_search: + if (" " in i and "," not in i) or ( + "," in i and " " not in i + ): + print( + "\nПрізвища учасників мають бути розділені через кому і пропуск, " + "спробуйте ще раз." + ) + break + else: + break + continue + + # Виводимо результати пошуку. + if surnames_to_search & competitors.keys(): + print("\nРезультати пошуку:") + indent = len(max(surnames_to_search & competitors.keys(), key=len)) + 4 + + for surname in surnames_to_search & competitors.keys(): + if competitors[surname] % 10 == 1: + print(f"{surname:>{indent}} : {competitors[surname]} бал.") + elif ( + competitors[surname] % 10 > 1 + and competitors[surname] % 10 <= 4 + and competitors[surname] > 20 + ): + print(f"{surname:>{indent}} : {competitors[surname]} бали.") + else: + print(f"{surname:>{indent}} : {competitors[surname]} балів.") + + break + else: + print("\nУчасників з цими прізвищами не було знайдено.") + break + + elif search_mode == "ні": + print("\nВихід з програми.") + break + else: + print("\nНекоректна відповідь, спробуйте ще раз.") + continue diff --git a/Lab_7/Lab_6.py b/Lab_7/Lab_6.py new file mode 100644 index 0000000..4602d16 --- /dev/null +++ b/Lab_7/Lab_6.py @@ -0,0 +1,81 @@ +import random +from collections import Counter +from datetime import date +from calendar import monthrange + +class Month: + def __init__(self, name, m_number): + days = monthrange(date.today().year, m_number)[1] + self.name = name + self.days = [(random.randint( 25 - 8*abs(7-m_number), 50 - 8*abs(7-m_number)), random.choice(["Дощ", "Сонце", "Хмара"])) for i in range(days)] + + def count_weather(self): + return Counter([i[1] for i in self.days]) + + def avg_temp(self): + return round(sum([i[0] for i in self.days]) / len([i[0] for i in self.days]), 2) + + def max_temp(self): + return max([i[0] for i in self.days]) + + def min_temp(self): + return min([i[0] for i in self.days]) + +month_names = ["Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"] +year = {month_names[m_number]: Month(month_names[m_number], m_number+1) for m_number in range(12)} + +valid_actions = ["Погода", "Середня температура", "Мінімальна температура", "Максимальна температура", "Місяць", "Вихід"] + +if __name__ == "__main__": + while True: + + while True: + month_name = input("\nВведіть назву місяця: ") + if month_name not in month_names: + print("\nТакого місяця не існує, спробуйте ще раз.") + continue + else: + break + + print("\nОберіть бажану дію:\n" + " Погода - дізнатися кількість сонячних, хмарних і дощових днів.\n" + " Середня температура - дізнатися середню температуру за місяць.\n" + " Мінімальна температура - дізнатися мінімальну температуру за місяць.\n" + " Максимальна температура - дізнатися максимальну температуру за місяць.\n" + " Місяць - змініти введений місяць.\n" + " Вихід - завершити роботу програми.\n" + ) + + while True: + + action = input("> ") + + if action not in valid_actions: + print("\nТакої дії не існує.\n") + continue + + if action == valid_actions[0]: + print(f"\nСонячних днів: {year[month_name].count_weather()['Сонце']}") + print(f"Хмарних днів: {year[month_name].count_weather()['Хмара']}") + print(f"Дощових днів: {year[month_name].count_weather()['Дощ']}\n") + continue + + elif action == valid_actions[1]: + print(f"\nСередня температура цього місяця: {year[month_name].avg_temp()}°\n") + continue + + elif action == valid_actions[2]: + print(f"\nМінімальна температура цього місяця: {year[month_name].min_temp()}°\n") + continue + + elif action == valid_actions[3]: + print(f"\nМаксимальна температура цього місяця: {year[month_name].max_temp()}°\n") + continue + + elif action == valid_actions[4]: + break + + else: + print("\nВихід з програми.\n") + exit() + diff --git a/Lab_7/Lab_7.py b/Lab_7/Lab_7.py new file mode 100644 index 0000000..8b22548 --- /dev/null +++ b/Lab_7/Lab_7.py @@ -0,0 +1,144 @@ +from random import randint +import pickle +import shutil +import sys +import os +import shelve +import glob + +class FileManager(): + + def __init__(self): + self.root = os.path.abspath(os.path.expanduser("~")) + self.catalogues = ["/lab5/", "/lab6/", "/lab7/", "/lab7/Shved/"] + + def make_path(self, path): + return os.path.abspath(self.root + path) + + def make_directory(self, path): + target_directory = self.make_path(path) + if not os.path.exists(target_directory): + print(f"Створення каталогу {path} у {self.root}") + os.mkdir(target_directory) + else: + print(f"{path} вже існує.") + + def copy(self, source, destination): + shutil.copy(source, self.make_path(destination)) + + def halve_text(self, source, destination1, destination2): + import re + + with open(self.make_path(source), "r", encoding = "WINDOWS-1251") as source: + raw_text = source.read() + + stringifyed_text = raw_text.replace("\n", " ") + + subbed_text = re.sub(r"\s+", r" ", stringifyed_text) + subbed_text = re.sub(r"([.,\?\!\":])\s?(\-?\s?\"?[А-ЯA-Z])", r"\1|\2", subbed_text) + subbed_text = re.sub(r"([A-ZА-Я])\s+(\-?\s?\"?[А-ЯA-Z])", r"\1|\2", subbed_text) + subbed_text = re.sub(r"([A-ZА-Я])\s+(\-?\s?\"?[А-ЯA-Z])", r"\1|\2", subbed_text) + + sentences = subbed_text.split("|") + + sentences_length = len(sentences) + sentences_halved = len(sentences) // 2 + + with open(self.make_path(destination1), "w", encoding = "WINDOWS-1251") as d1, open(self.make_path(destination2), "w", encoding = "WINDOWS-1251") as d2: + d1.write("\n".join(sentences[:sentences_halved])) + d2.write("\n".join(sentences[sentences_halved:])) + + self.sentences = sentences + + def symbol_count(self, path): + return os.path.getsize(self.make_path(path)) + + def odd(self, destination): + with open(self.make_path(destination), "w", encoding = "WINDOWS-1251") as f: + f.write("\n".join([self.sentences[i] for i in range(0, len(self.sentences), 2)])) + + def picklify(self, destination): + import Lab_5 + with open(self.make_path(destination), "wb") as f: + pickle.dump([Lab_5.surnames, Lab_5.competitors, Lab_5.winners], f) + del Lab_5 + + def modify_pickles(self, source, destination): + with open(self.make_path(source), "rb") as f: + lab_pickle = pickle.loads(f.read()) + + for i in range(10): + lab_pickle[1][randint(0, len(lab_pickle[1])-1)] = str(i*randint(0, 5)) + + with open(self.make_path(destination), "wb") as f: + pickle.dump(lab_pickle, f) + + def put_on_shelve(self, destination): + import Lab_6 + with shelve.open(self.make_path(destination)) as db: + db["months"] = Lab_6.year + del Lab_6 + + def modify_shelve(self, path): + with open(path, "rb+") as f: + f_length = len(f.read()) + f.truncate(round(f_length / 2)) + + os.chmod(path, 0o700) + + with open(path, "ab") as f: + for i in range(5): + f.seek(randint(0, f_length), 0) + f.write("Багато зайвих даних".encode("UTF-8")) + + def do_the_lab(self): + print("Створюємо папки.") + for path in self.catalogues: + self.make_directory(path) + + print("Копіюємо файл у папку з лабораторною роботою.") + self.copy("2.txt", "/lab7/Shved/2.txt") + + print("Розділяємо файл за реченнями.") + self.halve_text("/lab7/Shved/2.txt", "/lab7/Shved/2part1.txt", "/lab7/Shved/2part2.txt") + + sc1 = self.symbol_count("/lab7/Shved/2.txt") + sc2 = self.symbol_count("/lab7/Shved/2part1.txt") + sc3 = self.symbol_count("/lab7/Shved/2part2.txt") + + print(f"Кількість символів у початкаовому файлі: {sc1}\n" + f"Кількість символів у першій частині: {sc2}\n" + f"Кількість символів у другій частині: {sc3}") + + print("Створимо файл з непарними реченнями.") + self.odd("/lab7/Shved/odd.txt") + + print("Серіалізуемо та зберігаємо об'єкти 5-ї лабораторної роботи.") + self.picklify("/lab7/Shved/Lab_5.pickle") + + print("Переміщуємо файл у необхідну папку.") + shutil.move(self.make_path("/lab7/Shved/Lab_5.pickle"), self.make_path("/lab5/Lab_5.pickle")) + + print("Доповнюємо файл і переіменовуємо його.") + self.modify_pickles("/lab5/Lab_5.pickle", "/lab5/Lab_5-extended.pickle") + + print("Зберігаємо об'єкти 6-ї лабораторної роботи.") + self.put_on_shelve("/lab7/Shved/Lab_6-db") + + print("Переміщуємо файл бази даних у необхідну папку.") + for file_to_move in glob.glob(self.make_path("/lab7/Shved/Lab_6-db*"), recursive = True): + if not os.path.exists(self.make_path("/lab6/" + os.path.basename(file_to_move))): + shutil.move(file_to_move, self.make_path("/lab6/")) + else: + print(f"{os.path.basename(file_to_move)} вже існує у {self.make_path('/lab6/')}") + os.remove(file_to_move) + + print("Модифікуємо файли.") + for file_to_alter in glob.glob(self.make_path("/lab6/Lab_6-db*"), recursive = True): + self.modify_shelve(file_to_alter) + print("Файли бази данних змінено.") + + print("Завдання виконане.") + +o = FileManager() +o.do_the_lab() diff --git a/Lab_7/list.txt b/Lab_7/list.txt new file mode 100644 index 0000000..2afff3f --- /dev/null +++ b/Lab_7/list.txt @@ -0,0 +1,198 @@ +Анищенко +Антонич +Антонов-Овсієнко +Бабота +Базавлученко +Балюх +Барвінок +Бгиденко +Белькевич +Блажевський +Богун +Божко +Бойченко +Бокотей +Будянський +Білик +Білозір +Великий +Войцеховський +Вівчаренко +Гаврюшенко +Гайдабура +Галушка +Гальчук +Галібей +Герцик +Гладуш +Грибовський +Громики +Громницький +Гулик +Гупало +Дворжицькі +Демиденко +Демиденко +Демченко +Деркач +Домбровський +Дуда +Дутка +Дідик +Жученко +Кабаченко +Калиниченко +Карашевич +Когут +Кодола +Козловський +Колесник +Кохно +Креховецький +Куриленко +Кущієнко +Лазаревський +Лебединський +Лобода +Лукомський +Ляшко +Лященко +Масляк +Носаль +Олеськів +Островерха +Павловський +Пелех +Писарчук +Поровський +Приходько +Радецький +Романишин +Романів +Роп'яник +Рудник +Савенко +Селезінка +Сеньковський +Серебрянський +Сойка +Сосенко +Татаренко +Татаренко +Трощинський +Трух +Улицький +Федишин +Харитоненки +Хомич +Шелудченко +Ширай +Шкурган +Шкіря +Штинь +Шулятицький +Юринець +Юхименко +Яворський +Янів +Ясній +Ящук +Никончук +Шпак +Ліщук +Тишкевич +Каніболоцька +Мащенко +Катрич +Трутовська +Доронченко +Дутко +Котляренко +Полотнюк +Залюбовська +Деряжний +Балінська +Стецьків +Доній +Струкевич +Порошенко +Житецька +Рубець +Дацюк +Пушкарук +Маляренко +Карплюк +Паученко +Турченко +Іванусів +Демидчук +Лавровська +Целуйко +Сацюк +Атрощенко +Кучерук +Коломієць +Мелащенко +Тимощенко +Гуцуляк +Гринішак +Погрібна +Огієнко +Бурко +Лобода +Любенецька +Дворська +Макушенко +Яснопольська +Вишневецька +Ігнатенко +Пантелюк +Демидчук +Розумна +Ромащенко +Дідківська +Шуліка +Федорчук +Сільченко +Виговська +Вітер +Даниш +Бутовичі +Ботвиновська +Смоляк +Книш +Сергієнко +Леонтовичі +Зубач +Безотосний +Кольченко +Которович +Боєчко +Смолій +Філіпчук +Канівець +Хорішко +Марчук +Линник +Гладких +Могитич +Лащенко +Кончаловська +Шандра +Ткач +Вітенко +Крамар +Смирна +Завірюха +Шейко +Сиротюк +Мануляк +Таранець +Огар +Корпонай +Віцюк +Шпек +Которович +Божко +Здесенко +Фіалкович diff --git a/Lab_7/odd.txt b/Lab_7/odd.txt new file mode 100644 index 0000000..1a3e1a8 --- /dev/null +++ b/Lab_7/odd.txt @@ -0,0 +1,380 @@ + . +i + - i i , ! + i , , , i , i. + , ; , , i . +, , , i, , i . +- , i ; , - , i , i i, i , i i . +, , i : +? +- i, i-, i ; ; i , i . +I ! +- , , - . + i, i, i ; , , ! + ' ; . + , i i. + ? + i, i . +i , , i i i, -! +i i , i, , i - . +" ! + , i , i i-! + i , i i, i - i ! + i , i i i, ! + ! + , i . +i : +- , - . + . + , i, . + , i - . +- ! - , - ! +i . +- ! + i! +- , , - , - i, . +I , i; i , i i . + , - i i , : +! +i , ? + : i i i , . + , . + . + , i , , i i , : + i, i . + . +i , i... + , , - : , . +- ! - . + i. + , . +- i! +- ! + . + , i i , . +- , - , - , ! + i , , - i ! + , i, , . +i i; . + , i i. + . + , - . + , . + , i i , ; , . + , . + , ', ! +iii i i; , ? + : + i i, , i , i. +I , : i i ii i, , i, , -i i; i, i i, ... + + - , '. + i, i . +- , i !" + , i; , , i , : i i . + i ! + . , i i, i . +i , ! +- ! + i , i . +i i , i . + i, , i i, i i, i. + i, , , i . + i ! + i... + i ' ! +, , i i. + i, i ii - i i ! + . +- , ! +i , ! + i , i; , , i! + i i . + ; i i i : i , ; ' i : i i i. +i , i i i i. +- ! - . + , - , , i ! + i: + i , . + , ! +I , i : +"!" +i . +", ! - . + , , - -i ; ; . + i ; ii. + ; , , i i . + : + - i. + . +- i. +- i ? +- , ! - i i . + i i i. +- , - , - i , ! + , ... + i i ... +i , i i! + i. +" , i !" + i, , . +i i; i . +- " i?" + , i , ; i i ! +"i-! +, ? +i , ii . +III + i . +- i, i, , !.. +i i. +- i, , . +- i! - . + : i i ! +i , i i ! + i ! + i : + , ! + , i ii i . +- , - , - , ! + i ii... +- i, ! +- i , , i i i, i! +- , , i! +i i : +- i ! +, ! - , i i, - i : + i. + ! + ! + , i . + , , : + i , i i. + . + , ! + , i, ! + ! +i, i i i, , ; . +ii-ii i. + i, . + i . + i , i. + i, i i ii , , ii . + i i , - . + i ? + i -i, 'ii i i i: . +I , - , ! + : i, i, , . + i i . + - i i : i i, i, i i; . +- i, ". +- i ? - , , i - , i , - . +- +- , i 'i! +- ? + ? +- , , - , i i, i , i i . +i i! +-, . + i ; , . + i, i , i . +, ? +- , , . + i , ? + , ! + ! + i , i i, i i , , , i . + , i, - . + , i! + , i i , - i . +" i, - , - i , i i; i i i i, i ". +I , . +, . + ! +i , . +'i i, i, . +i , , , ' , . +i i , i . + i , . +i i. +- i , , - . +i i, i, i . + i i, . +, i: , , i , , i. +- , , i i. +, ! + , . +- , + , i i . +"- i? +. + , . + i , i - , ! +I i , i , i i i . + i ! +- , - , - i . + , , , ii; ' - ! + , i ! +i , , i ; i i i; i-i i, i i i i; i i i i, i i; i i, i, . + , i i - i i, i i', i i. +- ...i - i i; - i ! -, , , . + i i i . +VI +, - , i ! + , i - i. +- i ? + . +- i ? - . +, ? +I i , . +- i , i , i i, i '... ! +- ? +- i , -, - . + i , , , - . +- i, i , , . +- , . +. + i ! +i , , i'. +- - , i i i, - . + , i, ... + i , i : +- i? - , . + . + - i i. +i i! + i : " i . + i i, , i : - , i , ! + , '; i i . + , , . + i, i , , i, i - i i, - . +i , i i i. + . + i i ; i : , ! + - , ! - ' i ; i i , : +I : i i ', i !" +- , - , - ' i, i ! + i , i ! +VII + i . +i i i, , i !" +I i . + i i, i i. +- i , - . +- ! + , . + i . +, - ii, i , i ! + i i, i i : "i!" ; , , i , i i, i . +, , ! + , ! + , i i i . +i , , - i i. +- i! +- , - , - ? + i , ! +- , - , - i . + : , , i, i, , , - i , , i i; , . +i i, i - i. +", ! +i , ! + , , !"- , i ii i i i i. +- ! + ? +, i , , i i, i , i i : + i?" + i i. +- ? - i. + . +" i , , i , , i , i i, , i , i . +- i i, - , . +- , i! +", -, -- i. + i i ". + i  . +i , i, i. +- i . +- , ! + ? +i , ! +, i ! + i . + i i i , , i. + i : +i , . +iii i; i, . + - , i - . +", - , - , I i, -, ? +, , !" + , : + , i - !" +", ! i! +, i i!" +- ? - , , i, - , ! + , i, ! + , . + ; , , , i . + , , . + : i . +- , ! + , , . +, , i , . +, ! + : +- ', ! + i, i, i i . +IX + i , , i, i , i i: , . + i i, i ; , , i i i, i, i , , - ' i : , , ! + . + i ; i i i. +- i i, 'i, , i. +- ? - . + i? +i i, i i. + , ! +i , i i . + ? +- , - , - , i. + i i , i i , ' i, , , , i i, i i i i, - , i i! + i ! + , i, i ! + , i . + i i i . +", i ii ", - , . +, , i , i . + i , i , i, i ! + i. +- i, i . + : ii ; , , i i , - : i , . + i , . + i i! +- , i ! +- i, i! - . + i '. + ! + . +- i . +i i . +i i i, , i i, i , i , i i i . + : + ii: , i , i . + i, i i, i i, , , i. + i i, i . + . +i i, : + ! - . +- , - , - . +i , , ? +- i. +- i, - . +I i i . + , , . + i, i, i . +"i, - i, - ': i". +- , - , - i! + i i. + i ! +I ii i . + , , - ! + i, ! \ No newline at end of file diff --git a/myfirst.py b/myfirst.py new file mode 100644 index 0000000..44159b3 --- /dev/null +++ b/myfirst.py @@ -0,0 +1 @@ +print("Hello world")