题目来源:洛谷P1022 题目链接
这里我使用了Python来求解这道题,其中使用了
- eval()函数
- re.sub()函数
那么首先来讲讲 eval() 函数,这个函数可以将字符串转化为可以运行的表达式
- 将字符串转换为可以用于计算的式子,例如:
dict_1={'a':1,'b':2}
print(eval("a+b"),dict_1)
#输出为 3
dict_1={'a':1,'b':2}
print(eval("a+b",{'a':6}))
#输出结果 8
a=2
b=3
print(eval("a+b"))
#输出结果5
- 可以实现列表,字典,元祖与字符串的相互转化,例如:
dict_1="{'a':1,'b':2}"
dict_2=eval(dict_1)
print(type(dict_2))
#输出结果为:<class 'dict'>
list_1="[1,2,3]"
list_2=eval(list_1)
print(type(list_2))
#输出结果为:<class 'list'>
tuple_1="(1,2,3)"
tuple_2=eval(tuple_1)
print(type(tuple_2))
#输出结果为:<class 'tuple'>
但是值得注意的是eval()在使用的时候会伴随着一系列的安全性问题
接下来我们再来看看re.sub()函数
使用这个函数时记得要先导入正则表达式的库 re
re.sub(匹配的正则,替换的字符,被匹配的字符)
其中被匹配的正则是可以是一个函数(在re.sub函数中,会自动向第二个函数中传递一个参数,参数为被匹配的字符),使用方法如下:
import re
string="hello 123"
replaced=re.sub("(?P<name>\d+)",addn,string)
#name是族群名字
def addn(matched):
str_1=matched.group("name")
#str_1便是被匹配到的字符
int_1=int(str_1)
int_1+=12
return str(int_1)
print(replaced)
#输出结果是:hello 135
那么如何写出一元一次方程的改良呢?
思路如下:
- 首先对输入的字符串进行修剪,将其转换为计算机可以运行的算式
- 然后通过eval函数对其进行求解
那么代码呢?
import re
string=input("")+" "
def soul(string,value):
str_1=string.replace("=","-(")+")"
r=eval(str_1,{value:1j})
out=(str(value)+"=")
print("%s=%.3f" % (str(value),(-r.real/r.imag)))
def get_un(string):
'''获取未知数'''
pattern=re.compile("[a-z]")
value=pattern.findall(string)[0]
return value
value=get_un(string)
def deal(string):
'''对方程进行加工'''
replaced=re.sub("(?P<number>\d+)",addn,string)
return replaced
def addn(matched):
str_1=matched.group("number")
place=matched.span()[1]
global string
global value
if string[place]==value:
str_2=str_1+"*"
else:
str_2=str_1
return str_2
if __name__=="__main__":
replaced=deal(string)
soul(replaced,value)
作者:NorthCity1984
出处:https://grimoire.cn/algorithm/equation.html
版权:本文《一元一次方程的改良与求解》版权归作者所有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
出处:https://grimoire.cn/algorithm/equation.html
版权:本文《一元一次方程的改良与求解》版权归作者所有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任