在 python 中用空值替换值时,如何不替换数组中的值?

how can you don't replace a value in an array when you are replacing the value with nothing in python?

import sympy as sp
import math
import re

a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z = sp.symbols('a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z') 

formula = input('')
unknown_values = int(input('how many unknown values?: '))

unknown_array = []
values = []

for i in range(unknown_values):
    unknown_name = input('unknown value: ')
    unknown_array += [unknown_name]

for i in range(len(unknown_array)):
    values += [input('Enter the value of ' + unknown_array[i] + ': ')]

for word in unknown_array:
    formula = formula.replace(word, values[unknown_array.index(word)])


formula = re.split(r'[=|<|>|<=|>=|==]', formula)[0:2]
split_a = sympify(formula[0])
split_b = sympify(formula[1])
split_c = simplify(split_a - split_b)
result = sp.solve(split_c, x)

for w in result:
    print(w.evalf())

输入:a*x**2 + b*x + c = 0

有多少个未知值?:3

未知值:一个

未知值:b

未知值:c

输入a的值:1

输入b的值:5

输入c的值:6

-3.00000000000000

-2.00000000000000

我的代码就是这样工作的。但是当我将值放入 'unknown_array' 时,我只需要放入 a、b、c 而不是 x,因为它是我需要找到的那个。我还想在 'unknown_array' 和 'values' 中添加 x(只需按回车键)。问题是,如果我什么都不放,那么当它替换值时,它只会消除 x。所以我希望在我按下 enter 的每个值中,它不会替换该值并将该值放在这里:result = sp.solve(split_c, ...);而不是 3 点,因此求解该值。而如果有多个值,它将一次求解一个并打印每个结果。

您正在使用不需要的字符串进行操作,但如果您想重新发明轮子,这始终是一种学习方式,所以我不会尝试更改代码。但是至于如何解决 x 以外的问题,您需要确定剩下的变量。您可以通过让用户确定他们要为其提供值的内容来做到这一点,然后不要说您正在解决 x:

sp.solve(split_c) instead of sp.solve(split_c, x)

这将 return 一个包含已求解值的字典。

否则,如果你有一个像 a*x+b 这样的表达式,他们说有 3 个未知数,他们想 "press return" 在他们想要求解的那个上,然后在代入值时, 替换的时候直接跳过那个(或者替换成对应的符号):

for word in unknown_array:
    i = unknown_array.index(word)
    formula = formula.replace(word, values[i] or unknown_array[i])

然后,再一次,不要将 x 传递给 solve -- 如果还剩一个符号,solve 会计算出来。