在 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
我有一个函数,它提供一个包含 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