Математическое моделирование прикладных задач
2 вариант
Сухова Ангелина КТ-42-19
Лабораторная работа № 6
Задание 1 (2 вариант)
class Buffer:
def __init__(self):
self.current_part=[]
def add(self, *a):
self.current_part.extend(a)
while len(self.current_part)-5>=0:
print(sum(self.current_part[0:5]))
self.current_part=self.current_part[5:]
def get_current_part(self):
return self.current_part
buf=Buffer()
buf.add(1,2,3)
buf.get_current_part() # вернуть[1,2,3]
buf.add(4,5,6) #print(15) - вывод суммы первой пятёрки элементов
buf.get_current_part() # вернуть [6]
buf.add(7,8,9,10) #print(40) - вывод суммы второй пятёрки элементов
buf.get_current_part() # вернуть []
buf.add(1,1,1,1,1,1,1,1,1,1,1) #print(5),print(5) - вывод сумм третьей
# и четвёртой пятёрки
Задание 3 (2 вариант)
import random
class Warrer:
def __init__(self, name, health=100):
self.name = name
self.health = health
print ('Создан воин {} со здоровьем {}'.format(self.name, self.health))
def strike(self, enemyWarrer):
if True:
print('Воин {} нанес урон -20 воину {}'.format(self.name, enemyWarrer.name))
enemyWarrer.setHealth(
enemyWarrer.getHealth() - 20
)
else:
print('Неверно заданно здоровье для воина {}'.format(enemyWarrer.name))
print(type(enemyWarrer.getHealth()))
def setHealth(self, health):
self.health = health
print('Установленно здоровье {} для воина {}'.format(self.health, self.name))
def getHealth(self):
try:
return self.health
print('Здоровье воина {} — {}'.format(self.name, self.health))
except:
return 'Здоровье не заданно'
print('Здоровье для воина {} не заданно'.format(self.name))
one=Warrer('Lion',100)
two=Warrer('Aren',100)
while (one.health > 0) and (two.health > 0):
round = random.randint(1, 2)
if round == 1:
one.strike(two)
elif round == 2:
two.strike(one)
if round == 1:
name = one.name
enemy_name = two.name
elif round == 2:
name = two.name
enemy_name = one.name
print('Воин {} одержал победу над воином {}'.format(name, enemy_name))
Задание 5 (2 вариант)
class ExtrendedStack(list):
def sum(self):
# операция сложения
top1=self.pop()
top2=self.pop()
self.append(top1+top2)
def sub(self):
# операция вычитания
top1=self.pop()
top2=self.pop()
self.append(top1-top2)
def mul(self):
# операция умножения
top1=self.pop()
top2=self.pop()
self.append(top1*top2)
def div(self):
# операция целочисленного деления
top1=self.pop()
top2=self.pop()
self.append(top1//top2)
def test():
ex_stack=ExtrendedStack([1, 2, 3, 4, -3, 3, 5, 10])
ex_stack.div()
assert ex_stack.pop() == 2
ex_stack.sub()
assert ex_stack.pop() == 6
ex_stack.sum()
assert ex_stack.pop() == 7
ex_stack.mul()
assert ex_stack.pop() == 2
assert len(ex_stack) == 0
if __name__ == "__main__":
test()
Задание 6
import time
class Loggable:
def log(self, msg):
print(str(time.ctime()) + ": " + str(msg))
class LoggableList(list, Loggable):
def append(self, x):
self.log(x)
super().append(x)
def test():
t = LoggableList()
t.append(1)
t.append('str')
assert len(t) == 2
if __name__ == "__main__":
test()
Задание 7
classes = {}
def add_class(classes, class_name, parents):
if class_name not in classes:
classes[class_name] = []
classes[class_name].extend(parents)
for parent in parents:
if parent not in classes:
classes[parent] = []
def found_path(classes, start, end, path=[]):
path = path + [start]
if start == end:
return path
if start not in classes:
return None
for node in classes[start]:
if node not in path:
newpath = found_path(classes, node, end, path)
if newpath: return newpath
return None
def answer(classes, parent, child):
if not(parent or child) in classes or not found_path(classes, child, parent):
return 'No'
return 'Yes'
n = int(input())
for _ in range(n):
class_description = input().split()
class_name = class_description[0]
class_parents = class_description[2:]
add_class(classes, class_name, class_parents)
q = int(input())
for _ in range(q):
question = input().split()
parent = question[0]
child = question[1]
print(answer(classes, parent, child))