在 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
会计算出来。
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
会计算出来。