Skip to main content
 首页 » 编程设计

python之如何检查用户输入的超越函数字符串是否存在于数学模块中

2025年05月04日17jackei

这是我的第一篇文章,我是编码的新手(Python 3 是我的第一语言)所以请耐心等待 :)

我不知道(甚至不知道自己应该搜索什么函数来尝试和学习)如何编写一些可以使用 while 循环来检查用户键入的先验函数是否有效的代码一,存在于数学模块中:

 user_fn_str = str(input("Type a transcendental function in this form: e.g. 'sin' or 'exp'")) 

然后说用户输入:

sim 

检查将失败(math.sim 不存在)并且它们将保留在 while 循环中直到有有效输入。

提前致谢。

请您参考如下方法:

您可以检查 math 的 dir(..),例如:

import math 
 
name in dir(math) 

但是对于'__doc__'和'pi'这样的事情,这也会给你True,所以你不能保证它是一个函数。

因此,您需要做的是获取属性并通过检查它是否附加了 __call__' 属性来检查它是否可调用。因此,完整的测试将类似于:

import math 
 
def is_math_function(funcname): 
    func = getattr(math,funcname,None) 
    return func is not None and hasattr(func, '__call__') 

你可以进一步优化它,因为 None 没有 __call__,所以你可以简单地说明:

def is_math_function(funcname): 
    return hasattr(getattr(math,funcname,None),'__call__') 

使其成为单行。

一些补充说明:

  • 如果测试成功,那不本身就意味着它是一个数学函数:math 可能包含一些额外的函数,例如 isnan 例如(好吧,你可以争论这是否是一个数学函数);和
  • 它没有说明参数数量,它可以是一个(例如对于math.sin),但也可以是多个(或者严格来说甚至没有参数,但对于 math 可能不是这种情况。