Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 13.10.2023
Сообщений: 51

Простой дек

17.10.2023, 09:03. Показов 2265. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Реализуйте структуру данных "дек". Напишите программу, содержащую описание дека и моделирующую работу дека, реализовав все указанные здесь методы. Программа считывает последовательность команд и в зависимости от команды выполняет ту или иную операцию. После выполнения каждой команды программа должна вывести одну строчку. Возможные команды для программы:

push_front
Добавить (положить) в начало дека новый элемент. Программа должна вывести ok.

push_back
Добавить (положить) в конец дека новый элемент. Программа должна вывести ok.

pop_front
Извлечь из дека первый элемент. Программа должна вывести его значение.

pop_back
Извлечь из дека последний элемент. Программа должна вывести его значение.

front
Узнать значение первого элемента (не удаляя его). Программа должна вывести его значение.

back
Узнать значение последнего элемента (не удаляя его). Программа должна вывести его значение.

size
Вывести количество элементов в деке.

clear
Очистить дек (удалить из него все элементы) и вывести ok.

exit
Программа должна вывести bye и завершить работу.
Гарантируется, что количество элементов в деке в любой момент не превосходит 100. Все операции pop_front, pop_back, front, back всегда корректны.

Входные данные
Вводятся команды управления деком, по одной на строке.

Выходные данные
Требуется вывести протокол работы дека, по одному сообщению на строке.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.10.2023, 09:03
Ответы с готовыми решениями:

Задача Дек
Гоша реализовал структуру данных Дек, максимальный размер которого определяется заданным числом. Методы push_back(x), push_front(x),...

Стек, очередь, дек без append
Сделать код на стек очередь дек без использования библиотек и с меню через список

Дек на Питоне
Дек на двусвязном списке. * добавление элемента в начало, * добавление элемента в конец, * извлечение и...

14
9 / 7 / 2
Регистрация: 16.10.2023
Сообщений: 25
17.10.2023, 09:38
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
class Deque:
    def __init__(self):
        self.items = []
 
    def isEmpty(self):
        return self.items == []
 
    def push_front(self, item):
        self.items.append(item)
        return 'ok'
 
    def push_back(self, item):
        self.items.insert(0, item)
        return 'ok'
 
    def pop_front(self):
        return self.items.pop()
 
    def pop_back(self):
        return self.items.pop(0)
 
    def size(self):
        return len(self.items)
 
    def front(self):
        return self.items[-1]
 
    def back(self):
        return self.items[0]
 
    def clear(self):
        self.items = []
        return 'ok'
 
def main():
    deque = Deque()
    while True:
        command = input().split()
        operation = command[0].strip()
        if operation == 'exit':
            print('bye')
            break
        elif operation == 'push_front':
            print(deque.push_front(int(command[1])))
        elif operation == 'push_back':
            print(deque.push_back(int(command[1])))
        elif operation == 'pop_front':
            print(deque.pop_front())
        elif operation == 'pop_back':
            print(deque.pop_back())
        elif operation == 'size':
            print(deque.size())
        elif operation == 'front':
            print(deque.front())
        elif operation == 'back':
            print(deque.back())
        elif operation == 'clear':
            print(deque.clear())
 
if __name__ == "__main__":
    main()
1
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
17.10.2023, 12:16
Ну или так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
from operator import methodcaller
 
class Deque:
    empty_mess = 'Дек пуст'
 
    def __init__(self):
        self.items = []
 
    def push_front(self, item):
        self.items.append(item)
        return 'ok'
 
    def push_back(self, item):
        self.items.insert(0, item)
        return 'ok'
 
    def pop_front(self):
        if self.items:
            return self.items.pop()
        else:
            return Deque.empty_mess
 
    def pop_back(self):
        if self.items:
            return self.items.pop(0)
        else:
            return Deque.empty_mess
 
    def size(self):
        return len(self.items)
 
    def front(self):
        if self.items:
            return self.items[-1]
        else:
            return Deque.empty_mess
 
    def back(self):
        if self.items:
            return self.items[0]
        else:
            return Deque.empty_mess
 
    def clear(self):
        self.items.clear()
        return 'ok'
 
def main():
    deque = Deque()
    while True:
        print()
        command = input('->').split()
        if command[0] == 'exit':
            print('bye')
            break
        else:
            if len(command) == 1:
                f = methodcaller(command[0])
            elif len(command) == 2:
                f = methodcaller(command[0], int(command[1]))
            try:
                print(f(deque))
            except:
                print('Неверная команда!')
 
if __name__ == "__main__":
    main()
0
0 / 0 / 0
Регистрация: 13.10.2023
Сообщений: 51
17.10.2023, 12:22  [ТС]
ошибку на 66 линии выдает

Добавлено через 1 минуту
MenBenKaPen, вроде правильно, но из 8 только 1 тест проходит
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
17.10.2023, 12:24
Лучший ответ Сообщение было отмечено qwe5n как решение

Решение

Цитата Сообщение от qwe5n Посмотреть сообщение
ошибку на 66 линии выдает
Ну, тогда так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
from operator import methodcaller
 
class Deque:
    empty_mess = 'Дек пуст'
 
    def __init__(self):
        self.items = []
 
    def push_front(self, item):
        self.items.append(item)
        return 'ok'
 
    def push_back(self, item):
        self.items.insert(0, item)
        return 'ok'
 
    def pop_front(self):
        if self.items:
            return self.items.pop()
        else:
            return Deque.empty_mess
 
    def pop_back(self):
        if self.items:
            return self.items.pop(0)
        else:
            return Deque.empty_mess
 
    def size(self):
        return len(self.items)
 
    def front(self):
        if self.items:
            return self.items[-1]
        else:
            return Deque.empty_mess
 
    def back(self):
        if self.items:
            return self.items[0]
        else:
            return Deque.empty_mess
 
    def clear(self):
        self.items.clear()
        return 'ok'
 
deque = Deque()
while True:
    print()
    command = input('->').split()
    if command[0] == 'exit':
        print('bye')
        break
    else:
        if len(command) == 1:
            f = methodcaller(command[0])
        elif len(command) == 2:
            f = methodcaller(command[0], int(command[1]))
        try:
            print(f(deque))
        except:
            print('Неверная команда!')
0
0 / 0 / 0
Регистрация: 13.10.2023
Сообщений: 51
17.10.2023, 12:28  [ТС]
я короче вот так сделал:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
from collections import deque
 
deq = deque()
while True:
    n = input().split()
    if n[0] == 'push_front':
        deq.appendleft(n[1])
        print('ok')
 
    elif n[0] == 'push_back':
        deq.append(n[1])
        print('ok')
 
    elif n[0] == 'pop_front':
        try:
            print(deq.popleft())
        except Exception:
            print('error')
 
    elif n[0] == 'pop_back':
        try:
            print(deq.pop())
        except Exception:
            print('error')
 
    elif n[0] == 'front':
        try:
            print(deq[0])
        except Exception:
            print('error')
 
    elif n[0] == 'back':
        try:
            print(deq[-1])
        except Exception:
            print('error')
 
    elif n[0] == 'size':
        print(len(deq))
 
    elif n[0] == 'clear':
        deq.clear()
        print('ok')
 
    else:
        print('bye')
        break
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
17.10.2023, 12:37
Цитата Сообщение от qwe5n Посмотреть сообщение
я короче вот так сделал
Ну так вы готовый класс использовали, только интерфейс поменяли, а вам-то задали его самому реализовать.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
17.10.2023, 12:44
idealist, ты думаешь, что ТС знает, что такое интерфейс?
1
0 / 0 / 0
Регистрация: 13.10.2023
Сообщений: 51
17.10.2023, 12:48  [ТС]
я извиняюсь, конечно, но вы, когда сами начинали, сразу все знали и понимали? просто иначе с какой целью я пишу на форум? и да, тс знает, что такое интерфейс
0
9 / 7 / 2
Регистрация: 16.10.2023
Сообщений: 25
17.10.2023, 12:57
Использование библиотеки: Мой код реализует дек с помощью встроенного списка Python, в то время как ваш код использует встроенный модуль collections.deque, который специально предназначен для эффективной реализации деков.

