Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 102 additions & 0 deletions 13.1.py
Original file line number Diff line number Diff line change
@@ -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)

68 changes: 68 additions & 0 deletions 13.7.py
Original file line number Diff line number Diff line change
@@ -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))


80 changes: 80 additions & 0 deletions 13.8.py
Original file line number Diff line number Diff line change
@@ -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)