1 / 1 / 0
Регистрация: 08.07.2022
Сообщений: 87

Разделение на лексемы

19.09.2022, 12:21. Показов 2103. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Знаю, что такая тема была и я ее просмотрела, но туда писать не стала, т.к ответа не дождусь, поэтому дубляж.
Задача: из данного математического выражения нужно выделить лексемы. Все операторы и скобки - это отдельные лексемы, числа - так же должны быть отдельными лексемами. Например 10 + 90 = 100, результат: [10, +, 90, =, 100].
Я написала код, но там есть ошибки и что сделать, чтобы работало не знаю. Сам код больше отображает идею как реализвать.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Oper = ['*', ':', '-', '+', '=', '(', ')']
 
Exp = ''.join(input('Введите математическое выражение: ').split())
 
Lex = []
 
def main():
    a = ''
    while i not in Oper:
        a += i
        i = i + 1
    return a
 
 
for j in Exp:
    if j in Oper:
        Lex.append(j)
    else:
        main()
        Lex.append(a)
 
print(Lex)
Не судите строго)
Смысл такой. Нужно, чтобы была функция, которая будет искать цифры и добавлять их в строку (ну или объединенный список), затем должен быть цикл, который при нахождении операторов сразу их добавит в конечный список, если нет - выполнит функцию, и только потом значение добавится в конечный список. Вот. Пожалуйста помогите)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.09.2022, 12:21
Ответы с готовыми решениями:

Разделение выражения на лексемы
Задано числовое выражение. Необходимо разбить его на лексемы и вывести каждую на новой строке. Гарантируется, что исходное выражение...

Разделение выражения на лексемы
Задано числовое выражение. Необходимо разбить его на лексемы и вывести каждую на новой строке. Гарантируется, что исходное выражение...

Разделение строки на лексемы с strtok, проверка длины каждой лексемы (выдает ошибку)
я именно вот разделяю строку на лексемы и хочу проверить длину каждой лексемы, потом выполнить действия в зависимости от длины..но...

10
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
19.09.2022, 12:30
Какой результат должен получиться, например, из строки:
80-(4+4)*3*2=32
Т.к. степени нет в списке, то убрал из выражения.
0
1 / 1 / 0
Регистрация: 08.07.2022
Сообщений: 87
19.09.2022, 12:36  [ТС]
[80, -, (, 4, +, 4, ), *, 3, *, *, 2, =, 8]

Добавлено через 3 минуты
Но программа их всё равно должна воспринимать как два разных символа
0
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
19.09.2022, 12:50
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def f(s):
    oper = ['*', ':', '-', '+', '=', '(', ')']
    res = []
    tmp = ''
    for sym in s:
        if sym in '0123456789':
            tmp += sym
        elif sym in oper:
            if tmp:
                res.append(int(tmp))
            res.append(sym)
            tmp = ''
    if tmp:
        res.append(int(tmp))
 
    return res
 
 
exp = '80-(4+4)*3**2=8'.replace(' ', '')
print(f(exp))
1
1 / 1 / 0
Регистрация: 08.07.2022
Сообщений: 87
19.09.2022, 12:56  [ТС]
А какую нагрузку несет tmp?

Добавлено через 33 секунды
Наверное я не верно спросила. Сейчас

Добавлено через 27 секунд
Цитата Сообщение от Alexarh Посмотреть сообщение
if tmp:
                res.append(int(tmp))
            res.append(sym)
            tmp = ''
    if tmp:
        res.append(int(tmp))
Вот эта часть кода не очень понятно(
0
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
19.09.2022, 12:59
В tmp числа "собираются".
0
1 / 1 / 0
Регистрация: 08.07.2022
Сообщений: 87
19.09.2022, 13:03  [ТС]
Ясно. Но я еще всё-таки спрошу. А что значит if tmp:?
0
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
19.09.2022, 13:09
Это проверка. Когда цикл обработал последний символ и добавил его в tmp, он заканчивает работу, в переменной есть информация, но мы ее не добавили в итоговый список. Вот и проверяем, если tmp не пустая, то добавляем то, что там есть в итоговый результат.
1
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
19.09.2022, 13:21
Python
1
2
3
4
5
6
import re
 
#s = '80-(4+4)*3*2=32'
s = '10 + 90 ** 2 = 100'
 
print(re.findall(r'(\d+|[-+*=/]+)', s))
1
1 / 1 / 0
Регистрация: 08.07.2022
Сообщений: 87
19.09.2022, 13:27  [ТС]
Так, я почти разобралась, только зачем последнее условие? Я его сейчас закомментировала и результат не изменился.

Добавлено через 1 минуту
iSmokeJC, iSmokeJC, Здравствуй мастер регулярных выражений)) Ну точно придется разобраться в них
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
19.09.2022, 13:39
Цитата Сообщение от lena_torez Посмотреть сообщение
придется разобраться в них
Дерзай

PS: круглые скобки из регулярки убрать надо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.09.2022, 13:39
Помогаю со студенческими работами здесь

Разделение выражения на лексемы
Доброго времени суток уважаемые модераторы и простые граждане! Задано числовое выражение. Необходимо разбить его на лексемы и вывести...

Разделение строки на лексемы.. strcmp
всем вечер добрый! Кто чем может, помогите плиз. Есть String STROKA; , туда записывается параметр из файла ini файла с помощь...

StringBuffer, разделение на лексемы и запись в массив
Здравствуйте :) Передо мной стоит вроде как легкая задача, но я не могу ее выполнить в силу того что с джавой пока на вы. Задача очень...

Строковый массив, разделение фразы на лексемы
Доброго времени суток. помогите разобраться. Зарастание спасибо. Разделил на лексемы всё отлично. #pragma hdrstop #pragma...

Разбить строку на лексемы и вывести лексемы в обратном порядке.
Ребята, помогите. Получил такое задание: Напишите программу, которая вводит строку текста, разбивает ее на лексемы и выводит лексемы в...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru