diff --git a/lesson01/home_work/hw01_hard.py b/lesson01/home_work/hw01_hard.py index 7df268664..2e4a859a0 100644 --- a/lesson01/home_work/hw01_hard.py +++ b/lesson01/home_work/hw01_hard.py @@ -1,5 +1,5 @@ -__author__ = 'Ваши Ф.И.О.' +__author__ = 'Федькин Илья Геннадьевич' # Задание-1: # Ваня набрал несколько операций в интерпретаторе и получал результаты: @@ -14,3 +14,6 @@ # если точно известно, что её значение не изменялось? # Подсказка: это значение точно есть ;) + +a = float('inf') + diff --git a/lesson01/home_work/hw01_normal.py b/lesson01/home_work/hw01_normal.py index 991724e9a..70bca2a22 100644 --- a/lesson01/home_work/hw01_normal.py +++ b/lesson01/home_work/hw01_normal.py @@ -1,5 +1,4 @@ - -__author__ = 'Ваши Ф.И.О.' +__author__ = 'Федькин Илья Геннадьевич' # Задача-1: Дано произвольное целое число, вывести самую большую цифру этого числа. # Например, дается x = 58375. @@ -25,3 +24,36 @@ # Для вычисления квадратного корня воспользуйтесь функцией sqrt() модуля math: # import math # math.sqrt(4) - вычисляет корень числа 4 + +import math + +# Задача-1 + +a = input('Введите целое число: ') +max = 0 +for i in a: + if (int(i)) > max: + max = int(i) +print(max) + +# Задача-2 +a = input('Введите первую переменную: ') +b = input('Введите вторую переменную: ') +a, b = b, a +print('Первая переменная = {0}, Вторая переменная = {1}'.format(a, b)) + +# Задача-3 +print('Дано квадратное уравнение:\n ax**2 + bx + c') +a = float(input('Введите a: ')) +b = float(input('Введите b: ')) +c = float(input('Введите c: ')) +Dis = b**2 - 4*a*c +if Dis > 0: + x1 = (-b + math.sqrt(Dis)) / a*2 + x2 = (-b - math.sqrt(Dis)) / a*2 + print('Корни уравнения:\n', 'x1 = ', x1, '\n x2 = ', x2) +elif Dis == 0: + x1 = (-b + math.sqrt(Dis)) / a*2 + print('Корень уравнения один: ', x1) +else: + print('Нет корней') diff --git a/lesson02/home_work/hw02_hard.py b/lesson02/home_work/hw02_hard.py index c96843184..48b0b37fb 100644 --- a/lesson02/home_work/hw02_hard.py +++ b/lesson02/home_work/hw02_hard.py @@ -53,4 +53,137 @@ # Выход: 6 2 # # Вход: 11 -# Выход: 5 3 \ No newline at end of file +# Выход: 5 3 + +#1 + +equation = 'y = -12x + 11111140.2121' +x = 2.5 +b = 1 + +equation = equation.split(' ') +print(equation) + +for num in equation: + if num == 'y': + continue + elif num == '=': + continue + elif num == '+': + operation = True + continue + elif num == "-": + operation = False + continue + elif num.find('x') >= 0: + k = num.split('x') + k = k[0] + k = float(k) + else: + b = num + b = float(b) + + +if operation: + function = k*x + b + print('{} = {} * {} + {}'.format(function, k, x, b)) +else: + function = k*x - b + print('{} = {} * {} - {}'.format(function, k, x, b)) + + + +#2 + +date = '01.11.1985' + +month_max_len = 0 +month_name = '' +error = 0 +error_d = 0 +error_y = 0 + +months = [['01','Январь',31],['02','Февраль',28],['03','Март',31],['04','Апрель',30],['05','Май',31],['06','Июнь',30],['07','Июль',31],['08','Август',31],['09','Сентябрь',30],['10','Октябрь',31],['11','Ноябрь',30],['12','Декабрь',31]] + +date = date.split('.') + +for month in months: + if month[0] == date[1]: + A = True + month_max_len = month[2] + month_name = month[1] + break + else: + error = error +1 +if error == 12: + print('Ошибка ввода месяца') + +if int(date[0]) < 1 | int(date[0]) > month_max_len | len(date[0]) != 2: + print('Ошибка ввода дня') + error_d = 1 +elif int(date[2]) < 1 | int(date[2]) > 9999 | len(date[2]) != 4: + print('Ошибка ввода года') + error_y = 1 +elif (error != 12) | (error_y != 1) | (error_d != 1): + print('GOOD') + + +#3 + +import math + +max_flat = 2 * 10 ** 9 + +N_Y = True +data = [] +start_floor_of_cell = 1 +sum_flats = 0 +cell = 1 +position = 0 +remains = 0 +floor = 0 +max_flat_in_cell = 0 +count = 2 + +while sum_flats <= max_flat: + sum_flats = sum_flats + cell ** 2 + start_floor_of_cell = start_floor_of_cell + cell - 1 + data[len(data):] = [cell, start_floor_of_cell, sum_flats] + cell = cell + 1 + +while N_Y: + number = int(input('Введите номер квартиры от 1 до 2*10^9 : ')) + + while ((number <= 1) | (number >= 2 * 10 ** 9)): + print('Ошибка') + number = int(input('Введите номер квартиры от 1 до 2*10^9 : ')) + + while number > max_flat_in_cell: + max_flat_in_cell = data[count] + count = count + 3 + + cell_of_number = data[count - 5] + start_floor_of_number = data[count - 4] + + floor = start_floor_of_number + (cell_of_number - 1 - ((max_flat_in_cell - number) // cell_of_number)) + remains = ((max_flat_in_cell - number) % cell_of_number) + + if remains > 0: + position = cell_of_number - remains + + else: + position = cell_of_number + + print('На {} этаже {} по счету слева'.format(floor, position)) + while True: + answer = input('Повторим N \ Y ? : ') + if (answer == 'N') | (answer == 'n'): + N_Y = False + break + elif (answer == 'y') | (answer == 'Y'): + N_Y = True + break + else: + print('Ошибка') + + diff --git a/lesson03/home_work/hw03_hard.py b/lesson03/home_work/hw03_hard.py index a8c7f668a..0b985366a 100644 --- a/lesson03/home_work/hw03_hard.py +++ b/lesson03/home_work/hw03_hard.py @@ -17,6 +17,8 @@ # то их ЗП уменьшается пропорционально, а за заждый час переработки # они получают удвоенную ЗП, пропорциональную норме. # Кол-во часов, которые были отработаны, указаны в файле "data/hours_of" +#2 + # Задание-3: @@ -31,3 +33,258 @@ # Подсказка: # Чтобы получить список больших букв русского алфавита: # print(list(map(chr, range(ord('А'), ord('Я')+1)))) + +#1 + +from fractions import Fraction + +#arr = '-2 3/4 - 2 5/42' +arr = '-2 -1/2 - -5 -2/6' + + +def find(): + + count = 0 + + for i in arr: + + if i == '+': + + summ = True + arr.pop(count) + return(count,summ) + + elif i == '-': + + summ = False + arr.pop(count) + return (count,summ) + + count += 1 + + + +def sum(summ,x,y): + + if summ: + + if y ==2: + + a = Fraction(arr[0]) + b = Fraction(arr[1]) + + if y == 3: + + a = Fraction(arr[0]) + b = Fraction(arr[1]) + c = Fraction(arr[2]) + b = b + c + return a + b + + if y == 4: + + a = Fraction(arr[0]) + b = Fraction(arr[1]) + c = Fraction(arr[2]) + d = Fraction(arr[3]) + a = a + b + b = c + d + return a + b + + if summ == False: + + if y ==2: + + a = Fraction(arr[0]) + b = Fraction(arr[1]) + return a + b + + if y == 3 & x == 1: + + a = Fraction(arr[0]) + b = Fraction(arr[1]) + c = Fraction(arr[2]) + b = -b + c + return a + b + + if y == 3 & x == 2: + + a = Fraction(arr[0]) + b = Fraction(arr[1]) + c = Fraction(arr[2]) + b = b - c + return a + b + + if y == 4: + + a = Fraction(arr[0]) + b = Fraction(arr[1]) + c = Fraction(arr[2]) + d = Fraction(arr[3]) + a = a + b + b = -c + d + return a + b + +def q(str): + + str = str.split('/') + a = int(str[0]) + b = int(str[1]) + + if a > b: + unit = a // b + part = a % b + print ('{} {}/{}'.format(unit,part,b)) + + else: + + print('{}/{}'.format(a, b)) + + + +arr = arr.split(' ') +x , summ = find() + +result = (str(sum(summ,x,len(arr)))) + +if result == '0': + + print('0') + +else: + + q(result) + +#2 +import os + +DIR = 'data' +FILE = 'workers' +FILE_2 = 'hours_of' + +def read_data(): + + f = open(os.path.join(DIR, FILE), 'r', encoding='UTF-8') + + while read(f): + + continue + +def read(f): + + readed = f.readline().splitlines() + + if readed == []: + + return False + + readed = readed[0].split() + find(readed) + + return True + +def find(file): + + FILE_2 = 'hours_of' + f = open(os.path.join(DIR, FILE_2), 'r', encoding='utf-8-sig') + + while compare(file,f): + + continue + +def compare(file,f): + + z = (f.readline().splitlines()[0].split()) + + if (z[0] == file[0]) & (z[1]==file[1]): + + new_file(z,file) + + else: + + return True + +def new_file(z,file): + + with open(os.path.join( DIR, 'new'), 'a', encoding='UTF-8') as f: + f.write(' '.join(file)) + f.write(' ' + z[2]) + + if file[0] == 'Имя': + + f.write(' Зарплата\n') + + else: + + f.write(' ' + (new_add(z,file))) + f.write('\n') + +def new_add(z,file): + + if ((int(file[4]) >= int(z[2]))): + + tt = (int(z[2]) / int(file[4])) * int(file[2]) + tt = round(tt, 2) + return str(tt) + + else: + + tt = (int(z[2]) - int(file[4]))/int(file[4])*(int(file[2])*2)+int(file[2]) + tt = round(tt, 2) + return str(tt) + + + + + +read_data() + +#3 + +import os + +DIR = 'data' +FILE = 'fruits.txt' +Alhabet = (list(map(chr, range(ord('А'), ord('Я')+1)))) + + + + +def write_fruit(fruit,letter): + + FILE = 'fruit_' + letter + DIR = 'data' + type = 'a' + + with open(os.path.join( DIR, FILE), type, encoding='UTF-8') as f: + + f.write(fruit + '\n') + +def read_fruit(f, i): + + readed = f.readline().splitlines() + + if readed == []: + + f.close() + return False + + elif readed[0] == '': + return True + + + elif list(readed[0])[0] == i: + + write_fruit(readed[0], i) + return True + else: + + return True + +for i in Alhabet: + + f = open(os.path.join(DIR, FILE), 'r', encoding='UTF-8') + + while read_fruit(f, i): + + continue diff --git a/lesson04/home_work/hw04_hard.py b/lesson04/home_work/hw04_hard.py index 3b12dc315..5528e8012 100644 --- a/lesson04/home_work/hw04_hard.py +++ b/lesson04/home_work/hw04_hard.py @@ -47,3 +47,64 @@ # Программа получает на вход восемь пар чисел, # каждое число от 1 до 8 — координаты 8 ферзей. # Если ферзи не бьют друг друга, выведите слово NO, иначе выведите YES. + + +#1 + +matrix = [[1, 0, 8], + [3, 4, 1], + [0, 4, 2]] + + +print(list(map(list, zip(*matrix)))) + +#2 + +number = """7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450""" + +def max_summ(number): + count = 0 + + for i in range(len(number)- 4): + + new_count = sum(number[i:i + 5]) + + if new_count > count: + + count, position = new_count, i + + return count, position + +count, position = max_summ(list(map(lambda x: int(x), list(number)))) +print('Индекс смещения первого числа = {} , Произведение 5-ти чисел = {}'.format(count, position)) + + +#3 + + +queens = [[1,2],[2,4],[3,6],[4,8],[5,3],[6,1],[7,7],[8,5]] + +doska = 8 +attack = False + +for i in range(doska): + + for j in range(i + 1, doska): + + x = queens[i] + y = queens[j] + + if x[0] == y[0] or x[1] == y[1] or abs(x[0] - y[0]) == abs(x[1] - y[1]): + + attack = True + +if not attack: + + print('NO') + +else: + + print('YES') + + + diff --git a/lesson05/home_work/hw05_hard.py b/lesson05/home_work/hw05_hard.py index 7507e47b2..8d481924f 100644 --- a/lesson05/home_work/hw05_hard.py +++ b/lesson05/home_work/hw05_hard.py @@ -13,3 +13,127 @@ # Исходной директорией считать ту, в которой был запущен скрипт. # P.S. По возможности, сделайте кросс-платформенную реализацию. + +import os +import sys +import shutil + +print("sys.argv = ", sys.argv) + + +def print_help(): + print("help - получение справки") + print("mkdir - создание директории") + print("cp - создание копии указанного файла") + print("rm - удаляет указанный файл") + print("cd - меняет текущую директорию на указанную") + print("ls - отображение полного пути текущей директории") + print("ping - тестовый ключ") + +def make_dir(): + if not dir_name: + print("Необходимо указать имя директории вторым параметром") + return + dir_path = os.path.join(os.getcwd(), dir_name) + try: + os.mkdir(dir_path) + print('директория {} создана'.format(dir_name)) + except FileExistsError: + print('директория {} уже существует'.format(dir_name)) + +def copy_file(): + if not dir_name: + print(" Необходимо указать имя копируемого файла") + return + + file_path = os.path.join(os.getcwd(), dir_name) + splitext = os.path.splitext(file_path) + spli = os.path.splitext(dir_name) + + if os.path.isfile(file_path): + + shutil.copy2(file_path, os.path.join(os.getcwd(), '{}_copy2{}'.format(splitext[0], splitext[1]))) + print('Файл {} успешно скопирован как {}_copy2{}'.format(dir_name, spli[0],spli[1])) + + else: + print('Копируемый объект не является файлом') + + +def remove_file(): + + if not dir_name: + + print(" Необходимо указать имя удаляемого файла") + return + + if os.path.isfile(os.path.join(os.getcwd(), dir_name)): + + answer = input('Вы уверенны, что хотите удалить файл "{}"? [Y/N]'.format(dir_name)) + + if answer == 'y' or answer == 'Y': + + try: + + os.remove(dir_name) + print("Файл {} успешно удален".format(dir_name)) + + except Exception: + + print("Файл занят другой программой") + else: + print(" Удаление файла {} отменено ".format(dir_name)) + else: + print('Файл не существует') + + +def change_dir(): + if not dir_name: + + print("Необходимо указать имя директории вторым параметром") + return + + try: + + os.chdir(dir_name) + print('Новая дериктория {}'.format(os.getcwd())) + + except FileNotFoundError: + + print('Такой папки не существует') + + +def full_dir(): + + print(" Полный путь текущей директории : " + os.getcwd()) + + +def ping(): + print("pong") + +do = { + "help": print_help, + "mkdir": make_dir, + "cp": copy_file, + "rm": remove_file, + "cd": change_dir, + "ls": full_dir, + "ping": ping +} + +try: + dir_name = sys.argv[2] +except IndexError: + dir_name = None + +try: + key = sys.argv[1] +except IndexError: + key = None + + +if key: + if do.get(key): + do[key]() + else: + print("Задан неверный ключ") + print("Укажите ключ help для получения справки") diff --git a/lesson06/home_work/hw06_hard.py b/lesson06/home_work/hw06_hard.py index fae8d84d2..c4ec97725 100644 --- a/lesson06/home_work/hw06_hard.py +++ b/lesson06/home_work/hw06_hard.py @@ -10,3 +10,50 @@ # С использованием классов. # Реализуйте классы сотрудников так, чтобы на вход функции-конструктора # каждый работник получал строку из файла + +import os + + +class Worker: + def __init__(self, line): + + name, second_name, pay, post, task = line.split() + self.fullname = name + ' ' + second_name + self.pay = float(pay) + self.task = float(task) + + def calc(self): + + worked = hours.get(self.fullname) + + if worked >= self.task: + + f_pay = self.pay * (2 * (worked / self.task - 1) + 1) + + else: + + f_pay = self.pay * (worked / self.task) + + return f_pay + + +def new(x): + + name, second_name, hours_w = x.split() + return name + ' ' + second_name, float(hours_w) + + +path_w = os.path.join('data', 'workers') +path_h = os.path.join('data', 'hours_of') + +with open(path_w, "r", encoding='UTF-8') as f: + f.readline() # Удаляем заголовок + workers = list(map(Worker, f.readlines())) + +with open(path_h, "r", encoding='UTF-8') as f: + f.readline() # Уаляем заголовок + hours_of = f.readlines() + +hours = {person: hours for person, hours in map(new, hours_of)} + +print({worker.fullname: round(worker.calc(), 2) for worker in workers}) diff --git a/lesson07/home_work/loto.py b/lesson07/home_work/loto.py index 5ea6ad844..fa6fede6c 100644 --- a/lesson07/home_work/loto.py +++ b/lesson07/home_work/loto.py @@ -57,3 +57,123 @@ модуль random: http://docs.python.org/3/library/random.html """ + +import random +MAX_Bo4enki = 90 + + + +class Bo4enki: + def __init__(self): + + self.bo4 = [i for i in range(1,MAX_Bo4enki + 1)] + + @property + def give(self): + if len(self.bo4) == 0: + return None + return self.bo4.pop(random.randint(1, len(self.bo4)) - 1) + + +class NewCard(Bo4enki): + def __init__(self): + Bo4enki.__init__(self) + self.cardd = [] + + def line(self): + g = list(map(lambda x: self.give, range(5))) + g.sort() + for i in range(4): + g.insert(random.randint(0,9),' ') + return g + + def card(self): + + for i in range(3): + self.cardd.extend(self.line()) + return self.cardd + + +class Control(NewCard): + def __init__(self): + + NewCard.__init__(self) + self.a1 = NewCard().card() + self.a2 = NewCard().card() + self.b0 = self.give + self.i = self.a1.count(self.b0) + self.j = self.a2.count(self.b0) + self.a1_i, self.a2_j = 0, 0 + self.win = True + self.print + + @property + def print(self): + print('Новый бочонок: {} (осталось {})'.format(self.b0, len(self.bo4))) + print('------ Ваша карточка -----') + print(*self.a1[0:9]) + print(*self.a1[9:18]) + print(*self.a1[18:27]) + print('--------------------------\n-- Карточка компьютера ---') + print(*self.a2[0:9]) + print(*self.a2[9:18]) + print(*self.a2[18:27]) + print('--------------------------') + + def update(self, bool): + if self.j > 0: + self.a2_j += 1 + self.a2.insert(self.a2.index(self.b0), 'X') + self.a2.remove(self.b0) + if bool: + self.a1_i += 1 + self.a1.insert(self.a1.index(self.b0), 'X') + self.a1.remove(self.b0) + if a.a2_j == 15 and a.a1_i == 15: + print("Ничья, игра окончена") + self.win = False + return False + elif a.a2_j == 15: + print("Выйграл компьютер, игра окончена") + self.win = False + return False + elif a.a1_i == 15: + print("Вы выйграли, игра окончена") + self.win = False + return False + else: + self.b0 = self.give + self.i = self.a1.count(self.b0) + self.j = self.a2.count(self.b0) + return True + + +a = Control() +count = 0 +while a.win: + answer = input('Зачеркнуть цифру? (Y/N)') + + if count > 1: + print("Неверная команда, игра окончена") + break + + elif (answer == 'N' or answer == 'n') and a.i > 0: + print("Вы не заметили цифру, игра окончена") + break + elif answer == 'N' or answer == 'n'and a.i == 0: + print('Верно, цифры нет') + if a.update(False) == True: + a.print + elif (answer == 'Y' or answer == 'y') and a.i == 0: + print("Цифры не было, игра окончена") + break + elif (answer == 'Y' or answer == 'y') and a.i > 0: + print('Верно, цифра есть') + if a.update(True) == True: + a.print + else: + print('Некоректный ввод, попробуйте еще раз') + count +=1 + + +