diff --git a/13.1.py b/13.1.py new file mode 100644 index 0000000..7909980 --- /dev/null +++ b/13.1.py @@ -0,0 +1,102 @@ +class Person: #Клас Особа + def __init__(self, name = '', surname = '', age = 0): + self.name = name + self.surname = surname + self.age = age + + def __str__(self): + return f'{self.name} {self.surname}, {self.age}' + + def input(self): + self.name = input('Enter name: ') + self.surname = input('Enter surname: ') + self.age = int(input('Enter age: ')) + + def __repr__(self): + return f'Person({self.name}, {self.surname}, {self.age})' + +class Acquainted(Person): + def __init__(self, name = '', surname = '', age = 0, phone_numb = ''): + self.name = name + self.surname = surname + self.age = age + self.phone_numb = phone_numb + + def __str__(self): + return f'{self.name} {self.surname} {self.age} {self.phone_numb}' + + def inp_phone(self): + self.phone_numb = input('Enter phone number: ') + + def set_phone(self, phone_numb): + self.phone_numb = phone_numb + + def get_phone(self): + return self.phone_numb + +class Notebook: + def __init__(self, fname): + self.lst = [] + self.fname = fname + try: + f = open(fname) + for line in f.readlines(): + s1 = line.split()[0] + s2 = line.split()[1] + s3 = int(line.split()[2]) + s4 = line.split()[3] + acq = Acquainted(s1, s2, s3, s4) + self.lst.append(acq) + f.close() + except: + print('Bad file') + + def upd(self, a = None): + if a is None: + a = Acquainted() + a.input() + a.inp_phone() + self.lst.append(a) + f = open(self.fname, 'w+') + for x in self.lst: + f.write(' '.join([x.name, x.surname, str(x.age), x.phone_numb])) + f.write('\n') + f.close() + + def upd2(self): + n = int(input('Number of acquaintance: ')) + for _ in range(n): + self.upd() + f = open(self.fname, 'w+') + for x in self.lst: + f.write(' '.join([x.name, x.surname, str(x.age), x.phone_numb])) + f.write('\n') + f.close() + + def __str__(self): + return '\n'.join(str(x) for x in self.lst) + + def finder(self, surname): + for item in self.lst: + if item.surname == surname: + return item.get_phone() + return None + + def changer(self, surname, new_phone): + for item in self.lst: + if item.surname == surname: + item.set_phone(new_phone) + return True + return None + + +if __name__ == "__main__": + p = Person() + p.input() + print(p) + print(repr(p)) + a = Acquainted() + a.input() + a.inp_phone() + print(a) + diff --git a/13.7.py b/13.7.py new file mode 100644 index 0000000..f300794 --- /dev/null +++ b/13.7.py @@ -0,0 +1,68 @@ +class Segment: + + def __init__(self, a, b): + assert a <= b, 'b > a' + self.a = a + self.b = b + + if self.a == self.b: + self.empty = True + else: + self.empty = False + + self.seg = (self.a, self.b, self.empty) + + def __str__(self): + return f'({self.a}, {self.b}, {self.empty})' + + def make_empty(self): + self.a = self.b = 0 + self.empty = True + + def is_empty(self): + return self.empty + + def intersect(self, t): + if self.empty or t.empty: + return self.make_empty() + + if self.b < t.a or self.a > t.b: + return self.make_empty() + + if self.a >= t.a and self.b <= t.b: + return self + elif self.a <= t.a and self.b >= t.b: + return t + + if self.a >= t.a and self.b >= t.b: + return Segment(self.a, t.b) + elif self.a <= t.a and self.b <= t.b: + return Segment(t.a, self.b) + + + + + +if __name__ == "__main__": + # t1 = Segment(-1, 3) + # t2 = Segment(0, 9) + # t = t1.intersect(t2) + # print(t) + + p = int(input('p = ')) + q = int(input('q = ')) + d = p**2 - 4*q + x_1 = (-p - d**0.5)/2 + x_2 = (-p + d**0.5)/2 + t_1 = Segment(x_1, x_2) + + p = int(input('p = ')) + q = int(input('q = ')) + d = p**2 - 4*q + x_1 = (-p - d**0.5)/2 + x_2 = (-p + d**0.5)/2 + t_2 = Segment(x_1, x_2) + + print(t_1.intersect(t_2)) + + diff --git a/13.8.py b/13.8.py new file mode 100644 index 0000000..828192a --- /dev/null +++ b/13.8.py @@ -0,0 +1,80 @@ +class MultiSet: + + def __init__(self): + + self.dct = {} + + def makeEmpty(self): + self.dct.clear() + + def isEmpty(self): + return not bool(self.dct) + + def addElement(self, el): + self.dct[el] = self.dct.get(el, 0) + 1 + + def popElement(self, el): + self.dct[el] = self.dct.get(el, 0) - 1 + if self.dct[el] <= 0: + del self.dct[el] + + def countElement(self, el): + return self.dct.get(el, 0) + + def union(self, ms): + + keys1 = set(self.dct.keys()) + keys2 = set(ms.dct.keys()) + + keys = keys1 | keys2 + + for item in keys: + self.dct[item] = max(self.dct.get(item, 0), ms.dct.get(item, 0)) + + def intersect(self, ms): + + keys1 = set(self.dct.keys()) + keys2 = set(ms.dct.keys()) + + keys = keys1 & keys2 + + rem = keys1 - keys2 + for item in rem: + del self.dct[item] + + for item in keys: + self.dct[item] = min(self.dct.get(item, 0), ms.dct.get(item, 0)) + + def __str__(self): + st = "{" + for k, v in self.dct.items(): + st += f"({k}, {v}), " + st += "}\n" + return st + +if __name__ == "__main__": + + m1 = MultiSet() + m1.addElement(3) + m1.addElement(2) + m1.addElement(1) + m1.addElement(3) + m1.addElement(3) + m1.addElement(1) + print(m1) + + m2 = MultiSet() + m2.addElement(1) + m2.addElement(3) + m2.addElement(1) + m2.addElement(3) + m2.addElement(3) + m2.addElement(1) + print(m2) + + m1.union(m2) + print(m1) + + m1.intersect(m2) + print(m1) +