Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 11, 2016 20:31:48

1736w
Зарегистрирован: 2016-11-11
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Решение выражения из ввода

Помогите с кодом с:
Пользователь вводит пример , допустим 4+10-8=
Гарантируется, что числа, входящие в пример, являются целыми и берутся из интервала от 1 до 100.
на вывод должно пойти число являющееся результатом вычисления примера.

Офлайн

#2 Ноя. 11, 2016 21:52:57

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Решение выражения из ввода

 >>> s = eval('1 + 3')
>>> s
4



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Ноя. 13, 2016 08:23:26

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Решение выражения из ввода

eval - небезопасная функция, с ее помощью пользователь может выполнить, например, rm -rf /, что плохо…
Если Python3.x, то безопасней:

 import ast
s = ast.literal_eval('1+2+3+4')

В Python2.x literal_eval таким образом не сработает, но и здесь можно придумать кое-что, но мы ориентируемся на Python3…

Отредактировано scidam (Ноя. 13, 2016 08:23:59)

Офлайн

#4 Ноя. 13, 2016 08:51:57

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Решение выражения из ввода

В виде бреда, вот безопасное решение

 import execjs
execjs.eval("1+2")



Офлайн

#5 Ноя. 13, 2016 08:56:01

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Решение выражения из ввода

как вариант:

 from sympy.parsing.sympy_parser import parse_expr
  
print(parse_expr('1 + 2 + 3', evaluate=False), '=', parse_expr('1 + 2 + 3'))
1 + 2 + 3 = 6



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version