Обработка ошибок: Мой код возвращает сообщение ‘Дек пуст’, когда пытается удалить элемент из пустого дека, в то время как ваш код выводит ‘error’.

Методы: Мой код использует методы с именами push_front, push_back, pop_front, pop_back, size, front, back и clear. Ваш код использует те же имена методов, за исключением того, что size заменяется на len(deq).

Операторы: Мой код использует оператор methodcaller из модуля operator для вызова методов дека, в то время как ваш код вызывает методы напрямую.

Ввод команд: Мой код принимает команды в формате ‘->’, в то время как ваш просто принимает ввод без указания формата.

Добавлено через 3 минуты
Это различия, которые я нашел между нашими кодами.
0
0 / 0 / 0
Регистрация: 13.10.2023
Сообщений: 51
17.10.2023, 13:03  [ТС]
это вообще к чему? какая разница как код принимает команду, если ответ по итогу будет одинаковым? в чем проблема с методами, если их названия даны в условии задачи? в чем проблема с операторами?? я согласен только с тем, что я встроенный модуль использовал, но при всем этом ваш код тесты не проходит, а мой - проходит
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
17.10.2023, 13:11
Цитата Сообщение от qwe5n Посмотреть сообщение
это вообще к чему?
Это вообще к тому, что "решив" задачу подобным образом ты ничему не научился от слова совсем. То, что этот ответ приняла проверяющая система говорит только об убогости этой проверяющей системы в частности, и убогости такого обучения вцелом.
Равнозначно - задали на дом по уроку труда сделать своими руками скворечник. Ты купил скворечник и покрасил его в другой цвет. Всё. Скворечник своими руками сделан, научился.

Добавлено через 1 минуту
Ну или не купил скворечник, а попросил друга - чатжпт сделать его за тебя. Как сейчас модно
1
9 / 7 / 2
Регистрация: 16.10.2023
Сообщений: 25
17.10.2023, 13:18
Цитата Сообщение от qwe5n Посмотреть сообщение
это вообще к чему? какая разница как код принимает команду, если ответ по итогу будет одинаковым? в чем проблема с методами, если их названия даны в условии задачи? в чем проблема с операторами?? я согласен только с тем, что я встроенный модуль использовал, но при всем этом ваш код тесты не проходит, а мой - проходит
Это я просто указал анализ и различия. Там была дискуссия и я решил проанализировать ваш код, это мне интересно, это не критика.
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
17.10.2023, 15:34
Цитата Сообщение от MenBenKaPen Посмотреть сообщение
Мой код использует оператор methodcaller
А в какой строчке, не подскажете?
2
0 / 0 / 0
Регистрация: 13.10.2023
Сообщений: 51
17.10.2023, 15:48  [ТС]
Я так понимаю, 57 и 59
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.10.2023, 15:48
Помогаю со студенческими работами здесь

Дек неограниченного размера
Условие задачи: Реализуйте структуру данных "дек". Напишите программу, содержащую описание дека и моделирующую работу дека, реализовав...

Стек, очередь, дек
. Напишите программу, которая «переворачивает» массив, записанный в файл, с помощью стека. Размер массива неизвестен. . Напишите...

[Python] Дек с защитой от ошибок
Реализуйте структуру данных "дек". Напишите программу, содержащую описание дека и моделирующую работу дека, реализовав все указанные здесь...

Задачи Стек Дек Очередь
Помогите реализовать три задачи. 1. Сформировать стек с элементами — строками. Прочитать три нижних элемента стека и поменять...

Простой дек
Всем доброго вечера Столкнулся со следующей проблемой. Есть задание на простой дек: Реализуйте структуру данных "дек"....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru