题目:
对于用户输入的一个关于变量x、y、z的三元函数 f(x,y,z),三元函数g(x,y,z)= f…
主函数:
from math import *
def construct_g_from_f(fexp):
##########begin##########
##########end##########
while True:
fexp = input('[f(x,y,z)=')
if fexp =='end':
break
g = construct_g_from_f(fexp)
#print(type(g))
print("%.6f"%(g(2,3,4)))
这个题之前一直不会做,主要是当时没理解返回一个函数是啥意思,突然顿悟…现在终于搞懂了(~ ̄▽ ̄)~,要记录一下。当时小白的我最常遇见的错误就是x is not defined!!!
在函数中使用exec就会出问题
答案:
我目前只想到两种方法,有其他更好的解决办法也可以在评论区留言哦~
from math import *
def construct_g_from_f(fexp):
#解法1:嵌套函数,返回的h是一个函数,而不是函数值
##########begin##########
def h(x,y,z):
return eval(fexp)**2+2*x*y*z*eval(fexp)+(x*y*z)**2
return h
##########end##########
#解法2:lambda函数
##########begin##########
return lambda x,y,z:eval(fexp)**2+2*x*y*z*eval(fexp)+(x*y*z)**2
##########end##########
while True:
fexp = input('[f(x,y,z)=')
if fexp =='end':
break
g = construct_g_from_f(fexp)
#print(type(g))
print("%.6f"%(g(2,3,4)))
-
其实返回的这个h(就是g),相当于g(x,y,z),和lambda返回一个函数是一个意思,所以下面可以调用g(2,3,4),eval是直接返回字符串里面表达式 的计算结果。
-
输入的时候,必须是x,y,z(不能是a,b,c这种),因为在h(x,y,z)中会使用他们,如果没定义就会报错。