Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:你能把一个变量变成一个可解的方程吗?_Python_Variables_Equations - Fatal编程技术网

python:你能把一个变量变成一个可解的方程吗?

python:你能把一个变量变成一个可解的方程吗?,python,variables,equations,Python,Variables,Equations,你能把一个变量变成一个方程,这样就可以解出来吗 一个简单的例子如下 equ = "23/(n+2)" for n in range(2): ans = equ print ans 这是回报 23/(n+2) 23/(n+2) 而不是想要的 11.5 7.667 注: 您可以使用: 请注意,这将在Python2中给出不正确的结果(分别为11和7)。在Python3中,它将给出正确的结果。在Python 2中,可以通过确保至少有一个涉及的数字不是整数来解决这个问题: equ

你能把一个变量变成一个方程,这样就可以解出来吗

一个简单的例子如下

equ = "23/(n+2)"

for n in range(2):
    ans = equ
    print ans
这是回报

23/(n+2)
23/(n+2)
而不是想要的

11.5
7.667
注:

您可以使用:

请注意,这将在Python2中给出不正确的结果(分别为11和7)。在Python3中,它将给出正确的结果。在Python 2中,可以通过确保至少有一个涉及的数字不是整数来解决这个问题:

equ = "23.0/(n+2)"

for n in range(2):
    ans = equ
    print eval(ans)
您可以为此使用:

from sympy import sympify, Symbol

equ = "23/(n+2)"
equ_ = sympify(equ)
n_ = Symbol('n')

for n in range(2):
    print equ_.subs({n_: n}).evalf()

您可以使用
eval
,但在大多数情况下不应该使用。请在建议时始终说明
eval
的安全性和性能含义,并推荐替代方法,如
ast.literal\u eval
或只编写一个小型解析器。@l4mpi:
ast.literal\u eval
在这种情况下不起作用,因为字符串不包含文字。编写表达式解析器也不是一件小事(取决于技能水平)。
ast.literal\u eval
不合适,因为Python 2没有给出错误的结果——它们正是所说的结果。在Python3中,结果将不同,因为
/
除法运算符的含义已更改。在这方面,只需在脚本开头添加一个来自“未来”导入部分的
,就可以使版本2的行为类似于版本3。@martineau:你说的是正确的,但这只是因为我们在其他语言中习惯了这种行为。可以说Python2中的行为是不正确的,这就是为什么Python3中的行为发生了变化。
11/3
的除法应该给出一个分数,而不是
3
。如果我偏执,这不会“解决”任何问题。这仅仅是“计算”一个表达式。请详细说明@Sylvain的评论:你并不是在试图解一个方程。显然,您希望计算一个表达式的值,其中包含一个变量,该变量的值不同。在这种情况下,真正的“解方程”类似于确定
n
中的哪些值(如果有)给出了指定的结果。这比链接副本中的任何一个都要简洁得多。谢谢。这是新问题对多年重复的问题…@wim“这是新问题对多年重复的问题”处理这个问题的适当方法是什么:重新打开这个问题?把旧的作为这个的复制品合上?好问题。我不知道答案。这里讨论的是,sympy并不能像黑客一样免受攻击
from sympy import sympify, Symbol

equ = "23/(n+2)"
equ_ = sympify(equ)
n_ = Symbol('n')

for n in range(2):
    print equ_.subs({n_: n}).evalf()