Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 08.07.2022
Сообщений: 87

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

19.09.2022, 12:21. Показов 2097. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru