有趣的问题,这里有一个潜在的解决方案。毫无疑问,您可以使用库或lambdas等来创建一个更优雅的解决方案,就像fourtheye在他们的答案中所做的那样,但是这似乎是有效的。在

我在底部做了一些测试用例,如果需要调试信息,请将全局verbose设置为True:# globals

verbose = False # set to True if you want debug info printed

max_iter = 1000 # this stops infinate loops incase the code does not allow for some input

def solve(problem_str):

def multiply(arg_list):

x = 1

for i in arg_list:

x *= i

return x

def find_innermost(x_str):

a, b, c, i = [0], [0], 0, 0

while True:

i += 1

start = a[-1]+1

a.append(x_str.find('(', start)) # find next (

b.append(x_str.find(',', start)) # find next ,

c = x_str.find(')', start) # find next )

if (a[-1] > c) or (a[-1] == -1):

if (b[-2] > a[-3]) and (b[-2] < a[-2]):

return x_str[b[-2]+1:c+1]

else:

return x_str[a[-3]+1:c+1]

if i >= max_iter:

raise Exception("Infinite loop")

def do_sum(x_str):

args = [int(x) for x in x_str[x_str.find('(')+1:x_str.find(')')].split(',')]

task = x_str[:3].lower()

if task == 'add':

return sum(args)

elif task == 'sub':

return args[0] - sum(args[1:])

elif task == 'abs':

return abs(args.pop())

elif task == 'mul':

return multiply(args)

else:

print x_str + ': Task not recognised, please modify program or input'

raise Exception("Invalid input")

i = 0

while True:

i += 1

if verbose: print 'debug: problem_str:', problem_str

if problem_str.count('(') > 1:

x_str = find_innermost(problem_str)

else:

x_str = problem_str

if verbose: print '.'*6, 'x_str:\t', x_str

x = do_sum(x_str)

if verbose: print '.'*6, 'x:\t', x, '\n'

problem_str = problem_str.replace(x_str, str(x))

if problem_str.count('(') == 0:

return int(problem_str)

if i >= max_iter:

raise Exception("Infinite loop")

if __name__ == '__main__':

p1 = 'abs(add(add(9465,38),multiply(add(63303,146),46)))'

p2 = 'abs(add(multiply(95,multiply(-1,multiply(13,18875))),multiply(-1,add(18293,26))))'

p3 = 'abs(add(subtract(add(add(151,26875),122),254),subtract(237,multiply(-1,56497))))'

r1, r2, r3 = solve(p1), solve(p2), solve(p3)

print 'p1 evaluates to:', r1

print 'p2 evaluates to:', r2

print 'p3 evaluates to:', r3

如果你对代码有任何疑问,请告诉我。在

python内置数学函数库_在没有任何内置的求值函数或外部库的情况下用python解决数学问题...相关推荐

  1. python中sign函数图片_机器学习 第33集:什么是sign函数?什么是sigmoid函数?( 含有笔记、代码、注释 )...

    什么是sign函数?什么是sigmoid函数? ① sign(x)将大于0的分为1,小于0的分为-1. ② sigmoid(x)将大于0.5的分为1,小于0.5的分为0. Python基础积累 函数 ...

  2. python货币转换b_【Python】第3次作业:if条件语句——阶乘、表达式求值、货币转换 I(单符号)、温度转换...

    [Python]第3次作业:if条件语句--阶乘.表达式求值.货币转换 I(单符号).温度转换 1.阶乘 题目:用户输入一个正整数,计算其阶乘. import math x=int(input()) ...

  3. 以下不是python内置数据类型的是_以下不是python内置数据类型的是

    以下不是python内置数据类型的是 答:float 关于分娩先兆,下述哪项是错误的 答:初产妇见红血量比经产妇多 中国提出的________理念,为世界和平繁荣提供了新路径,并被写入联合国决议 答: ...

  4. python内置数据类型与特点_初学Python之内置数据类型一

    Python中一些基本数据类型: Booleans[布尔型] 或为 True[真] 或为 False[假]. Numbers[数值型] 可以是 Integers[整数](1 和 2).Floats[浮 ...

  5. python自己写库1001python自己写库_超酷!我不写一行代码,爬取GitHub上几万的Python库...

    菜鸟独白 爬虫很有趣,很多同学都在学爬虫,其实爬虫学习有一定的成本,需要考虑静态和动态网页,有一堆的库需要掌握,复杂的需要用scrapy框架,或者用selenium爬取,甚至要考虑反爬策略.如果你不经 ...

  6. java中compile函数用法_【转】关于java中Pattern.compile函数的相关解释

    Pattern.compile函数:Pattern Pattern.compile(String regex, int flag) flag的取值范围如下: Pattern.CANON_EQ,当且仅当 ...

  7. 在不打开excel的情况下用python执行excel的万得wind更新

    经常用excel显示万得数据的朋友会遇到一个问题,每次更新数据要打开excel才行,比如如下代码获取当日的所有A股. =wset("sectorconstituent"," ...

  8. python有像sumif的函数吗_在WPS表格中如何巧用SUMIF函数筛选后求和销售业绩

    在财务数据统计中,有时要对部分或特殊条件的数据进行筛选求和,例如工资表中同人名的奖金总和;或销售表中同产品的销量总和等.在财务数据统计中,有时要对部分或特殊条件的数据进行筛选求和,例如工资表中同人名的 ...

  9. 在mysql中如何添加函数库_详细讲解如何为MySQL数据库添加新函数

    你可以通过自定义函数接口 (UDF)来添加函数.自定义函数被编译为目标文件,然后用CREATE FUNCTION 和DROP FUNCTION 声明动态地添入到服务器中及从服务器中移出. 你可以将函数 ...

最新文章

  1. 2022-2028年中国第五代移动通信技术(5G)市场研究及前瞻分析报告
  2. Facebook计划整合WhatsApp、Instagram和Messenger的基础设施
  3. page fault in nonpaged area 蓝屏_记一次蓝屏0x00000050
  4. 关于雅可比迭代的Python实现
  5. 直播预告 | 中国工程院院刊:信息与电子工程领域青年学术前沿论坛
  6. python中类的定义方法_在Python中定义类变量的正确方法
  7. SAP UI5 oFileUpload.getUploadEnabled()
  8. 用Python写网络爬虫pdf
  9. python 当日日期_Python程序寻找当日赢家
  10. OC 应用跳转QQ私聊界面或者申请加群
  11. 华为库存至少够缓冲一年;张朝阳质疑 5G 微波危害;苹果iOS 13不受支持机型曝光 | 极客头条...
  12. jquery bind button 点击事件
  13. 【转】Windows和Ubuntu双系统,修复UEFI引导的两种办法
  14. Vbs判断两个Excel文件的内容--将两个Excel文件相同内容写入新建的Excel文件内
  15. 电脑显示未安装任何音频输出设备_未安装任何音频输出设备-华硕A556UQ7200(4GB/128GB+500GB/2G独显)...
  16. cnc计算机控制,CNC控制器
  17. 【离散数学】平凡子群
  18. flink 出现反压场景, 异常场景造成Exceeded checkpoint tolerable failure threshold.
  19. Zeloof 自制芯片工艺
  20. 百战归来再读书--一个程序员的2008年阅读书目

热门文章

  1. python判断当前时间是否在两个时间之间_Python 判断时间是否在时间区间内的实例...
  2. 傅里叶滤波音频文件(笔记05)
  3. android高级资料
  4. lisp画垫圈_晓东CAD家园-论坛-LISP/VLISP程序库-[LISP程序]:俺的画内六角圆柱头螺钉的LISP程序-见附件 - Powered by Discuz!...
  5. python nan判断_Python数据分析:Numpy基本操作
  6. mac设置python3环境变量_mac下python3的环境变量设置!
  7. 中判断字符串是否为空_自己动手编写VBA代码,判断一个工作表是否为空,然后删除它...
  8. linux ssd硬盘做缓存,linux系统中ssd当块设备缓存
  9. 在LINQPad中征服ASP.NET Boilerplate查询性能
  10. ASP.NET核心之路微服务第02部分:查看组件