commit 17d24d3d64bb7df5fef1c6b6d9efc914f9bdd89d Author: fox Date: Sat Oct 25 18:42:49 2025 +0500 Init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4063390 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +__pycache__ +.git +.idea diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..74031ac --- /dev/null +++ b/LICENSE @@ -0,0 +1,7 @@ +Copyright (c) 2025 Igor Ragozin + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/mpstwm/README.md b/mpstwm/README.md new file mode 100644 index 0000000..bdf28bb --- /dev/null +++ b/mpstwm/README.md @@ -0,0 +1,4 @@ +# МПНТОМ - Модульная панель настройки тайлинговых оконных менеджеров +----- +# UNDER CONSTRUCTION +---- diff --git a/python/.gitignore b/python/.gitignore new file mode 100644 index 0000000..bee8a64 --- /dev/null +++ b/python/.gitignore @@ -0,0 +1 @@ +__pycache__ diff --git a/python/01.10.py b/python/01.10.py new file mode 100644 index 0000000..a888fc9 --- /dev/null +++ b/python/01.10.py @@ -0,0 +1,27 @@ +famils = {"Петров", "Сидоров", "Иванов", "Козляков", "Колмокозков", "Дрозников"} + +# Так как не было сказанно про распределение. +# Попросил ИИ распределить по рандому должников. +math_fails = {"Иванов", "Козляков"} +lang_fails = {"Петров", "Дрозников", "Сидоров"} +info_fails = {"Колмокозков", "Иванов", "Петров"} + +# Вывожу сразу три задания, так как ответ умещается в одну строку. +# Для красивого показа использую оператор распаковки *, тоесть вывод будет: Козляков Иванов Петров +print("Должники по информатике и математике:", *math_fails | info_fails) +print("Должники по трем предметам: ", *famils) # или math_fails | lang_fails | info_fails +print("Должник по одному предмету: ", *math_fails - lang_fails - info_fails ) + +if 'Сидоров' in math_fails and 'Сидоров' in lang_fails: + sid_res = "Да" +elif 'Сидоров' in math_fails: + sid_res = "Да, только Математика" +elif 'Сидоров' in lang_fails: + sid_res = "Да, только Русский" +print("Сидоров в должниках по матем или русскому?", sid_res ) + +# Вывод(В первом ответ может быть рандомный, как угодно множеству) +#Должники по информатике и математике: Козляков Петров Иванов Колмокозков +#Должники по трем предметам: Козляков Сидоров Петров Иванов Дрозников Колмокозков +#Должник по одному предмету: Козляков +#Сидоров в должниках по матем или русскому? Да, только Русский \ No newline at end of file diff --git a/python/02.10.25/exercise.py b/python/02.10.25/exercise.py new file mode 100644 index 0000000..62ec4a9 --- /dev/null +++ b/python/02.10.25/exercise.py @@ -0,0 +1,85 @@ +from random import randint + +# Небольшая информация. +# * Это распаковка элементов в списке, множествах списков и тд. +# +# Задания начал возносить в функции без принятия значения +# (если в самом задании не нужно указывать значения). +# Так как легче понимать где задание, чем писать комментарий. + +# Задание 1 +def task1(): + print("== 1 ЗАДАНИЕ ==") + list_default = [] # создаем список + min_num = -10 # Минимальное + max_num = 10 # Максимальное + elements = 20 # Кол во элементов + + # Создание списка через рандом + for _ in range(elements): + list_default.append(randint(min_num,max_num)) + print("Несорт:", *list_default) + + # Алгоритм пузырька + for i in range(elements): + for j in range(elements-1-i): + if list_default[j] > list_default[j+1]: + list_default[j], list_default[j+1] = list_default[j+1], list_default[j] + print("Сорт:", *list_default) + +# Задание 2 +def task2(): + print("== 2 ЗАДАНИЕ ==") + # Списки + list_default = [] # создаем список + list_even = [] # Создаем четный список + list_odd = [] # Создаем не четный список + list_min_max = [] # список min и max + + # Остальное + min_number = -20 # Минимальное + max_number = 20 # Максимальное + elements = 45 # Кол во элементов + index = 0 # Индекс + + # Создание списка через рандом + for _ in range(elements): + list_default.append(randint(min_number,max_number)) + + # Алгоритм пузырька + for i in range(elements): + for j in range(elements-1-i): + if list_default[j] > list_default[j+1]: + list_default[j],list_default[j+1]=list_default[j+1],list_default[j] + print("Нач список:", *list_default) + print("Виды сортировок:") + + # Первый вид сортировки: + while index <= 44: + if list_default[index] % 2 == 0: list_even.append(list_default[index]) + index+=1 + print(" - 1. четные элементы:", *list_even[:len(list_even)//3]) + + # Второй вид сортировки + print(" - 2. min и max:", + min(list_default[:len(list_default)*2//3]), + max(list_default[:len(list_default)*2//3]) + ) + + # Третий вид сортировки + index=0 # обнуляю индекс + while index <= 44: + if list_default[index] % 2 != 0: list_odd.append(list_default[index]) + index+=1 + print(" - 3. нечетные элементы:", *list_odd[:len(list_default)*3//3]) + +# Мини бонус, просто хочу сделать ;) +def main(): + value = int(input("Выберите задание(1 или 2): ")) + if value == 1: task1() + elif value == 2: task2() + elif value == 0: exit() + else: + print("Введено не верное значение") + main() +main() diff --git a/python/02.10.25/lecture.py b/python/02.10.25/lecture.py new file mode 100644 index 0000000..e2d6c95 --- /dev/null +++ b/python/02.10.25/lecture.py @@ -0,0 +1,127 @@ +# === Питон михаил петров +import random + +#N = 10 +#list_sort_buble = [] +#for _ in range(N): +# list_sort_buble.append(random.randint(0,100)) +#print(f"Не сортированный список: {list_sort_buble}") + +# Сортировка пузырьком +#for i in range(N): +# for j in range(N - 1 - i): +# if list_sort_buble[j] > list_sort_buble[j+1]: +# list_sort_buble[j], list_sort_buble[j+1] = list_sort_buble[j+1], list_sort_buble[j] +#print(f"Отсортированный список: {list_sort_buble}") + +#=== +# :: Теория +#=== + +# 2 Пары Артем Данилов +#def hello(): +# print("Hello world") +#hello() + +#def one_two(one): # one принимает значения +# num = one + 1 +# return num +#print(one_two(10)) + +# Расчитывание круга +#def circle(r): +# area = 3.14*r*r +# return area +#print(circle(10)) + +# Факториал +# 5! = 5*4*3*2*1 +# 0! = 1 +# 6! = 6 * 5! +# n! = n * (n-1)! + +# Рекурсия +#def f(n): +# if n == 1: return n +# return n * f(n-1) # рекурсивная функция, вызывающая саму себя. +#print(f(5)) + +#=== +# :: Задания +#=== + +# 1 task +#def rectg(a,b): +# return (a+b)*2 +#print(rectg(20,5)) + +# 2 task +#def chetnoe(numb): +# if numb%2==0: return numb +# else: return numb+1 +#print(f"четное: {chetnoe(2)}, нечетное: {chetnoe(3)}") + +# 3 task +#cel=5 +#def cel_far(gr): +# return (gr*9/5)+32 +#print(f"Цельсий {cel}, Фаренгейт: {cel_far(cel)}") + +# 4 task +#def sechour(secn): +# return secn/3600 +#print(sechour(1000)) + +# 5 task +#def month(numbs): +# if numbs in [4,6,9,11]: # Если число равен значению в списке то вывести то число месяца +# return 30 +# if numbs in [1,3,5,7,8,10,12]: +# return 31 +# if numbs in 2: +# return 28 +# else: +# return "nin" +#print(month(5)) + + +#=== +# Практика рекурсия +#=== + +#def num_aver(a,b,c): +# return (a+b+c)/3 +#print(num_aver(2,3,5)) + +#def num_mezdu(a,b,c): + +# 1 решение а не if +# if a<=b<=c or c<=b<=a: +# return b +# elif b<=a<=c or c<=a<=b: +# return a +# else: +# return c + +# 2 решение в одну строку +# sorted([a,b,c])[1] + +#print(num_mezdu(1,2,3)) + +#def num_mod(a,b,c): +# if a == b or b == c: +# return b +# if b == c or c == a: +# return c +# if c == a or a == b: +# return a +# else: +# return a,b,c +#print(num_mod(3,3,3)) + +#def nat_num(a): +# total=0 +# for i in range(1, a+1): +# total+=i +# return total +#print(nat_num(5)) \ No newline at end of file diff --git a/python/06.10.py b/python/06.10.py new file mode 100644 index 0000000..b6abfee --- /dev/null +++ b/python/06.10.py @@ -0,0 +1,83 @@ +import random +# Так как меня не было на паре я буду честен, +# некоторые задания смотрел у одногруппницы +# но смотрел как они выполняются. + +#=== +# Задание 3 +#=== +print("-= Задание 3 =-") + +# Обьявляю переменные +lis = [] +n = 15 +iterations = 0 + +# Создание списка из 15 чисел +for i in range(n): + lis.append(random.randint(1,100)) +print(f"1: ", lis) + +# Сортировка от большего к меньшему +i = 0 +while i < n - 1: + m,j = i,i+1 + while j < n: + if lis[j] < lis[m]: + m = j + j += 1 + # меняем местами + lis[i], lis[m] = lis[m], lis[i] + i += 1 + iterations += 1 +print(f"2: ", lis) +print(f"3: ", iterations) + +#=== +# Задание 4 +#=== +print("-= Задание 4 =-") + +# обьявляю переменные +words = [ "apple", "banana", "cherry", "date", "apricot" ] +n = len(words) +j = 0 + +for i in range(1, n):#1-5 + key = words[i]#apple + j = i - 1#1-1 0 + # Сдвигаем элементы вправо, пока они больше key + while j >= 0 and words[j] > key: + words[j + 1] = words[j] + j -= 1 + words[j + 1] = key +print(words) + +#=== +# Задание 5 +#=== +print("-= Задание 5 =-") + +# Обьявляю переменные +lisb = ["1", "10", "3", "5", "7", "8"] +k = 2 +fix_k = lisb[k] +oth_el = [] + +for i in range(len(lisb)): + if i != k: + oth_el.append(lisb[i]) + +n = len(oth_el) +for i in range(n): + for j in range(0, n - i - 1): + if oth_el[j] > oth_el[j + 1]: + oth_el[j], oth_el[j + 1] = oth_el[j + 1], oth_el[j] + +left_par = oth_el[:k] +right_par = oth_el[k:] + +res = left_par + [fix_k] + right_par + +print(res) + diff --git a/python/12.09.25/ex1.py b/python/12.09.25/ex1.py new file mode 100644 index 0000000..d520299 --- /dev/null +++ b/python/12.09.25/ex1.py @@ -0,0 +1,23 @@ +import sys + +number_input = int(input("Введите число :: ")) + +if number_input < 100 and number_input > 1: + if number_input % 3 and number_input % 5: + print("Fizz Buzz") + sys.exit(1) + elif number_input % 3 != 0 and number_input % 5 != 0: + print(number_input) + sys.exit(1) + elif number_input % 3 == 0: + print("Fizz") + sys.exit(1) + elif number_input % 5: + print("Buzz") + sys.exit(1) + +else: + print("ОШИБКА! Введено число не в диапазоне") + sys.exit(1) + + diff --git a/python/12.09.25/ex2.py b/python/12.09.25/ex2.py new file mode 100644 index 0000000..d1a4dc6 --- /dev/null +++ b/python/12.09.25/ex2.py @@ -0,0 +1,13 @@ +import sys + +number = int(input("Введите число :: ")) +stage = float(input("Введите степень(0-7) :: ")) + +if stage <= 7 and stage >= 1: + numbd = number ** stage + print("Ответ: {}".format(numbd)) + sys.exit(1) + +else: + print("ОШИБКА, введена степень выше/ниже диапазона") + sys.exit(1) \ No newline at end of file diff --git a/python/12.09.25/ex3.py b/python/12.09.25/ex3.py new file mode 100644 index 0000000..8f5909b --- /dev/null +++ b/python/12.09.25/ex3.py @@ -0,0 +1,41 @@ +import sys as os + +price_call = int(input("Стоймость разговора, в мин :: ")) +operators = [ + "tmobile", + "t2", + "mts", + "yota" +] + +print("Список доступных операторов:") +for el in operators: + print(f" - {el}") + +def operator_func(operator_num): + match operator_num: + case "tmobile": + math_num = 3.9 * price_call + print("{} Rub".format(math_num)) + os.exit(1) + case "t2": + math_num = 3.60 * price_call + print("{} Rub".format(math_num)) + os.exit(1) + case "mts": + math_num = 2.5 * price_call + print("{} Rub".format(math_num)) + os.exit(1) + case "yota": + math_num = 2.50 * price_call + print("{} Rub".format(math_num)) + os.exit(1) + case _: + print("Указан оператор не из списка!") + os.exit(0) + +operator_select = input('\n' "Введите оператора из списка :: ") +operator_func(operator_select) + + + diff --git a/python/12.09.25/ex4.py b/python/12.09.25/ex4.py new file mode 100644 index 0000000..4e4ebf1 --- /dev/null +++ b/python/12.09.25/ex4.py @@ -0,0 +1,41 @@ +def get_percent(number): + if 0 <= number < 500: + return 3 + elif 500 <= number <= 1000: + return 5 + elif number >= 1000: + return 8 + +def salary(manag): + casing = 200 + percen = manag / 100 + summ = casing * percen + final = summ + casing + return final + +manager_1 = salary(get_percent(int(input("уровень продаж 1 менеджера :: ")))) +manager_2 = salary(get_percent(int(input("уровень продаж 2 менеджера :: ")))) +manager_3 = salary(get_percent(int(input("уровень продаж 3 менеджера :: ")))) +manager_top = max(manager_1, manager_2, manager_3) +manager_gener = [ manager_1, manager_2, manager_3 ] + +def why_manager(top): + if top == manager_1: + return 'Менеджер 1' + elif top == manager_2: + return 'Менеджер 2' + elif top == manager_3: + return 'Менеджер 3' +why_man = why_manager(manager_top) +favor_manager = manager_top + 200 + + + +print("Лучший менеджер: {}. Зарплата(с премией): {}$".format(why_man, favor_manager)) +print("---") +print("Остальные менеджеры:\n" + " - {}$, Первый менеджер\n" + " - {}$, Второй менеджер\n" + " - {}$, Третий менеджер" + .format(manager_1, manager_2, manager_3)) + diff --git a/python/12.09.25/ex5.py b/python/12.09.25/ex5.py new file mode 100644 index 0000000..4e4ebf1 --- /dev/null +++ b/python/12.09.25/ex5.py @@ -0,0 +1,41 @@ +def get_percent(number): + if 0 <= number < 500: + return 3 + elif 500 <= number <= 1000: + return 5 + elif number >= 1000: + return 8 + +def salary(manag): + casing = 200 + percen = manag / 100 + summ = casing * percen + final = summ + casing + return final + +manager_1 = salary(get_percent(int(input("уровень продаж 1 менеджера :: ")))) +manager_2 = salary(get_percent(int(input("уровень продаж 2 менеджера :: ")))) +manager_3 = salary(get_percent(int(input("уровень продаж 3 менеджера :: ")))) +manager_top = max(manager_1, manager_2, manager_3) +manager_gener = [ manager_1, manager_2, manager_3 ] + +def why_manager(top): + if top == manager_1: + return 'Менеджер 1' + elif top == manager_2: + return 'Менеджер 2' + elif top == manager_3: + return 'Менеджер 3' +why_man = why_manager(manager_top) +favor_manager = manager_top + 200 + + + +print("Лучший менеджер: {}. Зарплата(с премией): {}$".format(why_man, favor_manager)) +print("---") +print("Остальные менеджеры:\n" + " - {}$, Первый менеджер\n" + " - {}$, Второй менеджер\n" + " - {}$, Третий менеджер" + .format(manager_1, manager_2, manager_3)) + diff --git a/python/12.09.25/lecture.py b/python/12.09.25/lecture.py new file mode 100644 index 0000000..4747cce --- /dev/null +++ b/python/12.09.25/lecture.py @@ -0,0 +1,3 @@ +for i in range(0, 20): + print("*", end=' ') +print(i) \ No newline at end of file diff --git a/python/16.09.25/exercise.py b/python/16.09.25/exercise.py new file mode 100644 index 0000000..c9a8a11 --- /dev/null +++ b/python/16.09.25/exercise.py @@ -0,0 +1,75 @@ +#-=-=-=-=-=-=-=-=-=-=-=- +# FOR IN +#-=-=-=-=-=-=-=-=-=-=-=- + +#1 Задание +#for i in range(0, 100 + 1): +# print(i) + +#2 Задание +#for i in range(100, 0, -1): +# print(i) + +#3 Задание +#dfor i in range(0, 1000 + 1): +# if i % 5 == 0 and i % 12 == 0: +# print(i) + +#4 Задание +#start_diap = int(input("Start diapason :: ")) +#end_diap = int(input("End diapason :: ")) +# +#for i in range(start_diap, end_diap): +# if i % 2 == 0: +# print(i) + +#-=-=-=-=-=-=-=-=-=-=-=- +# while() +#-=-=-=-=-=-=-=-=-=-=-=- + +#1 Задание +#num = 1 +#while num < 5 + 1: +# print(num) +# num += 1 + +#2 Задание +#t = 0 +#n = 1 +#while n < 5 + 1: +# n += t +# t += n +#print(t) + +#3 Задание +#num = int(input("enter num: ")) +#while num != 0: +# num = int(input("enter num: ")) + +#4 Задание +#t = 0 +#n = int(input("enter num: ")) +#while n != 0: +# t = n + t +# n = int(input("enter num: ")) +#print(t) + +#-=-=-=-=-=-=- +# 3 ЧАСТЬ +#-=-=-=-=-=-=- + +#1 Задание +#age = int(input("Enter age: ")) +#rost = int(input("Enter rost: ")) +#if age >= 18 and rost >= 185: +# print("approved!") +#elif rost >= 200: +# print("approved!") +#else: +# print("Did't approve, age or rost not fit") + +#2 Задание +#num = int(input("Input num: ")) +#if num % 2 != 0: +# num1 = num * 2 +# print(num1) diff --git a/python/16.09.25/lecture.py b/python/16.09.25/lecture.py new file mode 100644 index 0000000..4603c24 --- /dev/null +++ b/python/16.09.25/lecture.py @@ -0,0 +1,18 @@ +#start, stop, step +# от 0 до 99, 100 не входит +#for i in range(100, 0 - 1, -1): +# print(i) + +#numb = 0 +#while numb < 5: +# print(numb) +# numb += 1 + +#def login(i): +# login = input("Enter login: ") +# password = input("Enter pass: ") + +#while login != "user" and password != "1234": +# print ("Err") +# login() +#print("you welc") diff --git a/python/18.09.py b/python/18.09.py new file mode 100644 index 0000000..41a306e --- /dev/null +++ b/python/18.09.py @@ -0,0 +1,47 @@ +#num1 = '' # 1 слаг +#num2 = '' # 2 слаг +#operation = '' # оператор + +# Ввод выражения +#letter_num = 0 + +# Поиск знака и индекса +#user_str = input("Enter num: ") +#for i in range(0, len(user_str)): +# if user_str[i] in "+-*/": +# letter_num = i +# operation = user_str[i] + +# Поиск 1 числа +#for i in range(0, letter_num): +# num1 += user_str[i] + +# Поиск 2 числа +#for i in range(letter_num + 1, len(user_str)): # увеличение индекса на единицу +# num2 += user_str[i] + +# Преобразование типа +#num1 = int(num1) +#num2 = int(num2) + +#if operation == "+": +# result = num1 + num2 +#elif operation == "-": +# result = num1 - num2 +#elif operation == "*": +# result = num1 * num2 +#elif operation == "/": +# result = num1 / num2 +#print("result: ", result) + +#=== +# Задания +#=== + +# 1 Задание +# Для того чтоб не показаться что я взял у ии то обьясню что делает код +#num = str(input()) # считывание +#rev = '' # создание пустой строки +#for i in range(len(num) -1, -1, -1): Создание цикла и в радиусе(подсчитать(num) -start, -step, -stop), тоесть от конца +# rev += num[i] # записывание num в rev с индексом i +#print(rev) \ No newline at end of file diff --git a/python/21.10.25/ex1.py b/python/21.10.25/ex1.py new file mode 100644 index 0000000..420c991 --- /dev/null +++ b/python/21.10.25/ex1.py @@ -0,0 +1,88 @@ +# Основная функция. +# для возврата значений ошибок текста и самого вывода баллов +# буду использовать get_coords для создания возврата значений в кортеж +def scrabble(text): + + #===== + # Обьявление переменных + #===== + + # Словарь, слово: балл + alphabet = { + # English alphabet + 'a': 1, 'e': 1, 'i': 1, 'o': 1, 'l': 1, 'n': 1, 's': 1, 't': 1, 'r': 1, + 'd': 2, 'g': 2, + 'b': 3, 'c': 3, 'm': 3, 'p': 3, + 'f': 4, 'h': 4, 'w': 4, 'y': 4, + 'k': 5, + 'j': 8, 'x': 8, + 'q': 10, 'z': 10, + + # Russian alphabet + 'а': 1, 'в': 1, 'е': 1, 'и': 1, 'н': 1, 'о': 1, 'с': 1, 'т': 1, + 'д': 2, 'к': 2, 'л': 2, 'м': 2, 'п': 2, 'у': 2, 'р': 2, # "р" не было, на рандом добавил в 2 баллы. + 'б': 3, 'г': 3, 'ё': 3, 'ь': 3, 'я': 3, + 'й': 4, 'ы': 4, + 'ж': 5, 'з': 5, 'ч': 5, 'ц': 5, + 'ш': 8, 'э': 8, 'ю': 9, + 'ф': 10, 'щ': 10, 'ъ': 10} + + text = text.replace(' ', '') # убираю пробелы + text = text.lower() # делаю все символы низкими + score = 0 # нулевой счетчик баллов + symb_err = [] # инициализация списка для символов не в алфавите + + # ===== + # Главная логика + # ===== + + for symbol in text: + if symbol in alphabet: + score += alphabet[symbol] + else: + symb_err.append(symbol) + return score + +# Функция мультиплеера +# Внутри встроена одиночная игра +# и интерактив ввиде выхода, выбора игры и ввода игроков +def parral_game(players): + players = players.split() # преобразование в список. + print(len(players)) + if len(players) == 1: # Если игрок один то вопрос переходить ли на одиночный режим + print("- У вас один игрок\n- Выбираете режим одиночной?") + print("Yes(1), No(0)") + subm = int(input(":: ")) + if subm == 1: # Если да то начинается одиночная игра + onepl_game = input("Введите текст: ") + resopl = scrabble(onepl_game) + print(f"Введенное слово: {onepl_game}, счет: {resopl}") + exit() + if subm == 0: # Если нет то опрашивается имя игроков + subm_name = input("Введите снова имена игроков: ") + subm_name = subm_name.split() # преобразую в список + subm_name = players # называю его как основной входящий аргумент функции + if len(players) > 1: # Мультиплеер + score_list = [] # инициализация игрового списка, индекс игрока == индекс статистики + for rond in range(1,10+1): # создание цикла на раунд + print(f"{rond} round") + for player_index in range(len(players)): # создания цикла на кол-во игроков + print(f"Ход {players[player_index]}") + input_text = input(":: ") + res = scrabble(input_text) + score_list.append(res) + if score_list[player_index] > 0: + score_list[player_index] += res + print(f"Очки :: {score_list[player_index]}") + print("--след--") + score_top = max(score_list) # определение победителя + score_top_index = score_list.index(score_top) # определение имени победителя + print(f"Выйграл {players[score_top_index]}, результат {score_top}") + print(f"Список игроков:") + for num_player in range(len(players)): # создания цикла на вывод списка играющих, не по сортировке + print(f"- {num_player}: {players[num_player]}, {score_list[num_player]}") + else: # Выход из игры + print("!Не веденны игроки, выход.") + exit() + +parral_game(input("- Для выхода из программы нажмите энтер без текста\n- Введите кол-во игроков: ")) diff --git a/python/21.10.25/ex2.py b/python/21.10.25/ex2.py new file mode 100644 index 0000000..11a26aa --- /dev/null +++ b/python/21.10.25/ex2.py @@ -0,0 +1,18 @@ +# Немножечко не понял суть задания, так как на листке решение было давно уже указанно. +backpack = { + 'Зажигалка':20, 'Компас':100, 'Фрукты':500, 'Рубашка':300, + 'Термос':1000, 'аптечка':200, 'Куртка':600, 'Бинокль':400, + 'Удочка':1300, 'Салфетки':40, 'Бутерброды':800,'Палатка':5500, + 'Спальный мешок':2500,'Изолента':250,'Котел':3000 +} + +massa = int(input("Введите массу рюкзака :: "))*1000 +lis_no = [] +lis_ye = [] +for key, value in backpack.items(): + if value < massa: + lis_no.append(key) +for key, value in backpack.items(): + if value > massa: + lis_ye.append(key) +print(f"могу взять {lis_no}, не могу взять {lis_ye}") diff --git a/python/21.10.25/ex3.py b/python/21.10.25/ex3.py new file mode 100644 index 0000000..066441c --- /dev/null +++ b/python/21.10.25/ex3.py @@ -0,0 +1,31 @@ +note_book = {"Маша": +{'tel':'+7922123561','vk':'vk.com/masha321','youtube':'youtube.com/masha321','telegram' +:'t.me/masha321'}, +"Маша": +{'tel':'+7922123561','vk':'vk.com/masha321','youtube':'youtube.com/masha321','telegram' +:'t.me/masha321'}, +"Маша": +{'tel':'+7922123561','vk':'vk.com/masha321','youtube':'youtube.com/masha321','telegram' +:'t.me/masha321'}, +"Маша": +{'tel':'+7922123561','vk':'vk.com/masha321','youtube':'youtube.com/masha321','telegram' +:'t.me/masha321'}, +"Маша": +{'tel':'+7922123561','vk':'vk.com/masha321','youtube':'youtube.com/masha321','telegram' +:'t.me/masha321'}, +} + +user_input = input("Введите имя из списка контактов: ") + +if user_input: + user_search = user_input[0].upper() + user_input[1:].lower() +else: + user_search = "" + +if user_search in note_book: + contact = note_book[user_search] + print(f"Контакт: {user_search}") + for key, value in contact.items(): + print(f"{key.capitalize()}: {value}") +else: + print("Контакт не найден.") diff --git a/python/23.10.25/home_work.py b/python/23.10.25/home_work.py new file mode 100644 index 0000000..b163295 --- /dev/null +++ b/python/23.10.25/home_work.py @@ -0,0 +1,75 @@ +#==== +# Tasks +#==== + +def one_task(): # Форматированный текст при помощи табуляции. + print("\n\"Don\'t compare yourself with anyone in this world...if you do so, you are insulting\nyourself.\"" + "\n\nBill Gates \n") + +def two_task(): # Четные числа + list_numbers=[] + one_num = int(input("1_число :> ")) + two_num = int(input("2_число :> ")) + for nums in range(one_num,two_num+1): + if nums%2==0: + list_numbers.append(nums) # Добавление числа в список + print("Четные числа:",*list_numbers) # Вывод чисел без скобок через операнд распаковки * + +def thr_task(): # Квадрат + # Перевод булева значения в true или false если у них низкие буквы + def to_bool(bool_str): + if bool_str.lower() == "true": + return True + elif bool_str.lower() == "false": + return False + else: + return True + + # Интерактивное меню + def interact(): + print("напишите значения в строку так: \"(ширина) (высота) (Заполнять квадрат(булево значение!) (патерн внутри если заполнять квадрат))\"\n" + "Обязательно заполнять аргументы через пробел! Допустимо через - или ,") + answer = input(":> ") # опрашиваю пользователя, как в bash с $1/$2/$n.... + lis = answer.split() # превращаю тип данных в список(все определяется по пробелам) + cube(int(lis[0]), int(lis[1]), to_bool(lis[2]), lis[3]) # передаю эти значения, так же назначаю на ширину и высоту тип данных int, а на булево значение проверку если оно другое + + # Сам алгоритм(грубо говоря мозги) + def cube(width, height, bool_fill, pattern): + if bool_fill == True: + for height_cube in range(1,height+1): + print(pattern*width) + elif bool_fill == False: + print(pattern*width) + for height_cube in range(1,height-2): + print(pattern, " "*(width-4), pattern) + print(pattern*width) + interact() # Вызов интерактивного меню + +#==== +# Main +#==== + +def main(): # Основные функции + def tasks(ans): # Модуль перехода к заданиями + if ans == 1: + one_task() # Так как задания изолированые, входные аргументы не передаются + elif ans == 2: + two_task() + elif ans == 3: + thr_task() + + def menu(): # Основной модуль выбора задания + while True: # Так как программа подразумевает запуск нескольких заданий + # Мы делаем цикличную работу, пока не будет выбран 0 для brake. + print("Домашнее задание от 23.10.25\nВыберите номер задания:\n" + ":-1 формат текст\t" ":-2 четн числа\n" ":-3 квадрат\t\t" + ":-0 Выход\n") + answer = int(input(":> ")) + if answer == 0: + print(":: exit!") + break + tasks(answer) # Переход к модулю перехода к заданиям + menu() + +if __name__ == "__main__": # Используем скрипт как основной а не как импорт + main() diff --git a/python/23.10.25/lecture_calculator/calc.py b/python/23.10.25/lecture_calculator/calc.py new file mode 100644 index 0000000..d0b210a --- /dev/null +++ b/python/23.10.25/lecture_calculator/calc.py @@ -0,0 +1,40 @@ +def menu(): + while True: + print(":: Calculator lesson 23-10 ::") + a = int(input("(1)-:: ")) + b = int(input("(2)-:: ")) + print(":: Menu ::\n" "1::+\t" "2::-\n" "3::-*\t" "4::-/\n" "0::exit\n") + oper = int(input("Enter oper :: ")) + if oper == 0: + print(":: exit!") + break + calc(a,b,oper) + +def calc(num1,num2,ans): + result=0 + def summ(): + return num1+num2 + def deff(): + return num1-num2 + def diff(): + if num2 == 0: + return 0 + else: + return num1/num2 + def multi(): + return num1*num2 + def printf(): + print(f"{num1}{ans}{num2}={result}") + if ans == 1: + ans = "+" + result = summ(num1,num2) + elif ans == 2: + ans = "-" + result = deff(num1,num2) + elif ans == 4: + ans = "/" + result = diff(num1,num2) + elif ans == 3: + ans = "*" + result = multi(num1,num2) + printf(result,ans) diff --git a/python/23.10.25/lecture_calculator/main.py b/python/23.10.25/lecture_calculator/main.py new file mode 100644 index 0000000..c8d4567 --- /dev/null +++ b/python/23.10.25/lecture_calculator/main.py @@ -0,0 +1,4 @@ +from calc import menu + +if __name__ == "__main__": + menu() diff --git a/python/24.10.25/lecture_montecarlo.py b/python/24.10.25/lecture_montecarlo.py new file mode 100644 index 0000000..a68ef4d --- /dev/null +++ b/python/24.10.25/lecture_montecarlo.py @@ -0,0 +1,71 @@ +# Experiment::monte-carlo +import datetime +from random import randint + +def getBirthdays(numberOfBirthDays): + birthdays = [] # Список дней рожддения + for i in range(numberOfBirthDays): + # Год в нашей имитации роли не играет + # Лишь бы в обьектах дней рождения он был одинаков + startOfYear = datetime.date(2000,1,1) + # случайный день года + randomNumberOfDays = datetime.timedelta(randint(0,364)) + birthday = startOfYear + randomNumberOfDays + birthdays.append(birthday) + return birthdays +''' +Принимает список дней рождения. обрабатывает его и +возвращает совпадения в датах, кот. +Встречаются несколько раз. +''' + +def getMatch(birthdays): + if len(birthdays) == len(set(birthdays)): + return None # даты не совпадают, выход. + for a, birthdayA in enumerate(birthdays): # enumerate() про списку + for b, birthdayB in enumerate(birthdays[a+1 : ]): + if birthdayA == birthdayB: + return birthdayA # даты совпали + +def main(): + # Кортеж мес в году + MONTHS = ('Jan','Feb','Mar','Apr','May','Jun', + 'Jul','Aug','Sep','Oct','Nov','Dec') + print("Симуляция совпадения дней рождения") + while True: + print("Сколько симуляции хотите сделать?\n PS max=100") + response = input(":>") + if response.isdecimal() and 0 < int(response): # Для неограниченного ввода значений убираем <= 100 + numBDats = int(response) # При комментировании прилетает ошибка неопределенного типа данных. + break + print() + # Генерируем и отображаем дни рождения + day_birth = getBirthdays(numBDats) # Так как существует вторая переменная birthdays, то она перезаписывает данные по новому. По этому при выполнении кода на 59 строке переменная перезаписывается. + for i, birthday in enumerate(day_birth): # Изменение переменной(43 строка) + if i != 0: + print(", ", end='') + month = MONTHS[birthday.month - 1] + dateText = "{} {}".format(month, birthday.day) + print(dateText, end='') + print() + print() + print(f"Генерация {numBDats} случайных симуляции") + input("Нажмите Enter для старта....") + print("Запуск 100.000 симуляции") + simMatch = 0 + for i in range(100_000): + if i % 1_000 == 0: # меняем число с 10_000 на 1_000 + print(i, " запущена симуляция...") + birthdays = getMatch(day_birth) # Изменение переменной(43 строка) + if getMatch(day_birth) != None: # Изменение переменной(43 строка) + simMatch += 1 + print(":"*11) + print("Было выполнено 100.000 симуляции.") + probability = round(simMatch/100_000*100,2) + print("Процент совпадения",probability) + print("Кол-во дат для исследования:",numBDats) + print("Кол-во циклов симуляции:",simMatch) + + +if __name__ == "__main__": + main() diff --git a/python/26.09.py b/python/26.09.py new file mode 100644 index 0000000..147040f --- /dev/null +++ b/python/26.09.py @@ -0,0 +1,39 @@ +#2 задание +b = input() +lis = [int(ind) for ind in b] +b_min = b[0] +print(f"минимум: {b_min} список: {b}") + +#3 задание +b = input() +lis = [int(i) for i in b] +index_num = 0 +std_num = 0 +while True: + if lis[index_num] <= 1: + std_num += 1 + elif lis[index_num] <= 1: + std_num += 1 + elif lis[index_num] % 2 == 0 or lis[index_num] % 3 == 0: + std_num += 1 + index_num += 1 + if index_num == len(lis) - 1: + print(f"Кол во простых чисел: {std_num}, список: {lis}") + +#4 задание +list = [1, 2, 3, 4, 5, 6, 10, 22, 343, 4] +num_input = int(input()) +del_list = list.remove(num_input) +print("удаленные элементы: {} \n список: {}".format(num_input, list)) + +#5 задание +list1 = [1, 2, 3, 4, 5] +list2 = [100, 200, 300, 200] + def lis_obe(lis1, lis2): + return lis1+lis2 +print(lis_obe(list1, list2)) + +# 6 задание +spisok = [1, 2, 3, 4, 10, 12] +stepen = 2 +print([i ** stepen for i in spisok]) diff --git a/python/README.md b/python/README.md new file mode 100644 index 0000000..3b793f3 --- /dev/null +++ b/python/README.md @@ -0,0 +1,57 @@ +### Код в лекциях, решения заданий от преподавателей. + +> xx.xx.xx - день.месяц.год +### Обозначение файлов. +- menu.py - класс Menu для легкого создания меню выполнения задания. Без постоянного повторения кода. +- xx.xx.xx.py - Файлы лекций/домашних работ, содержат код от преподавателя или задания с домашней работы. +- xx.xx.xx/ - тоже самое что файл, но каталог с отдельными файлами. + +### Пример использования menu.py. +```python +from menu import Menu # Импортирую модуль, подразумеваю что он в каталоге где и ваш файл. + +# Создаю для теста 3 функции +def hi(): + print("Hello World") +def name(): + ans = int(input("введи имя")) + print(f"Твое имя {ans}") +def radius(): + for i in range(0,10+1): + print(i) + +# Создаю константу TASKS. +# Примерные значения словаря: +# число_задания: ["описание задания", название_функции] +TASKS = { + 1: ["Вывод hello world", hi], + 2: ["Вывод имени человека", name], + 3: ["Создание радиуса до 10", radius] +} + +# Условие проверки не импортирования модуля +# а так же инициализация модуля Menu. +if __name__ == "__main__": + # Указываю дату выполнения задания, и словарь с заданиями + info = Menu("25.10.25", TASKS) + info.Tasks() # Показываю список заданий и их описания + info.Answer() # Инициализирую опросник + +''' +Вывод будет таким: + +Домашнее задание от 25.10.25 +Список заданий: +:::::::::::::::: +:-1 - Вывод hello world. +:-2 - Вывод имени человека. +:-3 - Создание радиуса до 10. +:-0 - Выход. +:::::::::::::::: +:> 1 +Hello World +:> 0 +:>> Выход! +''' +``` + diff --git a/python/menu.py b/python/menu.py new file mode 100644 index 0000000..3391760 --- /dev/null +++ b/python/menu.py @@ -0,0 +1,39 @@ +# ==== +# ГОТОВЫЙ КЛАСС СОЗДАНИЯ МЕНЮ +# ==== + +# Для учителей по питону, в целях того что я знаю что у меня в коде: +# class - шаблон для создания обьектов для удобного вызова. +# __init__ - функция инициализации класса. +# self.x - функция получения аттрибутов. +# try/except - функция проверки ошибок для вывода своего текста вместо traceback. +# def func(self) - self в функции необходим для ссылки на обьект класса(тоесть обязательный параметр). + +class Menu: # Класс меню, для легкого создания меню заданий + def __init__(self, date, dict_tasks): # Инициализируем класс с значениями + self.date = date # Число домашней работы + self.dict_tasks = dict_tasks # Словарь задач + + def Tasks(self): # Вывод таблицы заданий + print(f"Домашнее задание от {self.date}") + print(f"Список заданий:") + print("::"*8) + for key,value in self.dict_tasks.items(): # создание списка заданий + print(f":-{key} - {value[0]}.") + print(":-0 - Выход.") + print("::"*8) + + def Answer(self): # Ввод задания + while True: + try: # Использую проверку ошибок для тех кто введет не верное значение. + ans = int(input(":> ")) + if ans == 0: # Проверяем введен ли выход из программы + print(":>> Выход!") + break + elif ans in self.dict_tasks: # Проверка числа задания в словаре + self.dict_tasks[ans][1]() + else: # Иначе выводим что задание не существует + print(":>> Задания не существует!") + except ValueError: # Если значение равно тексту или пустоте то выводится сообщение. + print(":>> Введите число!") + diff --git a/python/test.py b/python/test.py new file mode 100644 index 0000000..5b4dcfb --- /dev/null +++ b/python/test.py @@ -0,0 +1,28 @@ +from menu import Menu # Импортирую модуль, подразумеваю что он в каталоге где и ваш файл. + +# Создаю для теста 3 функции +def hi(): + print("Hello World") +def name(): + ans = int(input("введи имя")) + print(f"Твое имя {ans}") +def radius(): + for i in range(0,10+1): + print(i) + +# Создаю константу TASKS. +# Примерные значения словаря: +# число_задания: ["описание задания", название_функции] +TASKS = { + 1: ["Вывод hello world", hi], + 2: ["Вывод имени человека", name], + 3: ["Создание радиуса до 10", radius] +} + +# Условие проверки не импортирования модуля +# а так же инициализация модуля Menu. +if __name__ == "__main__": + # Указываю дату выполнения задания, и словарь с заданиями + info = Menu("25.10.25", TASKS) + info.Tasks() # Показываю список заданий и их описания + info.Answer() # Инициализирую опросник