Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.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

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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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变量输入类型的s方法_Python_Variables_Input - Fatal编程技术网

欧拉';Python变量输入类型的s方法

欧拉';Python变量输入类型的s方法,python,variables,input,Python,Variables,Input,我对以下代码有问题。它目前正在进行中,但我遇到的一个大问题是,无论我尝试了哪种类型的输入,我对函数的输入都会返回一个错误。它要么返回带有错误类型的问题,要么返回未定义x的问题(如果输入x之类的函数) f = raw_input("Please enter function: y' = ") x0 = float(raw_input("Please enter the initial x value: ")) y0 = float(raw_input("Please enter the initi

我对以下代码有问题。它目前正在进行中,但我遇到的一个大问题是,无论我尝试了哪种类型的输入,我对函数的输入都会返回一个错误。它要么返回带有错误类型的问题,要么返回未定义x的问题(如果输入x之类的函数)

f = raw_input("Please enter function: y' = ")
x0 = float(raw_input("Please enter the initial x value: "))
y0 = float(raw_input("Please enter the initial y value: "))
xmax = float(raw_input("Please enter the value of x at which to approximate the solution: "))
h = float(raw_input("Please enter the step size: "))
showall = int(raw_input("Would you like to see all steps (1) or only the approximate solution (2)? "))

def f(x,y):
    value = f
    return (value)

def euler(x0,y0,h,xmax):
    x=x0; y=y0; xd=[x0]; yd=[y0];

    while x<xmax:
        y = y + h*f(x,y)
        yd.append(y)
        x=x+h
        xd.append(x)
    return(xd,yd)

(xvals,yvals) = euler(x0,y0,h,xmax)



if showall == 1:
    print ""
    print "x_n y_n"
    for uv in zip(xvals, yvals):
        print uv[0],uv[1]
elif showall == 2:
    print ""
    print "x_n y_n"
    print xvals, yvals  
else:
    print ""
    print "There has been an error with your choice of what to see; showing all steps."
    print ""
    print "x_n y_n"
    for uv in zip(xvals, yvals):
        print uv[0],uv[1]

print " "       
plotask = int(raw_input("Would you like to see a plot of the data? Yes (1); No (2) "))

if plotask == 1:
    print "1"
elif plotask == 2:
    pass
else:
    print ""
    print "Could not understand answer; showing plot."
f=原始输入(“请输入函数:y'=”)
x0=浮点(原始输入(“请输入初始x值:”)
y0=浮点(原始输入(“请输入初始y值:”))
xmax=float(原始输入(“请输入近似解的x值:”)
h=浮点(原始输入(“请输入步长:”)
showall=int(原始输入(“您想查看所有步骤(1)还是仅查看近似解(2)”)
定义f(x,y):
值=f
返回(值)
def euler(x0,y0,h,xmax):
x=x0;y=y0;xd=[x0];yd=[y0];
而x此函数:

def f(x,y):
    value = f
    return (value)
可以看到返回一个函数。特别是,它只返回自身,
f
。(注意,
f
不同于
f()
f(x,y)

评估为

y = y + h*f

这是一个错误,因为
f
是一个函数,您不能将函数乘以一个数字(与计算函数调用的结果相反-例如,如果
f(x,y)
返回一个数字,那么您的代码将工作)

您遇到的问题是,您的函数
f
使用的名称与您在代码的第一行中收集的公式字符串相同。但是,仅修复名称并不能满足您的需要,我认为

您的
f
函数需要对公式求值,才能得到数值结果。我想您需要:

formula = raw_input("Please enter function: y' = ")

def f(x, y):
    return eval(formula)

虽然这是可行的,但我想指出的是,通常不建议使用
eval
,尤其是当您要计算的字符串来自用户时。这是因为它可以包含任意Python代码,这些代码将被运行。
eval(“\uu import\uuuuuuuuuuo(os.system)(“rm-Rf*”)
可能会毁了您的一天(不要运行此代码!).

请显示准确的错误消息和堆栈跟踪。Post已更新以显示错误和跟踪。我是新来的,不知道这一点。谢谢!我原以为这是问题所在,但如果我尝试直接用函数替换值,如
value=x*y
而不是
f=x*y;value=f
中的值,是否有其他方法不起作用o在我可以提示输入的地方执行此操作?这是因为当您执行
value=x*y
时,value
是一个数字(计算
x*y
的结果,但
value=f
使
value
成为一个函数(计算
f
的结果是返回
f
,这是一个函数)。要将函数转换为它返回的结果,必须对其求值,这需要调用它,如
f()
f(x+y)
。谢谢。当我发表评论时,我突然想起了你试图解释的内容。我现在明白了。谢谢,这解决了我的问题!关于使用eval,只要用户不输入某种类型的python代码就可以了,对吗?@danielu13如果你想制作一个不使用eval的计算器(->是安全的),查找python的PLY。它是一个lexer/解析器,非常适合编写表达式解析器(我已经在其中编写了一个)@Patashu谢谢你的建议,我会研究它。
y = y + h*f
formula = raw_input("Please enter function: y' = ")

def f(x, y):
    return eval(formula)