在 Python 中进行此评估的更好方法

A better way of doing this evaluation in Python

我有一个函数,它提供一个包含 ax+b 形式的单个元素的列表,其中 a 和 b 是(多)数字字符,并且只有一个 'x'.

然后我将 x 换成一个数字并对结果使用 eval。

例如单个元素[64/243*x - 283/243]我申请

new_word=words.replace('x','7')

获得[64/243*7 - 283/243]

然后我评估

z=eval(new_word)

我想要实现的是一个循环,在该循环中我将各种数字放入 'x',并使用不同的列表元素。

在我这样做之前,除了使用 eval 之外,是否有一种 better/slicker/faster 方法可以针对 'x' 的不同值评估 [64/243*x - 283/243] 之类的东西?

或者将我指向您认为是我问题的答案的旧问题。

您可以生成可以显示和计算线性表达式的 class:

from fractions import Fraction
from random import randint

class Linear:

    def __init__(self):
        self.a = Fraction(randint(0, 10), randint(1, 10))
        self.b = Fraction(randint(0, 10), randint(1, 10))
        self.func = lambda x: self.a*x + self.b

    def __repr__(self):
        return f'Linear(a={self.a}, b={self.b})'

    def __str__(self):
        return f'{self.a}*x+{self.b}'

    def __call__(self,x):
        return self.func(x)

eq = Linear()
print(repr(eq))
for x in range(1,6):
    print(f'{eq} where x={x} => {eq(x)}')

输出:

Linear(a=3/5, b=4/5)
3/5*x+4/5 where x=1 => 7/5
3/5*x+4/5 where x=2 => 2
3/5*x+4/5 where x=3 => 13/5
3/5*x+4/5 where x=4 => 16/5
3/5*x+4/5 where x=5 => 19/5