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

Проверка правильности расстановки различных скобок в файле

31.10.2016, 17:24. Показов 10734. Ответов 2
Метки нет (Все метки)

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

С первой частью задания проблем не возникло. Мое решение задачи с использованием стека:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def isBalanced(file):
    with open(file) as f:
        strInput = f.read()
        if strInput:
            brackets = [ ('(',')'), ('[',']'), ('{','}')]
            kStart = 0
            kEnd = 1
 
            stack = []
 
            for char in strInput:
                for bracketPair in brackets:
                    if char == bracketPair[kStart]:
                        stack.append(char)
                    elif char == bracketPair[kEnd] and len(stack) > 0 and stack.pop() != bracketPair[kStart]:
                        return False
 
            if len(stack) == 0:
                return True
 
        return False
Также сделана функция для поиска строки и колонки нужного символа в файле:

Python
1
2
3
4
5
6
def line_col(symbol,file):
    with open(file) as myFile:
        for num, line in enumerate(myFile, 1):
            if symbol in line:
                idx = line.index(symbol)
                print ('symbol at line:', num,'symol at column:', idx)
У меня никак не получается прийти к решению проблемы и объединить 2 функции воедино. Подскажите, пожалуйста, что делать дальше?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.10.2016, 17:24
Ответы с готовыми решениями:

Контроль правильности расстановки скобок в файле
Для учебно-исследовательского проекта Вася пишет очень длинное математическое выражение, в котором много разных скобок. Скобки это один...

Напишите функцию для проверки правильности расстановки скобок четырех видов
Напишите функцию brackets2() для проверки правильности расстановки скобок четырех видов: , (),{},<>. Функция возвращает True,...

Проверка правильности расстановки скобок
Доброго время суток товарищи программисты. Дано задание: Требуется проверить правильность расстановки скобок в некотором выражении. Если...

2
Заблокирован
31.10.2016, 23:01
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
class StapleError(Exception):
    def __init__(self, staple, err):
        reason = '%s%s:<<%s>>:%s'
        staple.line = staple.line.replace('\n', '\\n')
        self.reason = reason % (err, staple.idx_line, staple.line, staple.idx_char)
 
    def __str__(self):
        return self.reason
 
 
class Staple:
    def __init__(self, idx_line, line, idx_char):
        self.idx_line = idx_line
        self.line = line
        self.idx_char = idx_char
 
 
def check(filename):
    dstaple = {'(':[], '[':[], '{':[]}
    dstaple_close = {')':'(', ']':'[', '}':'{'}
    
    with open(filename) as f:
        for idx_line, line in enumerate(f, start=1):
            for idx_char, char in enumerate(line, start=1):
                if char in dstaple:
                    dstaple[char].append(Staple(idx_line=idx_line, line=line, idx_char=idx_char))
                elif char in dstaple_close:
                    try:
                        dstaple[dstaple_close[char]].pop()
                    except IndexError:
                        raise StapleError(Staple(idx_line=idx_line, line=line, idx_char=idx_char), 'Error staple close in: ')
    
    for _, l in dstaple.items():
        for staple in l:
            raise StapleError(staple, 'Error staple open in: ')
 
    print('Check is done. File is correct')
 
 
check('file.txt')
Еще можно так:
Python
1
2
3
4
5
6
7
8
9
def main(filename):
    try: 
        check(filename)
        return True
    except StapleError as e:
        print(e) #debug
        return (e.idx_line, e.idx_char)
 
main('file.txt')
1
0 / 0 / 0
Регистрация: 31.10.2016
Сообщений: 12
01.11.2016, 00:36  [ТС]
askurandrio, Спасибо огромное, это просто гениально! я еще не очень дружу с классами, пойду разбираться. Вы меня спасли)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.11.2016, 00:36
Помогаю со студенческими работами здесь

Проверка правильности расстановки скобок
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include&lt;locale.h&gt; struct stack { int size;//размер стека char * st;//добавляем...

Проверка правильности расстановки скобок
Помогите, пожалуйста, в написании счетчика скобок. Только новичок в программирование. Что-то пытался сделать . Начало программы выглядит...

Проверка правильности расстановки скобок
Задача Bracket. В сложных математических выражениях приходится иногда ставить много скобок. Часто бывает трудно посчитать, сколько скобок...

Проверка правильности расстановки скобок
В арифметическом выражении, записанном в одну строку, есть круглые, квадратные и фигурные скобки. Верно записано выражение?

Проверка правильности расстановки скобок
Преподаватель поставила сегодня в тупик вопросом. Как с помощью оператора выбора Case проверить правильность расстановки скобок ? ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru