olá, alguém saberia me informa como faço para o python interpretar uma função como entrada? por exemplo, quero digitar 4*(1/(1+x^2)) e quero que o códico reconheça essa entrada e faça as contas que eu programei.

15 views
Skip to first unread message

yankarlo carvalho

unread,
Sep 14, 2021, 8:40:49 AMSep 14
to Python Brasil
cd1.pngcd2.png

Marcelo Valle

unread,
Sep 14, 2021, 8:59:13 AMSep 14
to Python Brasil
Pro seu programa python, `4*(1/(1+x^2))` não passa de uma string. Quando você digita isso no interpretador python, isso não é entendido como uma string, mas como código python. 

A pergunta parece simples, mas na verdade esse é um requisito bem complicado... Se o seu programa precisa receber fórmulas matemáticas do usuário e interpretar essas fórmulas, ele precisará de soluções similares ao que o código fonte da própria linguagem usa para interpretar essas funções matemáticas. Tenha em mente que um programa que recebe apenas um valor é imensamente mais simples do que um capaz de interpretar expressões matemáticas. 

Como você colocou no seu segundo código, contudo, existe essa função "eval". A função não interpretará apenas funções matemáticas, mas código python em geral. Isso significa que você pode dar uma instrução ao Python para que ele execute código python inserido pelo usuário e retorne o valor final. 

Você consegue imaginar como isso poderia ser usado, numa situação real, de forma maliciosa por um usuário mal intencionado? Num exercício didático não há o menor problema em usar algo assim, mas num programa mais profissional você estaria dando liberdade para o usuário colocar qualquer código python que seu programa execute, e isso será executado com as permissões do seu programa e não com as permissões do usuário. Você poderia, por exemplo, entrar com um código python que apaga todos os arquivos do disco ao invés de uma expressão matemática. No mundo real, essa instrução `eval` é raramente usada e se você tivesse um requisito que requeresse interpretar funções matemáticas, o melhor provavelmente seria achar uma biblioteca especifica para avaliar expressões matemáticas e usar.

No seu caso - fica a pergunta - por que você quer que o usuário digite uma expressão matemática? Você não conseguiria resolver o mesmo problema de forma mais simples, pedindo para o usuário digitar apenas um valor?

Abraços,
Marcelo.




On Tue, 14 Sept 2021 at 13:40, yankarlo carvalho <fisican...@gmail.com> wrote:
cd1.pngcd2.png

--
--
------------------------------------
Grupo Python-Brasil
https://wiki.python.org.br/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/python-brasil/195f7472-3bdc-4278-9d70-508e5db1025bn%40googlegroups.com.

Djaysel Pessôa

unread,
Sep 14, 2021, 2:37:43 PMSep 14
to Python Brasil
Tenta o seguinte:

Recebe a função e trata ela como string

daí utiliza expressões regulares -  (854) Expressões regulares em Python - Parte 1 - YouTube e com elas identifica tudo na expressão matemática podendo seguir qualquer caminho a partir disso

Eu chamo isso de gambiarra, mas funciona perfeitamente se entender a lógica das expressões regulares

Djaysel Pessôa

unread,
Sep 14, 2021, 2:40:45 PMSep 14
to Python Brasil
uma forma mais simples é recorrer ao .find(), mas acredito que existirão muitos ifs pra fazer e alguns for

Luiz Antonio Calliari Filho

unread,
Sep 14, 2021, 10:09:39 PMSep 14
to Python Brasil
Boa noite,
Pelo o que entendi você quer entrar com qualquer função que tenha somente uma variável ("x") e aplicar esse "metodosimpson" para solucioná-la. Correto?

Sendo esse o caso, a meu ver basta você dar um replace no "X" antes de efetuar o eval, assim ele faz o cálculo para cada uma das variáveis que você precisar.
Por exemplo:
>>> f = "4*(1/1+x^2))"
>>> x = 10
>>> f1 = f.replace('x', str(x))
>>> f1
'4*(1/1+10^2))'

Abraço
Em terça-feira, 14 de setembro de 2021 às 09:40:49 UTC-3, fisican...@gmail.com escreveu:
cd1.pngcd2.png
Reply all
Reply to author
Forward
0 new messages