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

Исправить ошибку в коде

18.03.2023, 22:39. Показов 585. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите пожалуйста с такой проблемой. Я написал код, который вычисляет введённые арифметические выражения, но вместо выдачи решенного выражения, выдаётся "[]" (причем даже если не ввести выражение и нажать "Enter"). Ниже прикреплю задание, по которому делал код, и сам код.
Задание:
Дописать представленный код на языке программирования Python, который будет организовывать ввод арифметического выражения. При подсчете учитывать
наличие нескольких арифметических знаков, наличие скобок, приоритет операций. (Без использования e.val!)
Код:
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
# Код
expression = input("Введите арифметическое выражение: ")
 
# Преобразуем строку в последовательность лексем
tokens = expression.split()
 
# Создаем стек для операций
stack = []
 
# Создаем список для выходной последовательности
output = []
 
# Определяем приоритеты операций
precedence = {
    '+': 1,
    '-': 1,
    '*': 2,
    '/': 2,
    '^': 3
}
 
# Проходим по всем лексемам
for token in tokens:
    # Если текущая лексема - число, добавляем ее в выходную последовательность
    if token.isdigit():
        output.append(token)
    # Если текущая лексема - операция
    elif token in precedence:
        # Пока в стеке есть операции и приоритет текущей операции меньше или равен приоритету операции на вершине стека
        while stack and precedence[token] <= precedence[stack[-1]]:
            # Добавляем операцию из стека в выходную последовательность
            output.append(stack.pop())
        # Добавляем текущую операцию в стек
        stack.append(token)
    # Если текущая лексема - открывающая скобка, добавляем ее в стек
    elif token == '(':
        stack.append(token)
    # Если текущая лексема - закрывающая скобка
    elif token == ')':
        # Пока на вершине стека не будет открывающая скобка
        while stack[-1] != '(':
            # Добавляем операцию из стека в выходную последовательность
            output.append(stack.pop())
        # Удаляем открывающую скобку из стека
        stack.pop()
# Когда все лексемы будут просмотрены
while stack:
    # Добавляем операцию из стека в выходную последовательность
    output.append(stack.pop())
 
# Выводим выходную последовательность
print(output)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.03.2023, 22:39
Ответы с готовыми решениями:

Как исправить ошибку в коде?
Запись числа 338 в системе счисления с основанием N содержит 3 цифры и оканчивается на 2. Чему равно максимально возможное основание...

Исправить ошибку в коде
import sys from PyQt5 import uic from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget class Window(QMainWindow): ...

Исправить ошибку в коде
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # В списке, состоящем из вещественных элементов, вычислить: # 1) произведение...

2
 Аватар для TimutGin
515 / 339 / 146
Регистрация: 16.02.2021
Сообщений: 626
18.03.2023, 23:41
Для начала код
Цитата Сообщение от JohnCarlemone Посмотреть сообщение
expression = input("Введите арифметическое выражение: ")
# Преобразуем строку в последовательность лексем
tokens = expression.split()
заменить на

Python
1
tokens = input("Введите арифметическое выражение: ")
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,213
19.03.2023, 13:45
Цитата Сообщение от JohnCarlemone Посмотреть сообщение
Задание:
1.
Цитата Сообщение от JohnCarlemone Посмотреть сообщение
tokens = expression.split()
- здесь будет разрезана строка на список по пробелам и только...
Поэтому, проще заменить эту часть:
Цитата Сообщение от JohnCarlemone Посмотреть сообщение
Python
1
2
3
expression = input("Введите арифметическое выражение: ")
# Преобразуем строку в последовательность лексем
tokens = expression.split()
вот этим:
Python
1
2
3
tokens = input("Введите арифметическое выражение: ")
if ' ' in tokens:
    tokens.replace(' ','')
Строка, сама по себе, является массивом и дополнительного преобразования не требуется, в этом частном случае...

Далее, вот здесь:
Цитата Сообщение от JohnCarlemone Посмотреть сообщение
Python
1
while stack and precedence[token] <= precedence[stack[-1]]:
По совпадению в условиях, возможна ситуация, когда в stack будет содержаться символ, отсутствующий в словаре precedence и соответственно, в этом выражении:
Python
1
precedence[stack[-1]]
произойдет исключение... то бишь, скобки необходимо внести в словарь операторов, как минимум... но подозреваю, что в логике кода это не заложено, поэтому проверяйте, тренируйтесь и тогда получится то, что требовалось...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.03.2023, 13:45
Помогаю со студенческими работами здесь

Необходимо исправить ошибку в коде
Здравствуйте, помогите пожалуйста исправить ошибку в коде. Буду очень благодарен за помощь ;) Код: from aiogram import Bot, types ...

Как исправить ошибку в коде
Проблема в выполнении кода. При вводе чисел &quot;1 1 1 1&quot; или &quot;30 1 2 3&quot; выдаёт ошибку: &quot;line 49, in &lt;module&gt; if correct_card ==...

Помогите исправить ошибку в коде
import string n=input() b=input() m=False result = list(n) result2=list(b) if result.isdigit()==m or result2.isdigit()==m : ...

Как исправить ошибку в коде и где она?
from math import sin, cos, sqrt, pi from numpy import arange import matplotlib.pyplot as plt #задаем параметрические функции def...

PyQt5 не понимаю как исправить ошибку в коде
Собственно нужно очистить QListWidget (12 строчка), при нажатии по кнопке (41 строчка), подключается метод test (46 строчка), в методе test...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru