Лабы / ЛР3 ООП
.docxМинобрнауки России
Федеральное государственное автономное образовательное учреждение высшего образования «Национальный исследовательский университет
«Московский институт электронной техники»
Лабораторная работа №3 по дисциплине
«Объектно-ориентированное программирование»
2022 г.
Задание 1:
class Dictionary():#Создали класс
#Создаем методы
def __init__(self, num_requests):
self.num_requests = num_requests
self.syn_dict = {}
def add_word(self):
self.syn_dict.update({split_action[1] : split_action[2]})
def check_syn(self):
def find_key(d, value):#поиск ключа по значению
for k, v in d.items(): #перебор по всем парам ключ-значение
if v == value:
return k
ke_y = split_action[1] #Нарезка введенной строки
val = split_action[2]
search_k = find_key(self.syn_dict,val)
search_v = self.syn_dict.get(ke_y)
if ke_y in self.syn_dict.keys():#поиск значения по ключу
if val == search_v:
print("Yes")
else:
print("No")
elif ke_y in self.syn_dict.values():
if val == search_k:
print("Yes")
else:
print("No")
def count_word(self):
val = split_action[1]
ke_y = split_action[1]
count = 0
for k, v in self.syn_dict.items():
if v == val: #проверка на совпадение по значениям
count += 1
elif k == ke_y: #проверка на совпадение по ключу
count += 1
check_value = self.syn_dict.get(ke_y)
for k1, v1 in self.syn_dict.items(): #исключение случая зеркальных пар
if v1 == val and check_value == k1:
count -= 1
print(count)
num_requests = int(input("Список команд\nadd\ncheck\ncount\n\nВедите кол-во запросов к словарю\n"))
words = Dictionary(num_requests) #создание экземпляра класса
words.syn_dict = {}
count = 0
while count < num_requests :
action = input("Введите команду\n")
split_action = action.split()
if split_action[0] == "add" or split_action[0] == "add".upper() or split_action[0] == "add".title():
words.add_word()
count += 1
elif split_action[0] =="check" or split_action[0] =="check".upper() or split_action[0] =="check".title():#Сделала, чтобы распознавал любой текст, и с заглавной буквы и капсом
words.check_syn()
count += 1
elif split_action[0] =="count" or split_action[0] =="count".upper() or split_action[0] =="count".title():
words.count_word()
count += 1
print(words.syn_dict)
Задание 2:
class Queue():
def __init__(self, people_count):
self.people_count = people_count
self.people_list = ["quiet" for i in range(people_count)]
def worry_i(self, i):
del self.people_list[i]
self.people_list.insert(i,"worry")
def quiet_i(self, i):
del self.people_list[i]
self.people_list.insert(i,"quiet")
def come_k(self, k):
for s in range(k):
self.people_list.append("queit")
def leave_k(self, k):
for t in range(k):
self.people_list.pop()
def worry_count(self):
count = 0
for i in self.people_list:
if i == "worry":
count += 1
print(count)
count_people = int(input("Список команд:\nworry\ncome\nleave\nqueit\nworry_count\n\nВведите количество человек в очереди\n"))
que = Queue(count_people)
# print(que.people_list) если нужно посмотреть, что происходит
while 1:
action = input("Введите операцию\n")
action_list = action.split()
if action_list [0] =="come" or action_list [0] == "come".upper() or action_list [0] == "come".title():
k = int("".join(action_list[1::1]))
que.come_k(k)
elif action_list [0] =="queit" or action_list [0] =="queit".upper() or action_list [0] =="queit".title():
i = int("".join(action_list[1::1]))
if i > (len(que.people_list)-1) :
print("Такого человека в очереди нет")
pass
else:
que.quiet_i(i)
elif action_list [0] =="leave" or action_list [0] =="leave".upper() or action_list [0] =="leave".title():
k = int("".join(action_list[1::1]))
if k > (len(que.people_list)-1) :
print("В очереди нет стольких людей")
pass
else:
que.leave_k(k)
elif action_list [0] =="worry" or action_list [0] =="worry".upper() or action_list [0] =="worry".title():
i = int("".join(action_list[1::1]))
if i > (len(que.people_list)-1) :
print("Такого человека в очереди нет")
pass
else:
que.worry_i(i)
elif action_list [0] =="worry_count" or action_list [0] =="worry_count".upper() or action_list [0] =="worry_count".title():
que.worry_count()
А это задание 2, но как я решила изначально, потом немного оптимизировала, различие только в __init__:
class Queue():
def _init_ (self,people_list, count_people = 0):
self.people_list = []
self.count_people = count_people
def worry_i(self, i):
del self.people_list[i]
self.people_list.insert(i,"worry")
def quiet_i(self, i):
del self.people_list[i]
self.people_list.insert(i,"quiet")
def come_k(self, k):
for s in range(k):
self.people_list.append("queit")
def leave_k(self, k):
for t in range(k):
self.people_list.pop()
def worry_count(self):
count = 0
for i in self.people_list:
if i == "worry":
count += 1
print(count)
que = Queue()
que.count_people = int(input("Список команд:\nworry\ncome\nleave\nqueit\nworry_count\n\nВведите количество человек в очереди\n"))
que.people_list = []
for i in range(que.count_people):
que.people_list.append("quiet")
while 1:
action = input("Введите операцию\n")
action_list = action.split()
if action_list [0] =="come" or action_list [0] == "come".upper() or action_list [0] == "come".title():
k = int("".join(action_list[1::1]))
que.come_k(k)
elif action_list [0] =="queit" or action_list [0] =="queit".upper() or action_list [0] =="queit".title():
i = int("".join(action_list[1::1]))
if i > (len(que.people_list)-1) :
print("Такого человека в очереди нет")
pass
else:
que.quiet_i(i)
elif action_list [0] =="leave" or action_list [0] =="leave".upper() or action_list [0] =="leave".title():
k = int("".join(action_list[1::1]))
if k > (len(que.people_list)-1) :
print("В очереди нет стольких людей")
pass
else:
que.leave_k(k)
elif action_list [0] =="worry" or action_list [0] =="worry".upper() or action_list [0] =="worry".title():
i = int("".join(action_list[1::1]))
if i > (len(que.people_list)-1) :
print("Такого человека в очереди нет")
pass
else:
que.worry_i(i)
elif action_list [0] =="worry_count" or action_list [0] =="worry_count".upper() or action_list [0] =="worry_count".title():
que.worry_count()