diff --git a/lesson01/home_work/hw01_easy.py b/lesson01/home_work/hw01_easy.py index f927b0b06..4b043a145 100644 --- a/lesson01/home_work/hw01_easy.py +++ b/lesson01/home_work/hw01_easy.py @@ -1,5 +1,5 @@ -__author__ = 'Ваши Ф.И.О.' +__author__ = 'Горяев Никита Андреевич' # Задача-1: Дано произвольное целое число (число заранее неизвестно). # Вывести поочередно цифры исходного числа (порядок вывода цифр неважен). @@ -9,6 +9,11 @@ # код пишем тут... +number_units = input('Введите число ') +i = 0 +while i < len(number_units): + print(number_units[i]) + i += 1 # Задача-2: Исходные значения двух переменных запросить у пользователя. # Поменять значения переменных местами. Вывести новые значения на экран. @@ -18,7 +23,20 @@ # Не нужно решать задачу так: # print("a = ", b, "b = ", a) - это неправильное решение! +unit1 = input("Введите первое число") +unit2 = input("Введите второе число") +fake = unit1 +unit1 = unit2 +unit2 = fake +print(unit1,"теперь равен", unit2) +print(unit2,"теперь равен", unit1) # Задача-3: Запросите у пользователя его возраст. # Если ему есть 18 лет, выведите: "Доступ разрешен", # иначе "Извините, пользование данным ресурсом только с 18 лет" + +age = int(input("Введите ваш возраст")) +if age >= 18: + print("Доступ разрешен") +else: + print("Извините, пользование данным ресурсом только с 18 лет") \ No newline at end of file diff --git a/lesson01/home_work/hw01_normal.py b/lesson01/home_work/hw01_normal.py index 991724e9a..c9e08631e 100644 --- a/lesson01/home_work/hw01_normal.py +++ b/lesson01/home_work/hw01_normal.py @@ -1,5 +1,5 @@ -__author__ = 'Ваши Ф.И.О.' +__author__ = 'Горяев Никита Андреевич' # Задача-1: Дано произвольное целое число, вывести самую большую цифру этого числа. # Например, дается x = 58375. @@ -10,6 +10,16 @@ # * постарайтесь решить задачу с применением арифметики и цикла while; # * при желании и понимании решите задачу с применением цикла for. +#!/usr/bin/env python3 + +user_number = int(input("Введите число")) +compare_number = -1 +while user_number > 10: + division_number = user_number % 10 + user_number //= 10 + if division_number > compare_number: + compare_number = division_number +print("Наибольшая цифра -",compare_number) # Задача-2: Исходные значения двух переменных запросить у пользователя. # Поменять значения переменных местами. Вывести новые значения на экран. @@ -18,6 +28,11 @@ # * постарайтесь сделать решение через действия над числами; # * при желании и понимании воспользуйтесь синтаксисом кортежей Python. +unit1 = input("Введите первое число") +unit2 = input("Введите второе число") +unit1,unit2 = unit2,unit1 +print("Первое число теперь",unit1) +print("Второе число теперь",unit2) # Задача-3: Напишите программу, вычисляющую корни квадратного уравнения вида # ax² + bx + c = 0. @@ -25,3 +40,20 @@ # Для вычисления квадратного корня воспользуйтесь функцией sqrt() модуля math: # import math # math.sqrt(4) - вычисляет корень числа 4 + +import math +print("Введите значения квадратного уравнения") +a = int(input("a=")) +b = int(input("b=")) +c = int(input("c=")) +d = b*b - 4*a*c +if d < 0: + print("Корней нет") +if d == 0: + x_first = (- b - math.sqrt(d)) / (2 * a) + print("Уравнение имеет один корень равный",x_first) +if d > 0: + x_first = (- b - math.sqrt(d)) / (2 * a) + x_second = (- b + math.sqrt(d)) / (2 * a) + print("Первый корень равен",x_first) + print("Второй корень равен",x_second) diff --git a/lesson02/home_work/hw02_easy.py b/lesson02/home_work/hw02_easy.py index ed4447e50..4a27b9e11 100644 --- a/lesson02/home_work/hw02_easy.py +++ b/lesson02/home_work/hw02_easy.py @@ -1,8 +1,7 @@ # Задача-1: # Дан список фруктов. # Напишите программу, выводящую фрукты в виде нумерованного списка, -# выровненного по правой стороне. - +# # выровненного по правой стороне. # Пример: # Дано: ["яблоко", "банан", "киви", "арбуз"] # Вывод: @@ -13,13 +12,34 @@ # Подсказка: воспользоваться методом .format() +fruit_pack = ['яблоко', 'банан', 'киви', 'арбуз'] +for i in range(0, len(fruit_pack)): + print(str(i + 1) + '.' + '{:>7}'.format(fruit_pack[i])) + + + # Задача-2: # Даны два произвольные списка. # Удалите из первого списка элементы, присутствующие во втором списке. +first_pack = ['1', '2', '3', '4', '5', '6', '7'] +second_pack = ['1', '3', '6'] +for item in second_pack: + if item in first_pack: + first_pack.remove(item) + # Задача-3: # Дан произвольный список из целых чисел. # Получите НОВЫЙ список из элементов исходного, выполнив следующие условия: # если элемент кратен двум, то разделить его на 4, если не кратен, то умножить на два. +full_pack = ['1', '2', '3', '4', '5', '6', '7', '12'] +empty_pack = [] +for i in range(0, len(full_pack)): + check_number = int(full_pack[i]) + if check_number % 2 == 0: + empty_pack.append(check_number/4) + else : + empty_pack.append(check_number*2) +print(empty_pack) diff --git a/lesson02/home_work/hw02_normal.py b/lesson02/home_work/hw02_normal.py index 3acfaabb6..90b646618 100644 --- a/lesson02/home_work/hw02_normal.py +++ b/lesson02/home_work/hw02_normal.py @@ -5,17 +5,57 @@ # если такой корень вообще можно извлечь # Пример: Дано: [2, -5, 8, 9, -25, 25, 4] Результат: [3, 5, 2] +import math +my_pack = [2, -5, 8, 9, -25, 25, 4, ] +empty_pack = [] +for item in my_pack: + if item > 0 and math.sqrt(item) % 1 == 0: + empty_pack.append(int(math.sqrt(item))) +print(empty_pack) + # Задача-2: Дана дата в формате dd.mm.yyyy, например: 02.11.2013. # Ваша задача вывести дату в текстовом виде, например: второе ноября 2013 года. # Склонением пренебречь (2000 года, 2010 года) +user_date = input('Введите дату:') +date_check = user_date.split('.') +dic_days = { + '01': 'первое', '02': 'второе', '03': 'третье', '04': 'четвёртое', '05': 'пятое', +'06': 'шестое', '07': 'седьмое', '08': 'восьмое', '09': 'девятое', '10': 'десятое', +'11': 'одиннадцатое', '12': 'двенадцатое', '13': 'тринадцатое', '14': 'четырнадцатое', '15': 'пятнадцатое', +'16': 'шестнадцатое', '17': 'семнадцатое', '18': 'восемнадцатое', '19': 'девятнадцатое', '20': 'двадцатое', +'21': 'двадцать первое', '22': 'двадцать второе', '23': 'двадцать третье', '24': 'двадцать четвёртое', +'25': 'двадцать пятое', '26': 'двадцать шестое', '27': 'двадцать седьмое', '28': 'двадцать восьмое', +'29': 'двадцать девятое', '30': 'тридцатое', '31': 'тридцать первое' +} + +dic_months = { +'01': 'января', '02': 'феврал', '03': 'марта', '04': 'апреля', '05': 'мая', '06': 'июня', +'07': 'июля', '08': 'августа', '09': 'сентября', '10': 'октября', '11': 'ноября', '12': 'декабря', +} + +for key in dic_days: + if date_check[0] == key: + date_check[0] = dic_days[key] + +for key in dic_months: + if date_check[1] == key: + date_check[1] = dic_months[key] + +print(date_check[0] + ' ' + date_check[1] + ' ' + date_check[2] + ' ' "года") # Задача-3: Напишите алгоритм, заполняющий список произвольными целыми числами # в диапазоне от -100 до 100. В списке должно быть n - элементов. # Подсказка: # для получения случайного числа используйте функцию randint() модуля random +import random +empty_pack = [] +pack_range = int(input('Введите желаемое количество элементов списка')) +for i in range(pack_range): + empty_pack.append(random.randint(-100, 100)) +print(empty_pack) # Задача-4: Дан список, заполненный произвольными целыми числами. # Получите новый список, элементами которого будут: @@ -23,3 +63,10 @@ # например, lst = [1, 2, 4, 5, 6, 2, 5, 2], нужно получить lst2 = [1, 2, 4, 5, 6] # б) элементы исходного списка, которые не имеют повторений: # например, lst = [1 , 2, 4, 5, 6, 2, 5, 2], нужно получить lst2 = [1, 4, 6] + +my_pack = [1, 2, 4, 5, 6, 2, 5, 2] +perfect_pack = [] +for item in my_pack: + if my_pack.count(item) == 1: + perfect_pack.append(item) +print(perfect_pack) \ No newline at end of file diff --git a/lesson03/home_work/hw03_easy.py b/lesson03/home_work/hw03_easy.py index 63d13f646..1f22e8ee5 100644 --- a/lesson03/home_work/hw03_easy.py +++ b/lesson03/home_work/hw03_easy.py @@ -5,7 +5,10 @@ # Для решения задачи не используйте встроенные функции и функции из модуля math. def my_round(number, ndigits): - pass + number = number * (10 ** ndigits) + 0.41 + number = number // 1 + return number / (10 ** ndigits) + print(my_round(2.1234567, 5)) @@ -18,11 +21,15 @@ def my_round(number, ndigits): # Решение реализовать в виде функции. # Билет считается счастливым, если сумма его первых и последних цифр равны. # !!!P.S.: функция не должна НИЧЕГО print'ить - def lucky_ticket(ticket_number): - pass - - + ticket_number = str(ticket_number) + x = list(map(int, ticket_number)) + if sum(x[:len(x)//2])==sum(x[len(x)//2:]): + res = ('lucky') + else: + res = ('unlucky') + return res print(lucky_ticket(123006)) print(lucky_ticket(12321)) print(lucky_ticket(436751)) + diff --git a/lesson03/home_work/hw03_normal.py b/lesson03/home_work/hw03_normal.py index 38ac1fcc1..31239f1d8 100644 --- a/lesson03/home_work/hw03_normal.py +++ b/lesson03/home_work/hw03_normal.py @@ -3,8 +3,17 @@ # Первыми элементами ряда считать цифры 1 1 def fibonacci(n, m): + fibb1 = fibb2 = 1 + fibb_par = [] + fibb_par.append(fibb1) + for fibb in range(2, m): + fibb1, fibb2 = fibb2, fibb1 + fibb2 + if fibb >= n: + fibb_par.append(fibb1) + fibb_par.append(fibb2) + print(fibb_par) pass - +fibonacci(1, 10) # Задача-2: # Напишите функцию, сортирующую принимаемый список по возрастанию. # Для сортировки используйте любой алгоритм (например пузырьковый). @@ -12,16 +21,45 @@ def fibonacci(n, m): def sort_to_max(origin_list): - pass + rep = 1 + while rep < len(origin_list): + for i in range(len(origin_list)-rep): + if origin_list[i] > origin_list[i+1]: + origin_list[i],origin_list[i+1] = origin_list[i+1],origin_list[i] + rep = rep + 1 + print(origin_list) + + return origin_list sort_to_max([2, 10, -12, 2.5, 20, -11, 4, 4, 0]) # Задача-3: # Напишите собственную реализацию стандартной функции filter. # Разумеется, внутри нельзя использовать саму функцию filter. +def func(x): + return res_func +def filter_clone(res_func, par2): + result_list = [] + for i in range(len(par2)): + if func(x) == true: + result_list.append(res_func) + return result_list + # Задача-4: # Даны четыре точки А1(х1, у1), А2(x2 ,у2), А3(x3 , у3), А4(х4, у4). # Определить, будут ли они вершинами параллелограмма. +def check_parall(x1, y1, x2, y2, x3, y3, x4, y4): + side1 = y2 - y1 + side2 = x3 - x2 + side3 = y3 - y4 + side4 = x4 - x1 + if side1 == side3 and side2 == side4: + print('Oh, its a parallelogram') + else: + print('Thats not a parallelogram') + pass + +check_parall(1, 1, 1, 4, 4, 4, 4, 1) diff --git a/lesson04/home_work/hw04_easy.py b/lesson04/home_work/hw04_easy.py index 85035ea8b..16a56a824 100644 --- a/lesson04/home_work/hw04_easy.py +++ b/lesson04/home_work/hw04_easy.py @@ -5,14 +5,24 @@ # Получить новый список, элементы которого будут # квадратами элементов исходного списка # [1, 2, 4, 0] --> [1, 4, 16, 0] - +basic_list = [1, 2, 4, 0] +quads_list = [i**2 for i in basic_list] +print(quads_list) # Задание-2: # Даны два списка фруктов. # Получить список фруктов, присутствующих в обоих исходных списках. - +fruit_pack1 = ['Апельсин', 'Мандарин', 'Яблоко', 'Груша', 'Персик'] +fruit_pack2 = ['Апельсин', 'Яблоко', 'Нектарин', 'Манго', 'Маракуйя'] +fruit_pack3 = [i for i in fruit_pack1 if i in fruit_pack2] +print(fruit_pack3) # Задание-3: # Дан список, заполненный произвольными числами. # Получить список из элементов исходного, удовлетворяющих следующим условиям: # + Элемент кратен 3 # + Элемент положительный # + Элемент не кратен 4 +import random +ran_list = [random.randint(-10, 10) for _ in range(10)] +print(ran_list) +filt_list = [el for el in ran_list if el % 3 == 0 and el >= 0 and el % 4 > 0] +print(filt_list) \ No newline at end of file diff --git a/lesson04/home_work/hw04_normal.py b/lesson04/home_work/hw04_normal.py index 739dd33f8..cf78f7d33 100644 --- a/lesson04/home_work/hw04_normal.py +++ b/lesson04/home_work/hw04_normal.py @@ -19,8 +19,21 @@ 'qHFjvihuNGEEFsfnMXTfptvIOlhKhyYwxLnqOsBdGvnuyEZIheApQGOXWeXoLWiDQNJFa'\ 'XiUWgsKQrDOeZoNlZNRvHnLgCmysUeKnVJXPFIzvdDyleXylnKBfLCjLHntltignbQoiQ'\ 'zTYwZAiRwycdlHfyHNGmkNqSwXUrxGc' +#1)используя re +import re +res = re.findall(r'[a-z]+', line) +print(res) +#2)не используя re +symbols_up = list(map(lambda x: chr(x), list(range(65,91)))) +line_list = list(line) +for i, el in enumerate(line_list[:]): + for el2 in symbols_up: + if el == el2: + line_list[i] = ' ' +str_sep = ''.join(line_list).split(' ') - +res_str = [i for i in str_sep if i != ''] +print(res_str) # Задание-2: # Вывести символы в верхнем регистре, слева от которых находятся # два символа в нижнем регистре, а справа - два символа в верхнем регистре. @@ -44,7 +57,45 @@ 'uXBqHFjvihuNGEEFsfnMXTfptvIOlhKhyYwxLnqOsBdGvnuyEZIheApQGOXWeXoLWiDQN'\ 'JFaXiUWgsKQrDOeZoNlZNRvHnLgCmysUeKnVJXPFIzvdDyleXylnKBfLCjLHntltignbQ'\ 'oiQzTYwZAiRwycdlHfyHNGmkNqSwXUrxGC' +#1)используя re +res = re.findall(r'[a-z]{2}([A-Z]+)[A-Z]{2}', line_2) +print(res) +#2)не используя re +symbols_up = list(map(lambda x: chr(x), list(range(65, 91)))) +symbols_down = list(map(lambda x: chr(x), list(range(97, 123)))) +line_list2 = list(line_2) + +list1 = [] +i = len(line_list2) - 1 + +while i >= 0: + if line_list2[i] in symbols_down: + list1.append(line_list2[i]) + elif line_list2[i] in symbols_up and i <= len(line_list2) - 3 and line_list2[i+1] in symbols_up and line_list2[i+2] in symbols_up: + list1.append(line_list2[i]) + else: + list1.append(' ') + i -= 1 +list1.reverse() + +i = 0 +list2 = [] + +while i <= len(list1)-1: + if list1[i] in symbols_down: + upper = True + if list1[i] in symbols_up and list1[i-1] in symbols_down and list1[i-2] in symbols_down: + list2.append(list1[i]) + upper = False + elif list1[i] in symbols_up and upper == False: + list2.append(list1[i]) + else: + list2.append(' ') + i += 1 +string=''.join(list2).split(' ') +res_str_2 = [i for i in string if i != ''] +print(res_str_2) # Задание-3: # Напишите скрипт, заполняющий указанный файл (самостоятельно задайте имя файла) # произвольными целыми цифрами, в результате в файле должно быть diff --git a/lesson05/home_work/hw05_easy.py b/lesson05/home_work/hw05_easy.py index c6317de2b..e83898c76 100644 --- a/lesson05/home_work/hw05_easy.py +++ b/lesson05/home_work/hw05_easy.py @@ -2,9 +2,58 @@ # Напишите скрипт, создающий директории dir_1 - dir_9 в папке, # из которой запущен данный скрипт. # И второй скрипт, удаляющий эти папки. +import os +import sys +import shutil + +dir_name = [('dir_' + str(i + 1)) for i in range(9)] + +def make_dir(path): + dir_loc = os.path.join(os.getcwd(), path) + try: + os.mkdir(dir_loc) + print(' -- папка успешно создана') + except: + print(dir_loc + ' -- папка уже существует') + + +for i in dir_name: + make_dir(i) + +def remove_dir(path): + dir_loc = os.path.join(os.getcwd(), path) + try: + os.rmdir(dir_loc) + print(' -- папка успешно удалена') + except: + print(dir_loc + ' -- такой папки не существует') + pass + +for i in dir_name: + remove_dir(i) # Задача-2: # Напишите скрипт, отображающий папки текущей директории. +path = os.getcwd() +def view_directories(path): + for _ in os.listdir(path): + print(_) # Задача-3: # Напишите скрипт, создающий копию файла, из которого запущен данный скрипт. +#def copy_file(orig_file, clone_file): +# shutil.copy(orig_file, clone_file) + + +#orig_file = sys.argv[0] +#clone_file = orig_file + '.copy' +#copy_file(orig_file,clone_file) + + +#ДЛЯ ИМПОРТА В NORMAL +def change_dir(path): + try: + os.chdir(path) + print(os.getcwd() + ' -- текущая директория') + except: + print(dir_path + ' -- такой директории не существует') \ No newline at end of file diff --git a/lesson05/home_work/hw05_normal.py b/lesson05/home_work/hw05_normal.py index ead6bbc19..3bc480846 100644 --- a/lesson05/home_work/hw05_normal.py +++ b/lesson05/home_work/hw05_normal.py @@ -13,3 +13,30 @@ # Для решения данной задачи используйте алгоритмы из задания easy, # оформленные в виде соответствующих функций, # и импортированные в данный файл из easy.py +import os +import hw05_easy +selection ='x' +while selection != '5': + print('1) Перейти в папку') + print('2) Посмотреть текущую папку') + print('3) Удалить папку') + print('4) Создать папку') + print('5) Выход') + selection = input('Выберите действие: ' ) + print(selection) + if selection == '1': + path = input ('Введите полный путь папки: ') + hw05_easy.change_dir(path) + elif selection == '2': + path = os.getcwd() + hw05_easy.view_directories(path) + elif selection == '3': + path = input('Введите полный путь папки: ') + hw05_easy.remove_dir(path) + elif selection == '4': + path = input('Введите полный путь папки: ') + hw05_easy.make_dir(path) + elif selection == '5': + pass + else: + print('Такого пункта меню нет') \ No newline at end of file diff --git a/lesson06/home_work/hw06_easy.py b/lesson06/home_work/hw06_easy.py index fe5dc2b11..bc1e82d29 100644 --- a/lesson06/home_work/hw06_easy.py +++ b/lesson06/home_work/hw06_easy.py @@ -2,8 +2,108 @@ # Определить методы, позволяющие вычислить: площадь, высоту и периметр фигуры. +import math + +class Triangle (): + def __init__(self, xa, ya, xb, yb, xc, yc): + self.xa = xa + self.ya = ya + self.xb = xb + self.yb = yb + self.xc = xc + self.yc = yc + self.AB_Side = round(math.sqrt(int (math.fabs(((yb - ya)**2) + ((xb - xa)**2)))),2) + self.BC_Side = round(math.sqrt(int(math.fabs(((yc - yb) ** 2) + ((xc - xb) ** 2)))), 2) + self.CA_Side = round(math.sqrt(int(math.fabs(((ya - yc) ** 2) + ((xa - xc) ** 2)))), 2) + + def perimetr(self): + self.perimetr = (self.AB_Side + self.BC_Side + self.CA_Side) + return (self.perimetr) + + def area(self): + self.perimetr /=2 + self.area = round(math.sqrt(self.perimetr*(self.perimetr - self.AB_Side)*(self.perimetr - self.BC_Side)* (self.perimetr - self.CA_Side)),2) + return (self.area) + + def height(self): + self.area *=2 + self.height = round((self.area / self.CA_Side),2) + return (self.height) + + +#test_triangle = Triangle(5,5,8,11,10,7) +#print('АВ = {}, ВС = {}, СА = {}'.format(test_triangle.AB_Side, test_triangle.BC_Side, test_triangle.CA_Side)) +#print('Периметр АВС равен {}'.format(test_triangle.perimetr())) +#print('Площадь АВС равна {}'.format(test_triangle.area())) +#print('Высота равна {}'.format(test_triangle.height())) + # Задача-2: Написать Класс "Равнобочная трапеция", заданной координатами 4-х точек. # Предусмотреть в классе методы: # проверка, является ли фигура равнобочной трапецией; # вычисления: длины сторон, периметр, площадь. +class Point: + def __init__(self, x, y): + self.x = x + self.y = y + +class Side: + def _length(self, p1: Point, p2: Point): + return math.sqrt(math.pow(p1.x - p2.x, 2) + math.pow(p1.y - p2.y, 2)) + + +class Trapezoid(Side): + def __init__(self, p1: Point, p2: Point, p3: Point, p4: Point): + self.p1 = p1 + self.p2 = p2 + self.p3 = p3 + self.p4 = p4 + self.AB = self._length(p1, p2) + self.BC = self._length(p2, p3) + self.CD = self._length(p3, p4) + self.DA = self._length(p4, p1) + self.height_trap = None + + def Side_AB(self): + return self.AB + + def Side_BC(self): + return self.BC + + def Side_CD(self): + return self.CD + + def Side_DA(self): + return self.DA + + def height_Trapezoid(self): + if self.AB == self.CD: + self.height_trap = self.p2.y - self.p1.y + else: + self.height_trap = self.p3.y - self.p2.y + return self.height_trap + + def perimeter_Trapezoid(self): + return self.AB + self.BC + self.CD + self.DA + + def area_Trapezoid(self): + if self.AB == self.CD: + area = self.height_trap * (self.BC + self.DA) / 2 + else: + area = self.height_trap * (self.AB + self.CD) / 2 + return area + + def check_Trapezoid(self) -> bool: + return bool(self.AB == self.CD and (self.p4.x - self.p1.x) / self.DA == (self.p3.x - self.p2.x) / self.BC or ( + self.BC == self.DA and (self.p2.x - self.p1) / self.AB == (self.p3.x - self.p4.x) / self.CD) or ( + self.AB == self.CD and self.BC == self.DA)) + +#test_trapezoid = Trapezoid(Point (0, 0), Point(2, 4), Point(6, 4), Point(8, 0)) +#if test_trapezoid.check_Trapezoid() == True: +# print('Трапеция равнобедренная') +# print('AB = {}, BC = {}, CD = {}, DA = {}'.format(test_trapezoid.Side_AB(), test_trapezoid.Side_BC(), test_trapezoid.Side_CD(), test_trapezoid.Side_DA())) +# print('Высота трапеции равна = {}'.format(test_trapezoid.height_Trapezoid())) +# print('Периметр = {}'.format(test_trapezoid.perimeter_Trapezoid())) +# print('Площадь = {}'.format(test_trapezoid.area_Trapezoid())) +#else: +# print('Трапеция неравнобедренная') \ No newline at end of file diff --git a/lesson06/home_work/hw06_normal.py b/lesson06/home_work/hw06_normal.py index 01c3982f4..f7e6cdbe2 100644 --- a/lesson06/home_work/hw06_normal.py +++ b/lesson06/home_work/hw06_normal.py @@ -15,3 +15,85 @@ # (Ученик --> Класс --> Учителя --> Предметы) # 4. Узнать ФИО родителей указанного ученика # 5. Получить список всех Учителей, преподающих в указанном классе +import random + +Surname = ('Сидоров', 'Иванов', 'Петров', 'Осин', 'Волин', 'Сергеев', 'Дмитриев', 'Турин', 'Ткачев', 'Захаров', 'Лунев') +Name = ('Ф.', 'А.', 'Д.', 'С.', 'Л.', 'В.', 'П.', 'Я.', 'Н.', 'Е.') +Subject = ('математика', 'русский язык', 'физика', 'английский язык', 'химия', 'биология') + + +class School(): + def __init__(self, name): + self.name = name + self.Classes = [] + + def add_Class(self, Class): + self.Classes.append(Class) + + def show_Classes(self): + print('В школе {} есть следующие классы:'.format(self.name)) + for item in self.Classes: + print('класс {}'.format(item.name)) + + def show_Class_Pupils(self, name): + for item in self.Classes: + if item.name == name: item.showClassPupils() + + def show_Pupil_Information(self, name): + for clss in self.Classes: + for pupil in clss.Pupils: + if pupil.name == name: + for teacher in clss.Teachers: + print('Ученик {} Класс {} Преподаватель {} Предмет {}'.format(pupil.name, clss.name, teacher.name, + teacher.subject)) + + def show_Pupil_Parents(self, name): + for clss in self.Classes: + for pupil in clss.Pupils: + if pupil.name == name: pupil.showParents() + + def gen_School(self, classes, pupils, subjects): + for index in range(int(classes)): + gen_class = Class(str(random.randint(1, 11)) + random.choice(('A', 'B', 'C', 'D'))) + self.addClass(gen_class) + for i in range(int(pupils)): + gen_class.addPupil(Pupil(random.choice(Surname) + ' ' + random.choice(Name) + random.choice(Name), + random.choice(Surname) + ' ' + random.choice(Name) + random.choice(Name), + random.choice(Surname) + 'а ' + random.choice(Name) + random.choice(Name))) + for i in range(int(subjects)): + gen_class.addTeacher(random.choice(Surname) + random.choice(Name) + random.choice(Name), + random.choice(Subject)) + + +class Class(): + def __init__(self, name): + self.name = name + self.Pupils = [] + self.Teachers = [] + + def add_Pupil(self, pupil): + self.Pupils.append(pupil) + + def add_Teacher(self, name, subject): + self.Teachers.append(Teacher(name, subject)) + + def show_Class(self): + print('В классе {} есть следующие ученики:'.format(self.name)) + for item in self.Pupils: + print('ученик {}'.format(item.name)) + + +class Pupil(): + def __init__(self, name, father, mother): + self.name = name + self.father = father + self.mother = mother + + def showParents(self): + print('Родители: {}, {}'.format(self.father, self.mother)) + + +class Teacher(): + def __init__(self, name, subject): + self.name = name + self.subject = subject \ No newline at end of file diff --git a/lesson07/home_work/loto.py b/lesson07/home_work/loto.py index 5ea6ad844..25410cb1c 100644 --- a/lesson07/home_work/loto.py +++ b/lesson07/home_work/loto.py @@ -57,3 +57,99 @@ модуль random: http://docs.python.org/3/library/random.html """ +from random import randint + + +class Card: + def __init__(self, name): + barrel_bag = [x for x in range(1, 91)] + self.card = [ + __class__.gen_string(barrel_bag), + __class__.gen_string(barrel_bag), + __class__.gen_string(barrel_bag) + ] + self.name = name + self.count_barrel = 15 + + @staticmethod + def gen_string(barrel_bag): + string = ['' for _ in range(9)] + for x in range(8, 3, -1): + digit = randint(0, x) + while string[digit] != '': + digit += 1 + string[digit] = barrel_bag.pop(randint(0, len(barrel_bag) - 1)) + return string + + def __str__(self): + rez = '{:-^26}\n'.format(self.name) + for x in range(3): + rez += '{:>2} {:>2} {:>2} {:>2} {:>2} {:>2} {:>2} {:>2} {:>2}'\ + .format(*self.card[x]) + '\n' + return rez + '--------------------------' + + +user = Card(' Пользователь ') +computer = Card(' Компьютер ') + +barrel_bag = [x for x in range(1, 91)] +while True: + if len(barrel_bag) < 1: + print('Сумка с боченками пуста.\n' + 'у пользователя осталось {} чисел,\n' + 'у компьютера осталось {} чисел.'.format( + user.count_barrel, computer.count_barrel)) + break + barrel = barrel_bag.pop(randint(0, len(barrel_bag) - 1)) + print('\nНовый боченок: {} (осталось {})'.format(barrel, len(barrel_bag))) + print(computer) + print(user) + action = input('Зачеркнуть цифру? (y/n)') + action = action.lower() + while len(action) == 0 or action not in 'yn': + print('\n\nНезивестный ввод\n') + print('Новый боченок: {} (осталось {})'.format(barrel, len(bag))) + print(computer) + print(user) + action = input('Зачеркнуть цифру? (y/n)') + action = action.lower() + + + if action == 'y': + test = False + for x in range(3): + if barrel in user.card[x]: + test = True + user.card[x][user.card[x].index(barrel)] = '-' + user.count_barrel -= 1 + if barrel in computer.card[x]: + computer.card[x][computer.card[x].index(barrel)] = '-' + computer.count_barrel -= 1 + if test: + if user.count_barrel < 1: + print('Пользователь победил!') + break + elif computer.count_barrel < 1: + print('Компьютер победил!') + break + else: + print('Пользователь проиграл! Такого числа нет на карточке') + break + elif action == 'n': + test = False + for x in range(3): + if barrel in user.card[x]: + print('Пользователь проиграл! Такое число есть на карточке') + test = True + break + if barrel in computer.card[x]: + computer.card[x][computer.card[x].index(barrel)] = '-' + computer.count_barrel -= 1 + if test: + break + if user.count_barrel < 1: + print('Пользователь выиграл!') + break + elif computer.count_barrel < 1: + print('Компьютер выиграл!') + break