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

Простой дек

17.10.2023, 09:03. Показов 2130. Ответов 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,707
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,707
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,707
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,707
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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru