【问题标题】:How to take a user input as if it was entered as code?如何将用户输入作为代码输入?
【发布时间】:2017-09-12 12:47:14
【问题描述】:

当用户使用输入命令输入函数时,我试图让函数以特定格式返回多项式。但是,即使使用 eval(input()),我认为这是一种糟糕的做法,也会使其陷入循环。以下是我的代码:

def func(x):
    function = eval(input("enter a string in the format (x - 3) * (x - 5) * (x - 7) + 85")) #should run this as code so horid security, but still busted
    return function

我希望它像这样运行:

def func(x):
return (x - 3) * (x - 5) * (x - 7) + 85

如果用户要输入该函数,但如果用户输入了该格式的任何多项式,也可以工作。

这看起来很笼统,我认为至少我可以用 eval(input()) 来欺骗它,但是使用 eval 会使程序陷入循环,提示用户无限期地输入函数

【问题讨论】:

  • 这对我有用(Python 3)。
  • 只要定义了 x,这段代码就可以工作。
  • 在函数func中定义。所以这个例子本身应该可以工作。
  • @abccd 这可能不是描述该问题的最佳方式,但它陷入了无限循环,在该循环中提示用户输入该功能的次数与他们将回答的次数相同,并且不会继续程序如图所示 (imgur.com/a/uBjxG)

标签: python string input


【解决方案1】:

如何创建用户输入函数。

import functools
formula = input('enter formula.')
f = functools.partial(eval, formula)

现在 f 是您将通过执行此操作调用的多项式函数。

result = f([arg1, arg2, arg3, argN])

【讨论】:

    【解决方案2】:

    eval 只计算表达式。您可以使用lambda 在表达式中定义函数:

    f = eval('lambda x: ' + input())
    

    这相当于def f(x): return ...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      相关资源
      最近更新 更多