Bootstrap

Python计算数学函数

目标

利用Python创建一元或多元数学函数,并当输入自变量取值时,自动输出函数值。

一元函数

创建函数

该函数的参数有两部分,一是函数表达式,不可或缺,以字符串形式输入;二是自变量,也以字符串形式输入,且默认为'x'

def func(inputfunc,vari='x'):

代入自变量取值

x = (x为自变量名称,可替换为其他)的提示语句要求用户输入自变量的具体值,并替换函数表达式中的所有自变量为该输入值,进行计算,输出结果。这些步骤必须循环运行,直至出错,或用户没有输入为止。

def func(inputfunc,vari='x'):
    while True:
        try:
            numinput = input('%s = ' % vari)
            if numinput:
                inputfunc1 = inputfunc.replace(vari, numinput)
                print(eval(inputfunc1))
            else:
                print('break')
                break
        except:
            print('break')
            break

多元函数

创建函数

该函数的参数同样需要一个函数表达式和自变量名称,自变量个数可为任意正整数。

def mfunc(inputfunc,*varis):

设置提示语句

提示语句由按顺序的多个自变量名称和等号构成,多个自变量名称需由逗号隔开。用prom表示。

def mfunc(inputfunc,*varis):
    while True:
        try:
            prom = ''
            for vari in varis:
                prom += vari + ', '
            prom = prom[:-2]
        except:
            print('break')
            break

代入自变量取值

用户输入多个自变量取值时也因用逗号隔开。假如输入的自变量取值数量与自变量个数不相等,则停止。相等时,才依次代入各个自变量取值到函数表达式中,并计算表达式,输出结果。

def mfunc(inputfunc,*varis):
    while True:
        try:
            prom = ''
            for vari in varis:
                prom += vari + ', '
            prom = prom[:-2]
            numinputlist = input('%s = ' % prom).split(',')
            if len(numinputlist) == len(varis):
                inputfunc1 = inputfunc
                for n in range(len(varis)):
                    inputfunc1 = inputfunc1.replace(varis[n], numinputlist[n])
                print(eval(inputfunc1))
            else:
                print('break')
                break
        except:
            print('break')
            break

完整代码

def func(inputfunc,vari='x'):
    while True:
        try:
            numinput = input('%s = ' % vari)
            if numinput:
                inputfunc1 = inputfunc.replace(vari, numinput)
                print(eval(inputfunc1))
            else:
                print('break')
                break
        except:
            print('break')
            break

def mfunc(inputfunc,*varis):
    while True:
        try:
            prom = ''
            for vari in varis:
                prom += vari + ', '
            prom = prom[:-2]
            numinputlist = input('%s = ' % prom).split(',')
            if len(numinputlist) == len(varis):
                inputfunc1 = inputfunc
                for n in range(len(varis)):
                    inputfunc1 = inputfunc1.replace(varis[n], numinputlist[n])
                print(eval(inputfunc1))
            else:
                print('break')
                break
        except:
            print('break')
            break

运行结果

>>> func('x**2+2*x+1')
x = 10
121
x = -7
-62
x = 5.5
42.25
x = this is an error!
break
>>> func('a-100', 'a')
a = 45
-55
a = 
break
>>> mfunc('x*y*z+x+2*y+3*z', 'x', 'y', 'z')
x, y, z = 1, 2, 3
20
x, y, z = 0, 5**4, 12
1286
x, y, z = 
break
;