On Wed, Apr 23, 2014 at 7:21 AM, Aaron Meurer <asmeu...@gmail.com> wrote: > On Tue, Apr 22, 2014 at 3:28 PM, Amit Saha <amitsaha...@gmail.com> wrote: >> Hello all, >> >> In my early days of exploring SymPy, I found often that one *could* >> use strings as arguments to various SymPy's functions, instead of >> passing Symbol objects. A case in point is the solve() function. For >> example: >> >>>>> expr = input('Enter an expression: ') >> >> Enter an expression: x + 3*y - 6 >>>>> expr = sympify(expr) >>>>> solve(expr, 'y') >> # get the solution back. >> >> However, I have also learned along the way (from you all) that this is >> not be relied upon. I shouldn't really use strings here. So, I >> thought that (something along these lines) is the more correct >> approach: > > Yes. Here are some reasons why it is bad > https://github.com/sympy/sympy/wiki/Idioms-and-Antipatterns#strings-as-input. > Basically, using strings to do symbolic math is like going back to the > stone age. You can't do any mathematical manipulation on the string, > at least not without making things very complicated. Whenever I see > code that does '(' + expression1 + ')' + '+' + '(' + expression2 + ') > it makes me want to scream.
Thanks, Aaron. I will take a look at that link. I am sure you have referred to it earlier as well, but I will try to take a deeper look. > >> >> # For example: >> for s in expr.atoms(Symbol): >> if s.name == 'y': >> solutions = solve(expr, s) > > Why do you need to do this? Just solve(expr, Symbol('y')). > > Or better yet, if you know the variable name ahead of time, just do y > = Symbol('y') once and be done with it (even if you don't know the > name, you can do that; the name of the Python variable does not have > to match the name of the Symbol that it points to). Looks like i had a confusion here, i thought the *same* symbol object as in the sympified expression had to passed to solve(). That is, since Symbol('y') creates a different object, it would not work. But this works. This is certainly simpler than doing all the above. Is this behavior always true or there are any gotchas? Best, Amit. -- http://echorand.me -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sympy+unsubscr...@googlegroups.com. To post to this group, send email to sympy@googlegroups.com. Visit this group at http://groups.google.com/group/sympy. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/CANODV3n09ys0ZGnqnL0-devuOyNTvw1HJVLeYHRst%3DPJFyF5wg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.