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

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

21.06.2020, 10:56. Показов 32900. Ответов 6

Студворк — интернет-сервис помощи студентам
Cобственно, условие задачи:
Пользователь вводит с клавиатуры арифметическое выражение. Например, 24+1.Необходимо вывести на экран результат выражения. В нашем примере это 25. Арифметическое выражение может состоять только из трёх частей: число, операция, число. Возможные операции: +, -,*,/

Такой вариант:

string = '24+1'
print(eval(string))

не подходит, потому что только начали проходить строки и списки. Функцию eval() еще не учили. Вариант с парсером тоже сложноват для начального уровня.
Может нужно написать цикл, который будет перебирать элементы строки и разделять их по символам арифметических операторов? Помогите, пожалуйста с решением
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.06.2020, 10:56
Ответы с готовыми решениями:

Вычисление арифметического выражения, введённого в виде символьной строки
Напишите программу, которая вычисляет арифметическое выражение, введённое в виде символьной строки. Выражение содержит только целые числа,...

Калькулятор: вычисление арифметического выражения, введённого в виде символьной строки
Привет,не понимаю в чём смысл задачи) Питон же сам считает) Напишите программу, которая вычисляет арифметическое выражение,...

Вычисление выражения, введенного в строку
пользователь вводит выражение в строковую переменную. Пример выражения: 2+x*3 Мне нужно эту строку обработать так, чтобы каждый...

6
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
21.06.2020, 11:08
Лучший ответ Сообщение было отмечено Ihor_ как решение

Решение

Цитата Сообщение от Ihor_ Посмотреть сообщение
Вариант с парсером тоже сложноват
Вообще нет:

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
s = '24+1'
i = 0
 
arg1 = []
while True:
    if s[i] in '1234567890':
        arg1.append(s[i])
        i += 1
    else:
        break
arg1 = int(''.join(arg1))
 
if s[i] not in '+-/*':
    raise ValueError
op = s[i]
i += 1
 
arg2 = []
while True:
    try:
        if s[i] in '1234567890':
            arg2.append(s[i])
            i += 1
    except IndexError:
        break
arg2 = int(''.join(arg2))
 
print(arg1, op, arg2)
Добавлено через 1 минуту
Проще:
Python
1
2
3
4
5
6
s = '24+1'
if '+' in s:
    a, b = s.split('+')
    print(int(a) + int(b))
elif '-' in s:
    pass
1
0 / 0 / 0
Регистрация: 21.06.2020
Сообщений: 8
21.06.2020, 13:52  [ТС]
Спасибо. Вполне подходит. А вы не могли бы объяснить построчно, что происходит на строках с 11 по 16 ?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
21.06.2020, 14:03
Получаем первое число
Python
1
2
>>> int(''.join(['2', '4']))
24
И проверяем на валидность операцию (белый список).

Возьми второй код и не парься.
1
0 / 0 / 0
Регистрация: 21.06.2020
Сообщений: 8
21.06.2020, 14:10  [ТС]
Да я взял, но хочется разобраться. У меня первый вариант кода выводит выражение 24 + 1 , а не решение этого выражения.
Если убрать конструкцию try ... except ... , то при определении второго числа вылетает ошибка
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
21.06.2020, 14:13
Первый пример просто недописан

Python
1
2
3
4
5
print(arg1, op, arg2)
if op == '+':
    print(arg1 + arg2)
elif op == '-':
    print(arg1 - arg2)
1
0 / 0 / 0
Регистрация: 25.02.2021
Сообщений: 2
02.03.2021, 19:26
Вот так будет проще
Python
1
2
a = input()
print(eval(a))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.03.2021, 19:26
Помогаю со студенческими работами здесь

Определить число вхождений указанного пользователем слова в строку текста, введённого пользователем.
Определить число вхождений указанного пользователем слова в строку текста, введённого пользователем на классическом С Скажите в чем я...

Вычислить значение арифметического выражения, введённого в виде строки.
Нужно вернуть значения арифметического выражения введённого в виде строки. Объясните, пожалуйста, 1. Почему при вводе в x1 и x2...

Вывести результат введенного в Edit арифметического выражения в нем же
как сделать так чтобы после ввода в edit операции, например 1+2*4 он выводит ответ в том же окне?? то просто введя в edit ур-е что бы он...

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru