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

Удалить из выражения лишние скобки

08.10.2023, 16:30. Показов 1715. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Напиши программу на питоне, которая уберет из вводимого
выражения лишние скобки и выведет. Пример: входные данные:
Code
1
((а+(b+c))*d)
, выходные данные:
Code
1
(a+b+c)*d
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.10.2023, 16:30
Ответы с готовыми решениями:

Удалить лишние пробелы(регулярные выражения)
Мне нужно удалить только лишние пробелы с помощью регулярных выражений. У меня получилось так: s = 'Термин " Регулярные...

Убрать лишние скобки из алгебраического выражения, используя стек
Задана строка, содержащая алгебраическое выражение со скобками. Требуется убрать лишние скобки. Пример. Исходная строка. ((a+b)+c) ...

Убрать лишние скобки из алгебраического выражения, используя стек
Задана строка, содержащая алгебраическое выражение со скобками. Требуется убрать лишние скобки. Пример. Исходная строка. ((a+b)+c) ...

3
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
09.10.2023, 00:22
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

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
is_op = lambda x: x in '+-*/'
prior = lambda x: 2 if x in '*/' else 1
 
def inf_to_postf(ex):
    st = []
    q = []
    for symb in ex:
        if symb.isalpha():
            q.append(symb)
        elif is_op(symb):
            if not st or st[-1] == '(':
                st.append(symb)
            elif prior(st[-1]) < prior(symb):
                st.append(symb)
            else:
                while st[-1] != '(' and prior(st[-1]) >= prior(symb):
                    q.append(st.pop())
                st.append(symb)
        elif symb == '(':
            st.append(symb)
        elif symb == ')':
            while st[-1] != '(':
                q.append(st.pop())
            st.pop()
    while st:
        q.append(st.pop())
    return q
 
def post_to_inf(ex):
    st = []
    for symb in ex:
        if symb.isalpha():
            st.append(symb)
        elif is_op(symb):
            R = st.pop()
            L = st.pop()
            if symb in '*/':
                if '+' in L or '-' in L:
                    L = '(' + L + ')'
                if '+' in R or '-' in R:
                    R = '(' + R + ')'
            st.append(L + symb + R)
    return st[-1]
 
expr = input('Введите выражение из букв, скобок и знаков операций "+-*/":')
postf_expr = inf_to_postf(expr)
res = post_to_inf(postf_expr)
print(res)
1
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
09.10.2023, 23:04
Еще вариант:
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
def parse(ex, ind_L, ind_R):
    inter_ops = set(ex[ind_L+1:ind_R]) & set('+-*/')
    without_brackets = ex[:ind_L] + ex[ind_L: ind_R + 1].replace('(', ' ').replace(')', ' ') + ex[ind_R + 1:]
    if not inter_ops:
        return without_brackets
    else:
        checked_symbols = []
        if ind_L:
            checked_symbols.append(ex[ind_L-1])
        if ind_R < len(ex)-1:
            checked_symbols.append(ex[ind_R+1])
        exter_ops = set(checked_symbols) & set('+-*/')
    if not exter_ops:
        return without_brackets
    else:
        exter_ops_have_mul = exter_ops & set('*/')
        inter_ops_have_mul = inter_ops & set('*/')
        if exter_ops_have_mul and not inter_ops_have_mul:
            return ex[:ind_L] + ex[ind_L: ind_R+1].replace('(', '[').replace(')', ']') + ex[ind_R+1:]
        else:
            return without_brackets
 
expr = input('Введите корректное выражение из букв, скобок и операторов "+-*/":')
while True:
    expr = expr.replace(' ','')
    level = -1
    br = []
    for i in range(len(expr)):
        if expr[i] == '(':
            level += 1
            br.append(['(', level, i])
        elif expr[i] == ')':
            br.append([')', level, i])
            level -= 1
 
    if not br:
        expr = expr.replace('[','(').replace(']',')').replace(' ','')
        break
 
    for i in range(len(br)-1):
        level = 1
        expr_ind = 2
        if br[i][level] == br[i+1][level] and br[i][0] == '(' and br[i+1][0] == ')':
            L = br[i][expr_ind]
            R = br[i+1][expr_ind]
            expr = parse(expr, L, R)
print(expr)
1
 Аватар для VistaSV30
988 / 332 / 79
Регистрация: 10.04.2012
Сообщений: 1,245
Записей в блоге: 4
09.10.2023, 23:06
Решение для тех кому лень
Python
1
2
3
4
from sympy import simplify
from sympy.abc import x, y, z, w
 
simplify(((x+(y+z))*w))
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.10.2023, 23:06
Помогаю со студенческими работами здесь

Отредактировать предложение, удаляя из него лишние скобки, оставляя только парные скобки
Отредактировать предложение, удаляя из него лишние скобки, оставляя только парные скобки. Вот код, но работать он отказывается. Исправьте...

Регулярные выражения - удалить лишние символы
Здравствуйте! Есть слово ivan/.` Я хочу удалить не нужные символы /.`Вот код. Подскажите, что не так, почему символы не удаляются? ...

Нужно удалить все что идет после открывающейся скобки и саму скобку тоже при помощи регулярного выражения
Нужно удалить все что идет после открывающейся скобки и саму скобку тоже Анкилоз (ankylosis; Анкилостомидозы (ancylostomidoses) ...

Удалить из заданной строки фрагменты, заключенные в скобки (скобки могут быть вложенными)
Удалить из заданной строки фрагменты, заключенные в скобки (скобки могут быть вложенны). За строки не шарю, а сроки горят

Лишние скобки в выражениях
- лишними скобками (как кашу маслом) код не испортишь!


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
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
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru